Re: [PATCH RESEND 3/4] m68k/mvme16x: adopt common boot console

Finn Thain
2014-04-12T01:40:49Z

On Fri, 11 Apr 2014, Geert Uytterhoeven wrote:

>
> > +#ifdef CONFIG_MVME16X
> > +static struct console early_console_instance = {
> > +#else
> > static struct console early_console_instance __initdata = {
> > +#endif
>
> > + if (MACH_IS_MVME16x)
> > + early_console_instance.write = mvme16x_cons_write;
> > + else
> > + early_console_instance.write = debug_cons_write;
>
> > + if (!early_console || MACH_IS_MVME16x)
> > return 0;
>
> I don't like these tests for MVME16X in (presumably) generic code.
> Is there a way we can avoid this?
>

Some alternative approaches:

1) Somehow make the tests more precise: "are we running on MVME?"
becomes "is the console output code not in .init.text?"
I don't know that this is feasible.

2) Mark the MVME console output routine __init (making it less useful).
If we make all users of earlyprintk lose the boot console at
__late_initcall() time, then we can call mvme16x_cons_write() from
debug_cons_write().

3) Move all of the head.S console code and data out of .init sections, for
all platforms. Not practical I think.

4) If the bloat is acceptable, maybe we could scrap the __init attributes
for early_console_instance and debug_cons_write(). And call
mvme16x_cons_write() from debug_cons_write(). Then hide all these
routines and the __late_initcall within
#if defined(CONFIG_AMIGA) || defined(CONFIG_ATARI) || ...
#endif

Thoughts?

--