Skip to content

Commit

Permalink
m68k/amiga,atari: Fix specifying multiple debug= parameters
Browse files Browse the repository at this point in the history
Since commit d6713b4 ("m68k: early
parameter support"), the user can specify multiple debug consoles using the
"debug=" kernel command line parameter.
However, as there's only a single struct console object, which is reused,
it would actually register the same console object multiple times, causing
the following warning:

WARNING: CPU: 0 PID: 0 at kernel/printk/printk.c:2233 register_console+0x36/
console 'debug0' already registered

Make sure to register the console object only once, to avoid the warning.

Note that still only one console (the one corresponding to the last
"debug=" parameter) will be active at the same time, as the .write() method
of the already registered console object is overwritten by a subsequent
"debug=" parameter.

Signed-off-by: Geert Uytterhoeven <[email protected]>
  • Loading branch information
geertu committed Dec 8, 2013
1 parent c6188d0 commit 8a09cec
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 6 deletions.
19 changes: 14 additions & 5 deletions arch/m68k/amiga/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -620,6 +620,8 @@ static void amiga_mem_console_write(struct console *co, const char *s,

static int __init amiga_savekmsg_setup(char *arg)
{
bool registered;

if (!MACH_IS_AMIGA || strcmp(arg, "mem"))
return 0;

Expand All @@ -636,8 +638,10 @@ static int __init amiga_savekmsg_setup(char *arg)
savekmsg->magicptr = ZTWO_PADDR(savekmsg);
savekmsg->size = 0;

registered = !!amiga_console_driver.write;
amiga_console_driver.write = amiga_mem_console_write;
register_console(&amiga_console_driver);
if (!registered)
register_console(&amiga_console_driver);
return 0;
}

Expand Down Expand Up @@ -719,11 +723,16 @@ void amiga_serial_gets(struct console *co, char *s, int len)

static int __init amiga_debug_setup(char *arg)
{
if (MACH_IS_AMIGA && !strcmp(arg, "ser")) {
/* no initialization required (?) */
amiga_console_driver.write = amiga_serial_console_write;
bool registered;

if (!MACH_IS_AMIGA || strcmp(arg, "ser"))
return 0;

/* no initialization required (?) */
registered = !!amiga_console_driver.write;
amiga_console_driver.write = amiga_serial_console_write;
if (!registered)
register_console(&amiga_console_driver);
}
return 0;
}

Expand Down
5 changes: 4 additions & 1 deletion arch/m68k/atari/debug.c
Original file line number Diff line number Diff line change
Expand Up @@ -287,13 +287,16 @@ static void __init atari_init_midi_port(int cflag)

static int __init atari_debug_setup(char *arg)
{
bool registered;

if (!MACH_IS_ATARI)
return 0;

if (!strcmp(arg, "ser"))
/* defaults to ser2 for a Falcon and ser1 otherwise */
arg = MACH_IS_FALCON ? "ser2" : "ser1";

registered = !!atari_console_driver.write;
if (!strcmp(arg, "ser1")) {
/* ST-MFP Modem1 serial port */
atari_init_mfp_port(B9600|CS8);
Expand All @@ -317,7 +320,7 @@ static int __init atari_debug_setup(char *arg)
sound_ym.wd_data = sound_ym.rd_data_reg_sel | 0x20; /* strobe H */
atari_console_driver.write = atari_par_console_write;
}
if (atari_console_driver.write)
if (atari_console_driver.write && !registered)
register_console(&atari_console_driver);

return 0;
Expand Down

0 comments on commit 8a09cec

Please sign in to comment.