Re: [PATCH v2] printk: Avoid softlockups in console_unlock()

Jan Kara
2013-02-06T18:52:24Z

[-- Attachment #1: Type: text/plain, Size: 979 bytes --]

On Wed 06-02-13 09:58:48, David Rientjes wrote:
> On Wed, 6 Feb 2013, Jan Kara wrote:
>
> > Yes, I noticed that thread just yesterday and also though that using
> > similar trick might be viable. I'll experiment if we could use the same
> > method for handling lockup problems I hit. Steven seems to have already
> > tweaked PRINTK_PENDING stuff to be usable more easily...
> >
>
> Are these new build failures in linux-next coming from this patch?
>
> kernel/printk.c: In function 'console_unlock':
> kernel/printk.c:2156:18: error: 'printk_work' undeclared (first use in this function)
> kernel/printk.c:2156:18: note: each undeclared identifier is reported only once for each function it appears in
> kernel/printk.c: At top level:
> kernel/printk.c:2167:13: warning: 'printk_worker' defined but not used [-Wunused-function]
Yes, I already sent a patch to fix these (attached if you need it).
Thanks for notice.

Honza
--
Jan Kara <jack@suse.cz>
SUSE Labs, CR

[-- Attachment #2: 0001-printk-Fixup-compilation-with-CONFIG_PRINTK.patch --]
[-- Type: text/x-patch, Size: 1112 bytes --]

>From 313ba66418472fa532faf8c61e8981bd7b29950e Mon Sep 17 00:00:00 2001
From: Jan Kara <jack@suse.cz>
Date: Wed, 6 Feb 2013 14:07:01 +0100
Subject: [PATCH] printk: Fixup compilation with !CONFIG_PRINTK

Signed-off-by: Jan Kara <jack@suse.cz>
---
kernel/printk.c | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/kernel/printk.c b/kernel/printk.c
index 80172f7..484fdb4 100644
--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -246,10 +246,6 @@ static enum log_flags console_prev;
static u64 clear_seq;
static u32 clear_idx;

-/* Worker to print accumulated data to console when there's too much of it */
-static void printk_worker(struct work_struct *work);
-static DECLARE_WORK(printk_work, printk_worker);
-
#define PREFIX_MAX 32
#define LOG_LINE_MAX 1024 - PREFIX_MAX

@@ -2154,6 +2150,10 @@ skip:
return retry;
}

+/* Worker to print accumulated data to console when there's too much of it */
+static void printk_worker(struct work_struct *work);
+static DECLARE_WORK(printk_work, printk_worker);
+
void console_unlock(void)
{
if (__console_unlock()) {
--
1.7.1