--- zzzz-none-000/linux-5.15.111/kernel/printk/printk.c 2023-05-11 14:00:40.000000000 +0000 +++ puma7-atom-6670-761/linux-5.15.111/kernel/printk/printk.c 2024-02-07 10:23:28.000000000 +0000 @@ -48,6 +48,13 @@ #include #include +#ifdef CONFIG_AVM_DEBUG +#include +#if defined(CONFIG_SMP) && defined(CONFIG_MIPS) +#include +#endif +#endif + #include #include @@ -1306,6 +1313,16 @@ buf[len] = '\0'; } + +#if defined(CONFIG_AVM_DEBUG) && defined(CONFIG_SMP) + if ((info->flags & LOG_PRINTK_AVM) && buf) { + if (len && buf[len-1] == ' ') + len--; + len += sprintf(&buf[len], "[%s%x]", + info->cpu & 0x80 ? "N" : "", info->cpu & ~0x80); + } +#endif + return len; } @@ -1664,6 +1681,10 @@ if (error) return error; + error = security_syslog(type); + if (error) + return error; + switch (type) { case SYSLOG_ACTION_CLOSE: /* Close log */ break; @@ -1916,7 +1937,11 @@ * log_buf[start] to log_buf[end - 1]. * The console_lock must be held. */ -static void call_console_drivers(const char *ext_text, size_t ext_len, +static void call_console_drivers( +#if defined(CONFIG_AVM_DEBUG) + int flags, +#endif + const char *ext_text, size_t ext_len, const char *text, size_t len) { static char dropped_text[64]; @@ -1925,6 +1950,13 @@ trace_console_rcuidle(text, len); +#if defined(CONFIG_AVM_DEBUG) + if ((flags & LOG_PRINTK_AVM) && + (avm_debug_console_write(text, len) == 0)) { + return; + } +#endif + if (!console_drivers) return; @@ -2148,6 +2180,17 @@ if (!printk_enter_irqsave(recursion_ptr, irqflags)) return 0; +#if defined(CONFIG_AVM_DEBUG) + if (facility & FORCE_PRINTK_LINUX_FACILITIES_VALUE) + facility &= ~FORCE_PRINTK_LINUX_FACILITIES_VALUE; + else if (force_printk_avm || + (facility & FORCE_PRINTK_AVM_FACILITIES_VALUE)) { + facility &= ~FORCE_PRINTK_AVM_FACILITIES_VALUE; + /* force console-output over avm_debug_console_write() */ + flags |= LOG_PRINTK_AVM; + } +#endif + /* * The sprintf needs to come first since the syslog prefix might be * passed in as a parameter. An extra byte must be reserved so that @@ -2213,6 +2256,9 @@ r.info->facility = facility; r.info->level = level & 7; r.info->flags = flags & 0x1f; +#if defined(CONFIG_AVM_DEBUG) + r.info->cpu = smp_processor_id(); +#endif r.info->ts_nsec = ts_nsec; r.info->caller_id = caller_id; if (dev_info) @@ -2321,10 +2367,24 @@ struct dev_printk_info *dev_info) { return 0; } static void console_lock_spinning_enable(void) { } static int console_lock_spinning_disable_and_check(void) { return 0; } -static void call_console_drivers(const char *ext_text, size_t ext_len, +static void call_console_drivers( +#if defined(CONFIG_AVM_DEBUG) + int flags, +#endif + const char *ext_text, size_t ext_len, const char *text, size_t len) {} static bool suppress_message_printing(int level) { return false; } +#ifdef CONFIG_AVM_DEBUG +static int no_vprintk(const char *fmt, + va_list args) +{ + return 0; +} + +asmlinkage int (*vprintk)(const char *fmt, va_list args) = no_vprintk; +#endif /* CONFIG_AVM_DEBUG */ + #endif /* CONFIG_PRINTK */ #ifdef CONFIG_EARLY_PRINTK @@ -2731,7 +2791,11 @@ console_lock_spinning_enable(); stop_critical_timings(); /* don't trace print latency */ +#if defined(CONFIG_AVM_DEBUG) + call_console_drivers(r.info->flags, ext_text, ext_len, text, len); +#else call_console_drivers(ext_text, ext_len, text, len); +#endif start_critical_timings(); handover = console_lock_spinning_disable_and_check(); @@ -3357,6 +3421,16 @@ static DEFINE_SPINLOCK(dump_list_lock); static LIST_HEAD(dump_list); +#if defined(CONFIG_AVM_DEBUG) +bool kmsg_dump_get_buffer_nocontext(bool syslog, char *buf, size_t size, size_t *len) { + struct kmsg_dump_iter iter; + + kmsg_dump_rewind(&iter); + + return kmsg_dump_get_buffer(&iter, 0, buf, size, len); +} +#endif/*--- #if defined(CONFIG_AVM_DEBUG) ---*/ + /** * kmsg_dump_register - register a kernel log dumper. * @dumper: pointer to the kmsg_dumper structure