* [GIT PULL] printk: fixes @ 2013-03-14 14:26 Frederic Weisbecker 2013-03-14 14:26 ` [PATCH 1/2] irq_work.h: fix warning when CONFIG_IRQ_WORK=n Frederic Weisbecker 2013-03-14 14:26 ` [PATCH 2/2] printk: Provide a wake_up_klogd() off-case Frederic Weisbecker 0 siblings, 2 replies; 8+ messages in thread From: Frederic Weisbecker @ 2013-03-14 14:26 UTC (permalink / raw) To: Ingo Molnar Cc: LKML, Frederic Weisbecker, James Hogan, Steven Rostedt, Peter Zijlstra, Andrew Morton, Thomas Gleixner, Paul Gortmaker Ingo, Please pull the following printk regression fixes from: git://git.kernel.org/pub/scm/linux/kernel/git/frederic/linux-dynticks.git printk/urgent HEAD: c45a372bdfc0115147afb7eea11313dc057c817e Thanks. --- Frederic Weisbecker (1): printk: Provide a wake_up_klogd() off-case James Hogan (1): irq_work.h: fix warning when CONFIG_IRQ_WORK=n include/linux/irq_work.h | 2 +- include/linux/kernel.h | 1 - include/linux/printk.h | 6 +++ kernel/printk.c | 80 ++++++++++++++++++++++----------------------- 4 files changed, 46 insertions(+), 43 deletions(-) -- 1.7.5.4 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/2] irq_work.h: fix warning when CONFIG_IRQ_WORK=n 2013-03-14 14:26 [GIT PULL] printk: fixes Frederic Weisbecker @ 2013-03-14 14:26 ` Frederic Weisbecker 2013-03-14 14:26 ` [PATCH 2/2] printk: Provide a wake_up_klogd() off-case Frederic Weisbecker 1 sibling, 0 replies; 8+ messages in thread From: Frederic Weisbecker @ 2013-03-14 14:26 UTC (permalink / raw) To: Ingo Molnar Cc: LKML, James Hogan, Frederic Weisbecker, Steven Rostedt, Peter Zijlstra, Thomas Gleixner, Andrew Morton, Paul Gortmaker From: James Hogan <james.hogan@imgtec.com> A randconfig caught repeated compiler warnings when CONFIG_IRQ_WORK=n due to the definition of a non-inline static function in <linux/irq_work.h>: include/linux/irq_work.h +40 : warning: 'irq_work_needs_cpu' defined but not used Make it inline to supress the warning. This is caused by the following commit: Commit 00b42959106a9ca1c2899e591ae4e9a83ad6af05 ("irq_work: Don't stop the tick with pending works") merged in v3.9-rc1. Signed-off-by: James Hogan <james.hogan@imgtec.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@kernel.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Paul Gortmaker <paul.gortmaker@windriver.com> Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> --- include/linux/irq_work.h | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/include/linux/irq_work.h b/include/linux/irq_work.h index f5dbce5..6601702 100644 --- a/include/linux/irq_work.h +++ b/include/linux/irq_work.h @@ -37,7 +37,7 @@ void irq_work_sync(struct irq_work *work); #ifdef CONFIG_IRQ_WORK bool irq_work_needs_cpu(void); #else -static bool irq_work_needs_cpu(void) { return false; } +static inline bool irq_work_needs_cpu(void) { return false; } #endif #endif /* _LINUX_IRQ_WORK_H */ -- 1.7.5.4 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/2] printk: Provide a wake_up_klogd() off-case 2013-03-14 14:26 [GIT PULL] printk: fixes Frederic Weisbecker 2013-03-14 14:26 ` [PATCH 1/2] irq_work.h: fix warning when CONFIG_IRQ_WORK=n Frederic Weisbecker @ 2013-03-14 14:26 ` Frederic Weisbecker 2013-03-14 20:39 ` Andrew Morton 1 sibling, 1 reply; 8+ messages in thread From: Frederic Weisbecker @ 2013-03-14 14:26 UTC (permalink / raw) To: Ingo Molnar Cc: LKML, Frederic Weisbecker, James Hogan, Steven Rostedt, Peter Zijlstra, Andrew Morton wake_up_klogd() is useless when CONFIG_PRINTK=n because neither printk() nor printk_sched() are in use and there are actually no waiter on log_wait waitqueue. It should be a stub in this case for users like bust_spinlocks(). Otherwise this results in this warning when CONFIG_PRINTK=n and CONFIG_IRQ_WORK=n: kernel/built-in.o In function `wake_up_klogd': (.text.wake_up_klogd+0xb4): undefined reference to `irq_work_queue' To fix this, provide an off-case for wake_up_klogd() when CONFIG_PRINTK=n. There is much more from console_unlock() and other console related code in printk.c that should be moved under CONFIG_PRINTK. But for now, focus on a minimal fix as we passed the merged window already. Reported-by: James Hogan <james.hogan@imgtec.com> Cc: James Hogan <james.hogan@imgtec.com> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Ingo Molnar <mingo@kernel.org> Cc: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> --- include/linux/kernel.h | 1 - include/linux/printk.h | 6 +++ kernel/printk.c | 80 +++++++++++++++++++++++------------------------ 3 files changed, 45 insertions(+), 42 deletions(-) diff --git a/include/linux/kernel.h b/include/linux/kernel.h index 80d3687..79fdd80 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h @@ -390,7 +390,6 @@ extern struct pid *session_of_pgrp(struct pid *pgrp); unsigned long int_sqrt(unsigned long); extern void bust_spinlocks(int yes); -extern void wake_up_klogd(void); extern int oops_in_progress; /* If set, an oops, panic(), BUG() or die() is in progress */ extern int panic_timeout; extern int panic_on_oops; diff --git a/include/linux/printk.h b/include/linux/printk.h index 1249a54..822171f 100644 --- a/include/linux/printk.h +++ b/include/linux/printk.h @@ -134,6 +134,8 @@ extern int printk_delay_msec; extern int dmesg_restrict; extern int kptr_restrict; +extern void wake_up_klogd(void); + void log_buf_kexec_setup(void); void __init setup_log_buf(int early); #else @@ -162,6 +164,10 @@ static inline bool printk_timed_ratelimit(unsigned long *caller_jiffies, return false; } +static inline void wake_up_klogd(void) +{ +} + static inline void log_buf_kexec_setup(void) { } diff --git a/kernel/printk.c b/kernel/printk.c index 0b31715..abbdd9e 100644 --- a/kernel/printk.c +++ b/kernel/printk.c @@ -63,8 +63,6 @@ void asmlinkage __attribute__((weak)) early_printk(const char *fmt, ...) #define MINIMUM_CONSOLE_LOGLEVEL 1 /* Minimum loglevel we let people use */ #define DEFAULT_CONSOLE_LOGLEVEL 7 /* anything MORE serious than KERN_DEBUG */ -DECLARE_WAIT_QUEUE_HEAD(log_wait); - int console_printk[4] = { DEFAULT_CONSOLE_LOGLEVEL, /* console_loglevel */ DEFAULT_MESSAGE_LOGLEVEL, /* default_message_loglevel */ @@ -224,6 +222,7 @@ struct log { static DEFINE_RAW_SPINLOCK(logbuf_lock); #ifdef CONFIG_PRINTK +DECLARE_WAIT_QUEUE_HEAD(log_wait); /* the next printk record to read by syslog(READ) or /proc/kmsg */ static u64 syslog_seq; static u32 syslog_idx; @@ -1957,45 +1956,6 @@ int is_console_locked(void) return console_locked; } -/* - * Delayed printk version, for scheduler-internal messages: - */ -#define PRINTK_BUF_SIZE 512 - -#define PRINTK_PENDING_WAKEUP 0x01 -#define PRINTK_PENDING_SCHED 0x02 - -static DEFINE_PER_CPU(int, printk_pending); -static DEFINE_PER_CPU(char [PRINTK_BUF_SIZE], printk_sched_buf); - -static void wake_up_klogd_work_func(struct irq_work *irq_work) -{ - int pending = __this_cpu_xchg(printk_pending, 0); - - if (pending & PRINTK_PENDING_SCHED) { - char *buf = __get_cpu_var(printk_sched_buf); - printk(KERN_WARNING "[sched_delayed] %s", buf); - } - - if (pending & PRINTK_PENDING_WAKEUP) - wake_up_interruptible(&log_wait); -} - -static DEFINE_PER_CPU(struct irq_work, wake_up_klogd_work) = { - .func = wake_up_klogd_work_func, - .flags = IRQ_WORK_LAZY, -}; - -void wake_up_klogd(void) -{ - preempt_disable(); - if (waitqueue_active(&log_wait)) { - this_cpu_or(printk_pending, PRINTK_PENDING_WAKEUP); - irq_work_queue(&__get_cpu_var(wake_up_klogd_work)); - } - preempt_enable(); -} - static void console_cont_flush(char *text, size_t size) { unsigned long flags; @@ -2458,6 +2418,44 @@ static int __init printk_late_init(void) late_initcall(printk_late_init); #if defined CONFIG_PRINTK +/* + * Delayed printk version, for scheduler-internal messages: + */ +#define PRINTK_BUF_SIZE 512 + +#define PRINTK_PENDING_WAKEUP 0x01 +#define PRINTK_PENDING_SCHED 0x02 + +static DEFINE_PER_CPU(int, printk_pending); +static DEFINE_PER_CPU(char [PRINTK_BUF_SIZE], printk_sched_buf); + +static void wake_up_klogd_work_func(struct irq_work *irq_work) +{ + int pending = __this_cpu_xchg(printk_pending, 0); + + if (pending & PRINTK_PENDING_SCHED) { + char *buf = __get_cpu_var(printk_sched_buf); + printk(KERN_WARNING "[sched_delayed] %s", buf); + } + + if (pending & PRINTK_PENDING_WAKEUP) + wake_up_interruptible(&log_wait); +} + +static DEFINE_PER_CPU(struct irq_work, wake_up_klogd_work) = { + .func = wake_up_klogd_work_func, + .flags = IRQ_WORK_LAZY, +}; + +void wake_up_klogd(void) +{ + preempt_disable(); + if (waitqueue_active(&log_wait)) { + this_cpu_or(printk_pending, PRINTK_PENDING_WAKEUP); + irq_work_queue(&__get_cpu_var(wake_up_klogd_work)); + } + preempt_enable(); +} int printk_sched(const char *fmt, ...) { -- 1.7.5.4 ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] printk: Provide a wake_up_klogd() off-case 2013-03-14 14:26 ` [PATCH 2/2] printk: Provide a wake_up_klogd() off-case Frederic Weisbecker @ 2013-03-14 20:39 ` Andrew Morton 2013-03-14 22:21 ` Frederic Weisbecker 2013-03-14 22:24 ` Paul Gortmaker 0 siblings, 2 replies; 8+ messages in thread From: Andrew Morton @ 2013-03-14 20:39 UTC (permalink / raw) To: Frederic Weisbecker Cc: Ingo Molnar, LKML, James Hogan, Steven Rostedt, Peter Zijlstra On Thu, 14 Mar 2013 15:26:29 +0100 Frederic Weisbecker <fweisbec@gmail.com> wrote: > wake_up_klogd() is useless when CONFIG_PRINTK=n because > neither printk() nor printk_sched() are in use and there > are actually no waiter on log_wait waitqueue. It should > be a stub in this case for users like bust_spinlocks(). > > Otherwise this results in this warning when CONFIG_PRINTK=n > and CONFIG_IRQ_WORK=n: > > kernel/built-in.o In function `wake_up_klogd': > (.text.wake_up_klogd+0xb4): undefined reference to `irq_work_queue' > > To fix this, provide an off-case for wake_up_klogd() when > CONFIG_PRINTK=n. > > There is much more from console_unlock() and other console > related code in printk.c that should be moved under > CONFIG_PRINTK. But for now, focus on a minimal fix as we passed > the merged window already. > > --- a/include/linux/kernel.h > +++ b/include/linux/kernel.h > @@ -390,7 +390,6 @@ extern struct pid *session_of_pgrp(struct pid *pgrp); > unsigned long int_sqrt(unsigned long); > > extern void bust_spinlocks(int yes); > -extern void wake_up_klogd(void); > extern int oops_in_progress; /* If set, an oops, panic(), BUG() or die() is in progress */ > extern int panic_timeout; > extern int panic_on_oops; > diff --git a/include/linux/printk.h b/include/linux/printk.h > index 1249a54..822171f 100644 > --- a/include/linux/printk.h > +++ b/include/linux/printk.h > @@ -134,6 +134,8 @@ extern int printk_delay_msec; > extern int dmesg_restrict; > extern int kptr_restrict; > > +extern void wake_up_klogd(void); > + Given this, it would be prudent to include printk.h in bust_spinlocks.c. printk.h currently gets included by kernel.h, but that doesn't actually seem necessary - nothing in kernel.h calls printk(). (I pity anyone who tries to remove that include from kernel.h ;)) --- a/lib/bust_spinlocks.c~printk-provide-a-wake_up_klogd-off-case-fix +++ a/lib/bust_spinlocks.c @@ -8,6 +8,7 @@ */ #include <linux/kernel.h> +#include <linux/printk.h> #include <linux/spinlock.h> #include <linux/tty.h> #include <linux/wait.h> @@ -28,5 +29,3 @@ void __attribute__((weak)) bust_spinlock wake_up_klogd(); } } - - _ ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] printk: Provide a wake_up_klogd() off-case 2013-03-14 20:39 ` Andrew Morton @ 2013-03-14 22:21 ` Frederic Weisbecker 2013-03-14 22:24 ` Paul Gortmaker 1 sibling, 0 replies; 8+ messages in thread From: Frederic Weisbecker @ 2013-03-14 22:21 UTC (permalink / raw) To: Andrew Morton Cc: Ingo Molnar, LKML, James Hogan, Steven Rostedt, Peter Zijlstra 2013/3/14 Andrew Morton <akpm@linux-foundation.org>: > On Thu, 14 Mar 2013 15:26:29 +0100 Frederic Weisbecker <fweisbec@gmail.com> wrote: > >> wake_up_klogd() is useless when CONFIG_PRINTK=n because >> neither printk() nor printk_sched() are in use and there >> are actually no waiter on log_wait waitqueue. It should >> be a stub in this case for users like bust_spinlocks(). >> >> Otherwise this results in this warning when CONFIG_PRINTK=n >> and CONFIG_IRQ_WORK=n: >> >> kernel/built-in.o In function `wake_up_klogd': >> (.text.wake_up_klogd+0xb4): undefined reference to `irq_work_queue' >> >> To fix this, provide an off-case for wake_up_klogd() when >> CONFIG_PRINTK=n. >> >> There is much more from console_unlock() and other console >> related code in printk.c that should be moved under >> CONFIG_PRINTK. But for now, focus on a minimal fix as we passed >> the merged window already. >> >> --- a/include/linux/kernel.h >> +++ b/include/linux/kernel.h >> @@ -390,7 +390,6 @@ extern struct pid *session_of_pgrp(struct pid *pgrp); >> unsigned long int_sqrt(unsigned long); >> >> extern void bust_spinlocks(int yes); >> -extern void wake_up_klogd(void); >> extern int oops_in_progress; /* If set, an oops, panic(), BUG() or die() is in progress */ >> extern int panic_timeout; >> extern int panic_on_oops; >> diff --git a/include/linux/printk.h b/include/linux/printk.h >> index 1249a54..822171f 100644 >> --- a/include/linux/printk.h >> +++ b/include/linux/printk.h >> @@ -134,6 +134,8 @@ extern int printk_delay_msec; >> extern int dmesg_restrict; >> extern int kptr_restrict; >> >> +extern void wake_up_klogd(void); >> + > > Given this, it would be prudent to include printk.h in > bust_spinlocks.c. printk.h currently gets included by kernel.h, but > that doesn't actually seem necessary - nothing in kernel.h calls > printk(). > > (I pity anyone who tries to remove that include from kernel.h ;)) Right, I doubt this will ever happen ;-) Still, thanks for the fix! ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] printk: Provide a wake_up_klogd() off-case 2013-03-14 20:39 ` Andrew Morton 2013-03-14 22:21 ` Frederic Weisbecker @ 2013-03-14 22:24 ` Paul Gortmaker 2013-03-14 22:34 ` Frederic Weisbecker 1 sibling, 1 reply; 8+ messages in thread From: Paul Gortmaker @ 2013-03-14 22:24 UTC (permalink / raw) To: Andrew Morton Cc: Frederic Weisbecker, Ingo Molnar, LKML, James Hogan, Steven Rostedt, Peter Zijlstra On Thu, Mar 14, 2013 at 4:39 PM, Andrew Morton <akpm@linux-foundation.org> wrote: > On Thu, 14 Mar 2013 15:26:29 +0100 Frederic Weisbecker <fweisbec@gmail.com> wrote: > >> wake_up_klogd() is useless when CONFIG_PRINTK=n because >> neither printk() nor printk_sched() are in use and there >> are actually no waiter on log_wait waitqueue. It should >> be a stub in this case for users like bust_spinlocks(). >> >> Otherwise this results in this warning when CONFIG_PRINTK=n >> and CONFIG_IRQ_WORK=n: >> >> kernel/built-in.o In function `wake_up_klogd': >> (.text.wake_up_klogd+0xb4): undefined reference to `irq_work_queue' >> >> To fix this, provide an off-case for wake_up_klogd() when >> CONFIG_PRINTK=n. >> >> There is much more from console_unlock() and other console >> related code in printk.c that should be moved under >> CONFIG_PRINTK. But for now, focus on a minimal fix as we passed >> the merged window already. >> >> --- a/include/linux/kernel.h >> +++ b/include/linux/kernel.h >> @@ -390,7 +390,6 @@ extern struct pid *session_of_pgrp(struct pid *pgrp); >> unsigned long int_sqrt(unsigned long); >> >> extern void bust_spinlocks(int yes); >> -extern void wake_up_klogd(void); >> extern int oops_in_progress; /* If set, an oops, panic(), BUG() or die() is in progress */ >> extern int panic_timeout; >> extern int panic_on_oops; >> diff --git a/include/linux/printk.h b/include/linux/printk.h >> index 1249a54..822171f 100644 >> --- a/include/linux/printk.h >> +++ b/include/linux/printk.h >> @@ -134,6 +134,8 @@ extern int printk_delay_msec; >> extern int dmesg_restrict; >> extern int kptr_restrict; >> >> +extern void wake_up_klogd(void); >> + > > Given this, it would be prudent to include printk.h in > bust_spinlocks.c. printk.h currently gets included by kernel.h, but > that doesn't actually seem necessary - nothing in kernel.h calls > printk(). > > (I pity anyone who tries to remove that include from kernel.h ;)) Why did you have to say that? Now I'm inclined to poke at it and just see how bad it really is when I pull on that loose thread... P. -- > > --- a/lib/bust_spinlocks.c~printk-provide-a-wake_up_klogd-off-case-fix > +++ a/lib/bust_spinlocks.c > @@ -8,6 +8,7 @@ > */ > > #include <linux/kernel.h> > +#include <linux/printk.h> > #include <linux/spinlock.h> > #include <linux/tty.h> > #include <linux/wait.h> > @@ -28,5 +29,3 @@ void __attribute__((weak)) bust_spinlock > wake_up_klogd(); > } > } > - > - > _ > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] printk: Provide a wake_up_klogd() off-case 2013-03-14 22:24 ` Paul Gortmaker @ 2013-03-14 22:34 ` Frederic Weisbecker 2013-03-14 22:45 ` Paul Gortmaker 0 siblings, 1 reply; 8+ messages in thread From: Frederic Weisbecker @ 2013-03-14 22:34 UTC (permalink / raw) To: Paul Gortmaker Cc: Andrew Morton, Ingo Molnar, LKML, James Hogan, Steven Rostedt, Peter Zijlstra 2013/3/14 Paul Gortmaker <paul.gortmaker@windriver.com>: > On Thu, Mar 14, 2013 at 4:39 PM, Andrew Morton > <akpm@linux-foundation.org> wrote: >> On Thu, 14 Mar 2013 15:26:29 +0100 Frederic Weisbecker <fweisbec@gmail.com> wrote: >> >>> wake_up_klogd() is useless when CONFIG_PRINTK=n because >>> neither printk() nor printk_sched() are in use and there >>> are actually no waiter on log_wait waitqueue. It should >>> be a stub in this case for users like bust_spinlocks(). >>> >>> Otherwise this results in this warning when CONFIG_PRINTK=n >>> and CONFIG_IRQ_WORK=n: >>> >>> kernel/built-in.o In function `wake_up_klogd': >>> (.text.wake_up_klogd+0xb4): undefined reference to `irq_work_queue' >>> >>> To fix this, provide an off-case for wake_up_klogd() when >>> CONFIG_PRINTK=n. >>> >>> There is much more from console_unlock() and other console >>> related code in printk.c that should be moved under >>> CONFIG_PRINTK. But for now, focus on a minimal fix as we passed >>> the merged window already. >>> >>> --- a/include/linux/kernel.h >>> +++ b/include/linux/kernel.h >>> @@ -390,7 +390,6 @@ extern struct pid *session_of_pgrp(struct pid *pgrp); >>> unsigned long int_sqrt(unsigned long); >>> >>> extern void bust_spinlocks(int yes); >>> -extern void wake_up_klogd(void); >>> extern int oops_in_progress; /* If set, an oops, panic(), BUG() or die() is in progress */ >>> extern int panic_timeout; >>> extern int panic_on_oops; >>> diff --git a/include/linux/printk.h b/include/linux/printk.h >>> index 1249a54..822171f 100644 >>> --- a/include/linux/printk.h >>> +++ b/include/linux/printk.h >>> @@ -134,6 +134,8 @@ extern int printk_delay_msec; >>> extern int dmesg_restrict; >>> extern int kptr_restrict; >>> >>> +extern void wake_up_klogd(void); >>> + >> >> Given this, it would be prudent to include printk.h in >> bust_spinlocks.c. printk.h currently gets included by kernel.h, but >> that doesn't actually seem necessary - nothing in kernel.h calls >> printk(). >> >> (I pity anyone who tries to remove that include from kernel.h ;)) > > Why did you have to say that? Now I'm inclined to poke at it and > just see how bad it really is when I pull on that loose thread... $ git grep "#include <linux/printk.h>" | cut -d: -f1 | uniq | wc -l 29 $ git grep printk | cut -d: -f1 | uniq | wc -l 6689 There is roughly 6689 - 29 = 6660 files to modify :) ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] printk: Provide a wake_up_klogd() off-case 2013-03-14 22:34 ` Frederic Weisbecker @ 2013-03-14 22:45 ` Paul Gortmaker 0 siblings, 0 replies; 8+ messages in thread From: Paul Gortmaker @ 2013-03-14 22:45 UTC (permalink / raw) To: Frederic Weisbecker Cc: Andrew Morton, Ingo Molnar, LKML, James Hogan, Steven Rostedt, Peter Zijlstra On Thu, Mar 14, 2013 at 6:34 PM, Frederic Weisbecker <fweisbec@gmail.com> wrote: > 2013/3/14 Paul Gortmaker <paul.gortmaker@windriver.com>: >> On Thu, Mar 14, 2013 at 4:39 PM, Andrew Morton >> <akpm@linux-foundation.org> wrote: >>> On Thu, 14 Mar 2013 15:26:29 +0100 Frederic Weisbecker <fweisbec@gmail.com> wrote: >>> >>>> wake_up_klogd() is useless when CONFIG_PRINTK=n because >>>> neither printk() nor printk_sched() are in use and there >>>> are actually no waiter on log_wait waitqueue. It should >>>> be a stub in this case for users like bust_spinlocks(). >>>> >>>> Otherwise this results in this warning when CONFIG_PRINTK=n >>>> and CONFIG_IRQ_WORK=n: >>>> >>>> kernel/built-in.o In function `wake_up_klogd': >>>> (.text.wake_up_klogd+0xb4): undefined reference to `irq_work_queue' >>>> >>>> To fix this, provide an off-case for wake_up_klogd() when >>>> CONFIG_PRINTK=n. >>>> >>>> There is much more from console_unlock() and other console >>>> related code in printk.c that should be moved under >>>> CONFIG_PRINTK. But for now, focus on a minimal fix as we passed >>>> the merged window already. >>>> >>>> --- a/include/linux/kernel.h >>>> +++ b/include/linux/kernel.h >>>> @@ -390,7 +390,6 @@ extern struct pid *session_of_pgrp(struct pid *pgrp); >>>> unsigned long int_sqrt(unsigned long); >>>> >>>> extern void bust_spinlocks(int yes); >>>> -extern void wake_up_klogd(void); >>>> extern int oops_in_progress; /* If set, an oops, panic(), BUG() or die() is in progress */ >>>> extern int panic_timeout; >>>> extern int panic_on_oops; >>>> diff --git a/include/linux/printk.h b/include/linux/printk.h >>>> index 1249a54..822171f 100644 >>>> --- a/include/linux/printk.h >>>> +++ b/include/linux/printk.h >>>> @@ -134,6 +134,8 @@ extern int printk_delay_msec; >>>> extern int dmesg_restrict; >>>> extern int kptr_restrict; >>>> >>>> +extern void wake_up_klogd(void); >>>> + >>> >>> Given this, it would be prudent to include printk.h in >>> bust_spinlocks.c. printk.h currently gets included by kernel.h, but >>> that doesn't actually seem necessary - nothing in kernel.h calls >>> printk(). >>> >>> (I pity anyone who tries to remove that include from kernel.h ;)) >> >> Why did you have to say that? Now I'm inclined to poke at it and >> just see how bad it really is when I pull on that loose thread... > > $ git grep "#include <linux/printk.h>" | cut -d: -f1 | uniq | wc -l > 29 > > $ git grep printk | cut -d: -f1 | uniq | wc -l > 6689 > > There is roughly 6689 - 29 = 6660 files to modify :) That is the worst case scenario. If we start by fixing existing headers that actually reference printk (like linux/fs.h) first, then we shouldn't have to mine down into all those stand-alone C files. At least I think that may possibly be the case.... ;) Remains to be seen at this point. Paul. -- > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2013-03-14 22:46 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2013-03-14 14:26 [GIT PULL] printk: fixes Frederic Weisbecker 2013-03-14 14:26 ` [PATCH 1/2] irq_work.h: fix warning when CONFIG_IRQ_WORK=n Frederic Weisbecker 2013-03-14 14:26 ` [PATCH 2/2] printk: Provide a wake_up_klogd() off-case Frederic Weisbecker 2013-03-14 20:39 ` Andrew Morton 2013-03-14 22:21 ` Frederic Weisbecker 2013-03-14 22:24 ` Paul Gortmaker 2013-03-14 22:34 ` Frederic Weisbecker 2013-03-14 22:45 ` Paul Gortmaker
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®