--- zzzz-none-000/linux-4.9.279/kernel/printk/printk.c 2021-08-08 06:38:54.000000000 +0000 +++ puma7-arm-6591-750/linux-4.9.279/kernel/printk/printk.c 2023-02-08 10:58:16.000000000 +0000 @@ -46,9 +46,24 @@ #include #include +#ifdef CONFIG_AVM_DEBUG +#include +#if defined(CONFIG_SMP) && defined(CONFIG_MIPS) +#include +#endif/*--- #if defined(CONFIG_SMP) && defined(CONFIG_MIPS) ---*/ +#endif/*--- #ifdef CONFIG_AVM_DEBUG ---*/ + #include #include +#if defined(CONFIG_AVM_FASTIRQ) +#include +#define __NONLINUX_CONTEXT_NAME "FastIrq" +#define _BUILD_AVM_CONTEXT_FUNC(func) firq_##func +#else +#define _BUILD_AVM_CONTEXT_FUNC(func) func +#endif + #define CREATE_TRACE_POINTS #include @@ -211,15 +226,6 @@ mutex_acquire(&console_lock_dep_map, 0, 0, _RET_IP_);\ } while (0) -static int __down_trylock_console_sem(unsigned long ip) -{ - if (down_trylock(&console_sem)) - return 1; - mutex_acquire(&console_lock_dep_map, 0, 1, ip); - return 0; -} -#define down_trylock_console_sem() __down_trylock_console_sem(_RET_IP_) - #define up_console_sem() do { \ mutex_release(&console_lock_dep_map, 1, _RET_IP_);\ up(&console_sem);\ @@ -328,6 +334,9 @@ LOG_NEWLINE = 2, /* text ended with a newline */ LOG_PREFIX = 4, /* text started with a prefix */ LOG_CONT = 8, /* text is a fragment of a continuation line */ +#if defined(CONFIG_AVM_DEBUG) + LOG_PRINTK_AVM = 0x10, +#endif/*--- #if defined(CONFIG_AVM_DEBUG) ---*/ }; struct printk_log { @@ -344,6 +353,12 @@ #endif ; +#if defined(CONFIG_AVM_DEBUG) +static int force_printk_avm = 0; +#endif/*--- #if defined(CONFIG_AVM_DEBUG) ---*/ +static bool no_avm_printk = false; +core_param(no_avm_printk, no_avm_printk, bool, 0644); + /* * The logbuf_lock protects kmsg buffer, indices, counters. This can be taken * within the scheduler's rq lock. It must be released before calling @@ -376,7 +391,6 @@ #define PREFIX_MAX 32 #define LOG_LINE_MAX (1024 - PREFIX_MAX) - #define LOG_LEVEL(v) ((v) & 0x07) #define LOG_FACILITY(v) ((v) >> 3 & 0xff) @@ -576,7 +590,7 @@ if (ts_nsec > 0) msg->ts_nsec = ts_nsec; else - msg->ts_nsec = local_clock(); + msg->ts_nsec = _BUILD_AVM_CONTEXT_FUNC(local_clock)(); memset(log_dict(msg) + dict_len, 0, pad_len); msg->len = size; @@ -783,20 +797,20 @@ ret = mutex_lock_interruptible(&user->lock); if (ret) return ret; - raw_spin_lock_irq(&logbuf_lock); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_lock_irq)(&logbuf_lock); while (user->seq == log_next_seq) { if (file->f_flags & O_NONBLOCK) { ret = -EAGAIN; - raw_spin_unlock_irq(&logbuf_lock); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_unlock_irq)(&logbuf_lock); goto out; } - raw_spin_unlock_irq(&logbuf_lock); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_unlock_irq)(&logbuf_lock); ret = wait_event_interruptible(log_wait, user->seq != log_next_seq); if (ret) goto out; - raw_spin_lock_irq(&logbuf_lock); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_lock_irq)(&logbuf_lock); } if (user->seq < log_first_seq) { @@ -804,7 +818,7 @@ user->idx = log_first_idx; user->seq = log_first_seq; ret = -EPIPE; - raw_spin_unlock_irq(&logbuf_lock); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_unlock_irq)(&logbuf_lock); goto out; } @@ -817,7 +831,7 @@ user->idx = log_next(user->idx); user->seq++; - raw_spin_unlock_irq(&logbuf_lock); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_unlock_irq)(&logbuf_lock); if (len > count) { ret = -EINVAL; @@ -844,7 +858,7 @@ if (offset) return -ESPIPE; - raw_spin_lock_irq(&logbuf_lock); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_lock_irq)(&logbuf_lock); switch (whence) { case SEEK_SET: /* the first record */ @@ -868,7 +882,7 @@ default: ret = -EINVAL; } - raw_spin_unlock_irq(&logbuf_lock); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_unlock_irq)(&logbuf_lock); return ret; } @@ -882,7 +896,7 @@ poll_wait(file, &log_wait, wait); - raw_spin_lock_irq(&logbuf_lock); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_lock_irq)(&logbuf_lock); if (user->seq < log_next_seq) { /* return error when data has vanished underneath us */ if (user->seq < log_first_seq) @@ -890,7 +904,7 @@ else ret = POLLIN|POLLRDNORM; } - raw_spin_unlock_irq(&logbuf_lock); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_unlock_irq)(&logbuf_lock); return ret; } @@ -920,10 +934,10 @@ mutex_init(&user->lock); - raw_spin_lock_irq(&logbuf_lock); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_lock_irq)(&logbuf_lock); user->idx = log_first_idx; user->seq = log_first_seq; - raw_spin_unlock_irq(&logbuf_lock); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_unlock_irq)(&logbuf_lock); file->private_data = user; return 0; @@ -1075,13 +1089,13 @@ return; } - raw_spin_lock_irqsave(&logbuf_lock, flags); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_lock_irqsave)(&logbuf_lock, flags); log_buf_len = new_log_buf_len; log_buf = new_log_buf; new_log_buf_len = 0; free = __LOG_BUF_LEN - log_next_idx; memcpy(log_buf, __log_buf, __LOG_BUF_LEN); - raw_spin_unlock_irqrestore(&logbuf_lock, flags); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_unlock_irqrestore)(&logbuf_lock, flags); pr_info("log_buf_len: %u bytes\n", log_buf_len); pr_info("early log buf free: %u(%u%%)\n", @@ -1202,6 +1216,12 @@ } len += print_time(msg->ts_nsec, buf ? buf + len : NULL); +#if defined(CONFIG_AVM_DEBUG) && defined(CONFIG_SMP) + if ((msg->flags & LOG_PRINTK_AVM) && buf) { + if (len && buf[len-1] == ' ') len--; + len += sprintf(&buf[len], "[%s%x]", msg->cpu & 0x80 ? "F" : "", msg->cpu & ~0x80); + } +#endif/*--- #if defined(CONFIG_AVM_DEBUG) && defined(CONFIG_SMP) ---*/ return len; } @@ -1259,7 +1279,7 @@ size_t n; size_t skip; - raw_spin_lock_irq(&logbuf_lock); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_lock_irq)(&logbuf_lock); if (syslog_seq < log_first_seq) { /* messages are gone, move to first one */ syslog_seq = log_first_seq; @@ -1267,7 +1287,7 @@ syslog_partial = 0; } if (syslog_seq == log_next_seq) { - raw_spin_unlock_irq(&logbuf_lock); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_unlock_irq)(&logbuf_lock); break; } @@ -1286,7 +1306,7 @@ syslog_partial += n; } else n = 0; - raw_spin_unlock_irq(&logbuf_lock); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_unlock_irq)(&logbuf_lock); if (!n) break; @@ -1315,7 +1335,7 @@ if (!text) return -ENOMEM; - raw_spin_lock_irq(&logbuf_lock); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_lock_irq)(&logbuf_lock); if (buf) { u64 next_seq; u64 seq; @@ -1363,12 +1383,12 @@ idx = log_next(idx); seq++; - raw_spin_unlock_irq(&logbuf_lock); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_unlock_irq)(&logbuf_lock); if (copy_to_user(buf + len, text, textlen)) len = -EFAULT; else len += textlen; - raw_spin_lock_irq(&logbuf_lock); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_lock_irq)(&logbuf_lock); if (seq < log_first_seq) { /* messages are gone, move to next one */ @@ -1382,7 +1402,7 @@ clear_seq = log_next_seq; clear_idx = log_next_idx; } - raw_spin_unlock_irq(&logbuf_lock); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_unlock_irq)(&logbuf_lock); kfree(text); return len; @@ -1469,7 +1489,7 @@ break; /* Number of chars in the log buffer */ case SYSLOG_ACTION_SIZE_UNREAD: - raw_spin_lock_irq(&logbuf_lock); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_lock_irq)(&logbuf_lock); if (syslog_seq < log_first_seq) { /* messages are gone, move to first one */ syslog_seq = log_first_seq; @@ -1497,7 +1517,7 @@ } error -= syslog_partial; } - raw_spin_unlock_irq(&logbuf_lock); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_unlock_irq)(&logbuf_lock); break; /* Size of the log buffer */ case SYSLOG_ACTION_SIZE_BUFFER: @@ -1520,8 +1540,12 @@ * Call the console drivers, asking them to write out * log_buf[start] to log_buf[end - 1]. * The console_lock must be held. + * FASTIRQ-Kontext-fest */ static void call_console_drivers(int level, +#if defined(CONFIG_AVM_DEBUG) + int flags, +#endif/*--- #if defined(CONFIG_AVM_DEBUG) ---*/ const char *ext_text, size_t ext_len, const char *text, size_t len) { @@ -1529,6 +1553,13 @@ trace_console_rcuidle(text, len); + if (level >= console_loglevel && !ignore_loglevel) + return; +#if defined(CONFIG_AVM_DEBUG) + if ((flags & LOG_PRINTK_AVM) && (avm_debug_console_write(text, len) == 0)) { + return; + } +#endif/*--- #if defined(CONFIG_AVM_DEBUG) ---*/ if (!console_drivers) return; @@ -1648,7 +1679,7 @@ cont.facility = facility; cont.level = level; cont.owner = current; - cont.ts_nsec = local_clock(); + cont.ts_nsec = _BUILD_AVM_CONTEXT_FUNC(local_clock)(); cont.flags = flags; cont.cons = 0; cont.flushed = false; @@ -1736,7 +1767,7 @@ char *text = textbuf; size_t text_len = 0; enum log_flags lflags = 0; - unsigned long flags; + unsigned long flags = 0; int this_cpu; int printed_len = 0; int nmi_message_lost; @@ -1749,10 +1780,19 @@ in_sched = true; } + this_cpu = raw_smp_processor_id(); + if (!_BUILD_AVM_CONTEXT_FUNC(is_avm_rte)()) { boot_delay_msec(level); printk_delay(); - - local_irq_save(flags); +#if defined(CONFIG_AVM_DEBUG) + } else { + facility &= ~FORCE_PRINTK_LINUX_FACILITIES_VALUE; + facility |= FORCE_PRINTK_AVM_FACILITIES_VALUE; + this_cpu |= 0x80; +#endif/*--- #if defined(CONFIG_AVM_DEBUG) ---*/ + } + /* This stops the holder of console_sem just where we want him */ + _BUILD_AVM_CONTEXT_FUNC(local_irq_save)(flags); this_cpu = smp_processor_id(); /* @@ -1776,7 +1816,7 @@ lockdep_off(); /* This stops the holder of console_sem just where we want him */ - raw_spin_lock(&logbuf_lock); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_lock)(&logbuf_lock); logbuf_cpu = this_cpu; if (unlikely(recursion_bug)) { @@ -1811,6 +1851,17 @@ lflags |= LOG_NEWLINE; } +#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() */ + lflags |= LOG_PRINTK_AVM; + } +#endif + /* strip kernel syslog prefix and extract log level or control flags */ if (facility == 0) { int kern_level; @@ -1836,6 +1887,7 @@ if (level == LOGLEVEL_DEFAULT) level = default_message_loglevel; + if (dict) lflags |= LOG_PREFIX|LOG_NEWLINE; @@ -1857,6 +1909,7 @@ if (console_trylock()) console_unlock(); lockdep_on(); + _BUILD_AVM_CONTEXT_FUNC(local_irq_restore)(flags); } return printed_len; @@ -1934,6 +1987,34 @@ } EXPORT_SYMBOL(printk); +#ifdef CONFIG_AVM_DEBUG +asmlinkage int printk_linux(const char *fmt, ...) { + va_list args; + int r; + + va_start(args, fmt); + r = vprintk_emit(FORCE_PRINTK_LINUX_FACILITIES_VALUE, -1, NULL, 0, fmt, args); + va_end(args); + return r; +} +EXPORT_SYMBOL(printk_linux); + +/*--------------------------------------------------------------------------------*\ + * ret: old-mode: 1 bended, 0: std.printk +\*--------------------------------------------------------------------------------*/ +int printk_avm_console_bend(unsigned int activate) { + int ret = 0; + ret = force_printk_avm; + if (activate && no_avm_printk) + pr_notice_once("AVM printk disabled by cmdline (no_avm_printk)\n"); + else + force_printk_avm = activate ? 1 : 0; + return ret; +} +EXPORT_SYMBOL(printk_avm_console_bend); + +#endif /* CONFIG_AVM_DEBUG */ + #else /* CONFIG_PRINTK */ #define LOG_LINE_MAX 0 @@ -1963,6 +2044,9 @@ char *dict, size_t dict_len, char *text, size_t text_len) { return 0; } static void call_console_drivers(int level, +#if defined(CONFIG_AVM_DEBUG) + int flags, +#endif const char *ext_text, size_t ext_len, const char *text, size_t len) {} static size_t msg_print_text(const struct printk_log *msg, @@ -1973,6 +2057,16 @@ /* Still needs to be defined for users */ DEFINE_PER_CPU(printk_func_t, printk_func); +#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 @@ -2116,14 +2210,14 @@ printk("Suspending console(s) (use no_console_suspend to debug)\n"); console_lock(); console_suspended = 1; - up_console_sem(); + _BUILD_AVM_CONTEXT_FUNC(up)(&console_sem); } void resume_console(void) { if (!console_suspend_enabled) return; - down_console_sem(); + _BUILD_AVM_CONTEXT_FUNC(down)(&console_sem); console_suspended = 0; console_unlock(); } @@ -2165,7 +2259,7 @@ { might_sleep(); - down_console_sem(); + _BUILD_AVM_CONTEXT_FUNC(down)(&console_sem); if (console_suspended) return; console_locked = 1; @@ -2183,27 +2277,17 @@ */ int console_trylock(void) { - if (down_trylock_console_sem()) + if (_BUILD_AVM_CONTEXT_FUNC(down_trylock)(&console_sem)) return 0; if (console_suspended) { - up_console_sem(); + _BUILD_AVM_CONTEXT_FUNC(up)(&console_sem); return 0; } console_locked = 1; - /* - * When PREEMPT_COUNT disabled we can't reliably detect if it's - * safe to schedule (e.g. calling printk while holding a spin_lock), - * because preempt_disable()/preempt_enable() are just barriers there - * and preempt_count() is always 0. - * - * RCU read sections have a separate preemption counter when - * PREEMPT_RCU enabled thus we must take extra care and check - * rcu_preempt_depth(), otherwise RCU read sections modify - * preempt_count(). - */ - console_may_schedule = !oops_in_progress && - preemptible() && - !rcu_preempt_depth(); + console_may_schedule = 0; + if (!_BUILD_AVM_CONTEXT_FUNC(is_avm_rte)()) + mutex_acquire(&console_lock_dep_map, 0, 1, _RET_IP_); + return 1; } EXPORT_SYMBOL(console_trylock); @@ -2246,7 +2330,7 @@ unsigned long flags; size_t len; - raw_spin_lock_irqsave(&logbuf_lock, flags); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_lock_irqsave)(&logbuf_lock, flags); if (!cont.len) goto out; @@ -2267,14 +2351,18 @@ goto out; len = cont_print_text(text, size); - raw_spin_unlock(&logbuf_lock); - stop_critical_timings(); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_unlock)(&logbuf_lock); + _BUILD_AVM_CONTEXT_FUNC(stop_critical_timings)(); +#if defined(CONFIG_AVM_DEBUG) + call_console_drivers(cont.level, cont.flags, NULL, 0, text, len); +#else call_console_drivers(cont.level, NULL, 0, text, len); - start_critical_timings(); - local_irq_restore(flags); +#endif + _BUILD_AVM_CONTEXT_FUNC(start_critical_timings)(); + _BUILD_AVM_CONTEXT_FUNC(local_irq_restore)(flags); return; out: - raw_spin_unlock_irqrestore(&logbuf_lock, flags); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_unlock_irqrestore)(&logbuf_lock, flags); } /** @@ -2290,6 +2378,7 @@ * If there is output waiting, we wake /dev/kmsg and syslog() users. * * console_unlock(); may be called from any context. + * FASTIRQ-Kontext fest */ void console_unlock(void) { @@ -2298,10 +2387,10 @@ static u64 seen_seq; unsigned long flags; bool wake_klogd = false; - bool do_cond_resched, retry; + bool do_cond_resched = false, retry; if (console_suspended) { - up_console_sem(); + _BUILD_AVM_CONTEXT_FUNC(up)(&console_sem); return; } @@ -2343,7 +2432,7 @@ size_t len; int level; - raw_spin_lock_irqsave(&logbuf_lock, flags); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_lock_irqsave)(&logbuf_lock, flags); if (seen_seq != log_next_seq) { wake_klogd = true; seen_seq = log_next_seq; @@ -2395,25 +2484,32 @@ } console_idx = log_next(console_idx); console_seq++; - raw_spin_unlock(&logbuf_lock); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_unlock)(&logbuf_lock); - stop_critical_timings(); /* don't trace print latency */ + _BUILD_AVM_CONTEXT_FUNC(stop_critical_timings)(); /* don't trace print latency */ +#if defined(CONFIG_AVM_DEBUG) + call_console_drivers(level, msg->flags, ext_text, ext_len, text, len); +#else call_console_drivers(level, ext_text, ext_len, text, len); - start_critical_timings(); - local_irq_restore(flags); +#endif + _BUILD_AVM_CONTEXT_FUNC(start_critical_timings)(); + _BUILD_AVM_CONTEXT_FUNC(local_irq_restore)(flags); if (do_cond_resched) cond_resched(); } console_locked = 0; + if (!_BUILD_AVM_CONTEXT_FUNC(is_avm_rte)()) + mutex_release(&console_lock_dep_map, 1, _RET_IP_); + /* Release the exclusive_console once it is used */ if (unlikely(exclusive_console)) exclusive_console = NULL; - raw_spin_unlock(&logbuf_lock); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_unlock)(&logbuf_lock); - up_console_sem(); + _BUILD_AVM_CONTEXT_FUNC(up)(&console_sem); /* * Someone could have filled up the buffer again, so re-check if there's @@ -2421,14 +2517,14 @@ * there's a new owner and the console_unlock() from them will do the * flush, no worries. */ - raw_spin_lock(&logbuf_lock); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_lock)(&logbuf_lock); retry = console_seq != log_next_seq; - raw_spin_unlock_irqrestore(&logbuf_lock, flags); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_unlock_irqrestore)(&logbuf_lock, flags); if (retry && console_trylock()) goto again; - if (wake_klogd) + if (wake_klogd && !_BUILD_AVM_CONTEXT_FUNC(is_avm_rte)()) wake_up_klogd(); } EXPORT_SYMBOL(console_unlock); @@ -2458,7 +2554,7 @@ * oops_in_progress is set to 1.. */ if (oops_in_progress) { - if (down_trylock_console_sem() != 0) + if (_BUILD_AVM_CONTEXT_FUNC(down_trylock)(&console_sem) != 0) return; } else console_lock(); @@ -2686,10 +2782,10 @@ * console_unlock(); will print out the buffered messages * for us. */ - raw_spin_lock_irqsave(&logbuf_lock, flags); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_lock_irqsave)(&logbuf_lock, flags); console_seq = syslog_seq; console_idx = syslog_idx; - raw_spin_unlock_irqrestore(&logbuf_lock, flags); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_unlock_irqrestore)(&logbuf_lock, flags); /* * We're about to replay the log buffer. Only do this to the * just-registered console to avoid excessive message spam to @@ -2725,7 +2821,7 @@ int unregister_console(struct console *console) { - struct console *a, *b; + struct console *a, *b; int res; pr_info("%sconsole [%s%d] disabled\n", @@ -2900,6 +2996,25 @@ 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_dumper _dumper, *dumper; + unsigned long flags; + + dumper = &_dumper; + /* initialize iterator with data about the stored records */ + dumper->active = true; + _BUILD_AVM_CONTEXT_FUNC(raw_spin_lock_irqsave)(&logbuf_lock, flags); + dumper->cur_seq = clear_seq; + dumper->cur_idx = clear_idx; + dumper->next_seq = log_next_seq; + dumper->next_idx = log_next_idx; + _BUILD_AVM_CONTEXT_FUNC(raw_spin_unlock_irqrestore)(&logbuf_lock, flags); + + return kmsg_dump_get_buffer(dumper, 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 @@ -2917,14 +3032,14 @@ if (!dumper->dump) return -EINVAL; - spin_lock_irqsave(&dump_list_lock, flags); + _BUILD_AVM_CONTEXT_FUNC(spin_lock_irqsave)(&dump_list_lock, flags); /* Don't allow registering multiple times */ if (!dumper->registered) { dumper->registered = 1; list_add_tail_rcu(&dumper->list, &dump_list); err = 0; } - spin_unlock_irqrestore(&dump_list_lock, flags); + _BUILD_AVM_CONTEXT_FUNC(spin_unlock_irqrestore)(&dump_list_lock, flags); return err; } @@ -2942,13 +3057,13 @@ unsigned long flags; int err = -EINVAL; - spin_lock_irqsave(&dump_list_lock, flags); + _BUILD_AVM_CONTEXT_FUNC(spin_lock_irqsave)(&dump_list_lock, flags); if (dumper->registered) { dumper->registered = 0; list_del_rcu(&dumper->list); err = 0; } - spin_unlock_irqrestore(&dump_list_lock, flags); + _BUILD_AVM_CONTEXT_FUNC(spin_unlock_irqrestore)(&dump_list_lock, flags); synchronize_rcu(); return err; @@ -2982,12 +3097,12 @@ /* initialize iterator with data about the stored records */ dumper->active = true; - raw_spin_lock_irqsave(&logbuf_lock, flags); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_lock_irqsave)(&logbuf_lock, flags); dumper->cur_seq = clear_seq; dumper->cur_idx = clear_idx; dumper->next_seq = log_next_seq; dumper->next_idx = log_next_idx; - raw_spin_unlock_irqrestore(&logbuf_lock, flags); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_unlock_irqrestore)(&logbuf_lock, flags); /* invoke dumper which will iterate over records */ dumper->dump(dumper, reason); @@ -3072,9 +3187,9 @@ unsigned long flags; bool ret; - raw_spin_lock_irqsave(&logbuf_lock, flags); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_lock_irqsave)(&logbuf_lock, flags); ret = kmsg_dump_get_line_nolock(dumper, syslog, line, size, len); - raw_spin_unlock_irqrestore(&logbuf_lock, flags); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_unlock_irqrestore)(&logbuf_lock, flags); return ret; } @@ -3113,7 +3228,7 @@ if (!dumper->active) goto out; - raw_spin_lock_irqsave(&logbuf_lock, flags); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_lock_irqsave)(&logbuf_lock, flags); if (dumper->cur_seq < log_first_seq) { /* messages are gone, move to first available one */ dumper->cur_seq = log_first_seq; @@ -3122,7 +3237,7 @@ /* last entry */ if (dumper->cur_seq >= dumper->next_seq) { - raw_spin_unlock_irqrestore(&logbuf_lock, flags); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_unlock_irqrestore)(&logbuf_lock, flags); goto out; } @@ -3164,7 +3279,7 @@ dumper->next_seq = next_seq; dumper->next_idx = next_idx; ret = true; - raw_spin_unlock_irqrestore(&logbuf_lock, flags); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_unlock_irqrestore)(&logbuf_lock, flags); out: if (len) *len = l; @@ -3202,9 +3317,9 @@ { unsigned long flags; - raw_spin_lock_irqsave(&logbuf_lock, flags); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_lock_irqsave)(&logbuf_lock, flags); kmsg_dump_rewind_nolock(dumper); - raw_spin_unlock_irqrestore(&logbuf_lock, flags); + _BUILD_AVM_CONTEXT_FUNC(raw_spin_unlock_irqrestore)(&logbuf_lock, flags); } EXPORT_SYMBOL_GPL(kmsg_dump_rewind);