2005-09-07 09:52:47

by Stephen Rothwell

[permalink] [raw]
Subject: [PATCH] ppc64: iSeries early printk breakage

The earlier commit 8d9273918635f0301368c01b56c03a6f339e8d51
(Consolidate early console and PPCDBG code) broke iSeries because
it caused unregister_console(&udbg_console) to be called
unconditionally. iSeries never registers the udbg_console.

This just reverts part of the change.

Signed-off-by: Stephen Rothwell <[email protected]>
---

arch/ppc64/kernel/udbg.c | 6 ++++++
1 files changed, 6 insertions(+), 0 deletions(-)

--
Cheers,
Stephen Rothwell [email protected]
http://www.canb.auug.org.au/~sfr/

234f5032f6ccb4d72e4b74d33af55716b67d8a27
diff --git a/arch/ppc64/kernel/udbg.c b/arch/ppc64/kernel/udbg.c
--- a/arch/ppc64/kernel/udbg.c
+++ b/arch/ppc64/kernel/udbg.c
@@ -158,14 +158,20 @@ static struct console udbg_console = {
.index = -1,
};

+static int early_console_initialized;
+
void __init disable_early_printk(void)
{
+ if (!early_console_initialized)
+ return;
unregister_console(&udbg_console);
+ early_console_initialized = 0;
}

/* called by setup_system */
void register_early_udbg_console(void)
{
+ early_console_initialized = 1;
register_console(&udbg_console);
}


Attachments:
(No filename) (1.11 kB)
(No filename) (189.00 B)
Download all attachments

2005-09-07 11:04:01

by Milton Miller

[permalink] [raw]
Subject: Re: [PATCH] ppc64: iSeries early printk breakage

Does anything actually break without this patch?

My reading of unregister_console says we will acquire
the console semaphore, walk the list, fail to find the
console, relase the semaphore, and return.


Hmm... unless there is a problem with the console preference
code? I don't see anything that should deref a bad pointer,
maybe it breaks the preference?

From get web:

if (console_drivers == NULL)
preferred_console = selected_console;
else if (console->flags & CON_CONSDEV)
console_drivers->flags |= CON_CONSDEV;

On Sep 7, 2005, at 4:52 AM, Stephen Rothwell wrote:

> The earlier commit 8d9273918635f0301368c01b56c03a6f339e8d51
> (Consolidate early console and PPCDBG code) broke iSeries because
> it caused unregister_console(&udbg_console) to be called
> unconditionally. iSeries never registers the udbg_console.
>
> This just reverts part of the change.
>
> Signed-off-by: Stephen Rothwell <[email protected]>
> ---
>
> arch/ppc64/kernel/udbg.c | 6 ++++++
> 1 files changed, 6 insertions(+), 0 deletions(-)
>
> --
> Cheers,
> Stephen Rothwell [email protected]
> http://www.canb.auug.org.au/~sfr/
>
> 234f5032f6ccb4d72e4b74d33af55716b67d8a27
> diff --git a/arch/ppc64/kernel/udbg.c b/arch/ppc64/kernel/udbg.c
> --- a/arch/ppc64/kernel/udbg.c
> +++ b/arch/ppc64/kernel/udbg.c
> @@ -158,14 +158,20 @@ static struct console udbg_console = {
> .index = -1,
> };
>
> +static int early_console_initialized;
> +
> void __init disable_early_printk(void)
> {
> + if (!early_console_initialized)
> + return;
> unregister_console(&udbg_console);
> + early_console_initialized = 0;
> }
>
> /* called by setup_system */
> void register_early_udbg_console(void)
> {
> + early_console_initialized = 1;
> register_console(&udbg_console);
> }
>

2005-09-08 01:01:23

by Stephen Rothwell

[permalink] [raw]
Subject: Re: [PATCH] ppc64: iSeries early printk breakage

On Wed, 7 Sep 2005 06:04:36 -0500 Milton Miller <[email protected]> wrote:
>
> Does anything actually break without this patch?

Yes, an iSeries box will not boot.

> My reading of unregister_console says we will acquire
> the console semaphore, walk the list, fail to find the
> console, relase the semaphore, and return.

Consider the case that console_drivers == NULL (because we have never called register_console).
unregister_console dereferences console_drivers ...

--
Cheers,
Stephen Rothwell [email protected]
http://www.canb.auug.org.au/~sfr/


Attachments:
(No filename) (574.00 B)
(No filename) (189.00 B)
Download all attachments