diff options
Diffstat (limited to 'common/misc.c')
-rw-r--r-- | common/misc.c | 53 |
1 files changed, 36 insertions, 17 deletions
diff --git a/common/misc.c b/common/misc.c index 0f6de3e9e5..04ff4e6eb5 100644 --- a/common/misc.c +++ b/common/misc.c @@ -13,6 +13,7 @@ #include <led.h> #include <of.h> #include <restart.h> +#include <poweroff.h> #include <linux/stringify.h> int errno; @@ -105,16 +106,10 @@ const char *strerror(int errnum) } EXPORT_SYMBOL(strerror); -const char *errno_str(void) -{ - return strerror(errno); -} -EXPORT_SYMBOL(errno_str); - void perror(const char *s) { #ifdef CONFIG_ERRNO_MESSAGES - printf("%s: %s\n", s, errno_str()); + printf("%s: %m\n", s); #else printf("%s returned with %d\n", s, errno); #endif @@ -191,6 +186,8 @@ void barebox_set_serial_number(const char *__serial_number) const char *barebox_get_serial_number(void) { + if (!serial_number || *serial_number == '\0') + return NULL; return serial_number; } @@ -204,6 +201,8 @@ void barebox_set_of_machine_compatible(const char *__compatible) const char *barebox_get_of_machine_compatible(void) { + if (!of_machine_compatible || *of_machine_compatible == '\0') + return NULL; return of_machine_compatible; } @@ -218,23 +217,43 @@ device_initcall(of_kernel_init); BAREBOX_MAGICVAR(global.of.kernel.add_machine_compatible, "Additional machine/board compatible"); -void __noreturn panic(const char *fmt, ...) +static void __noreturn do_panic(bool stacktrace, const char *fmt, va_list ap) { - va_list args; - va_start(args, fmt); - vprintf(fmt, args); + vprintf(fmt, ap); putchar('\n'); - va_end(args); - dump_stack(); + if (stacktrace) + dump_stack(); led_trigger(LED_TRIGGER_PANIC, TRIGGER_ENABLE); - if (IS_ENABLED(CONFIG_PANIC_HANG)) { + if (IS_ENABLED(CONFIG_PANIC_HANG)) hang(); - } else { - udelay(100000); /* allow messages to go out */ + + udelay(100000); /* allow messages to go out */ + + if (IS_ENABLED(CONFIG_PANIC_POWEROFF)) + poweroff_machine(); + else restart_machine(); - } +} + +void __noreturn panic(const char *fmt, ...) +{ + va_list args; + + va_start(args, fmt); + do_panic(true, fmt, args); + va_end(args); } EXPORT_SYMBOL(panic); + +void __noreturn panic_no_stacktrace(const char *fmt, ...) +{ + va_list args; + + va_start(args, fmt); + do_panic(false, fmt, args); + va_end(args); +} +EXPORT_SYMBOL(panic_no_stacktrace); |