[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC 4/6] xen/console: Add support for early printk
On Sun, 2014-01-05 at 21:26 +0000, Julien Grall wrote: > On ARM, a function (early_printk) was introduced to output message when the > serial port is not initialized. > > This solution is fragile because the developper needs to know when the serial > port is initialized, to use either early_printk or printk. Moreover some > functions (mainly in common code), only use printk. This will result to a loss > of message sometimes. > > Directly call early_printk in console code when the serial port is not yet > initialized. For this purpose use serial_steal_fn. This relies on nothing stealing the console over the period where the console is initialised. Perhaps that is already not advisable/possible? > > Cc: Keir Fraser <keir@xxxxxxx> > Signed-off-by: Julien Grall <julien.grall@xxxxxxxxxx> > --- > xen/drivers/char/console.c | 13 ++++++++++++- > 1 file changed, 12 insertions(+), 1 deletion(-) > > diff --git a/xen/drivers/char/console.c b/xen/drivers/char/console.c > index 532c426..f83c92e 100644 > --- a/xen/drivers/char/console.c > +++ b/xen/drivers/char/console.c > @@ -28,6 +28,9 @@ > #include <asm/debugger.h> > #include <asm/div64.h> > #include <xen/hypercall.h> /* for do_console_io */ > +#ifdef CONFIG_EARLY_PRINTK > +#include <asm/early_printk.h> > +#endif > > /* console: comma-separated list of console outputs. */ > static char __initdata opt_console[30] = OPT_CONSOLE_STR; > @@ -245,7 +248,12 @@ long read_console_ring(struct xen_sysctl_readconsole *op) > static char serial_rx_ring[SERIAL_RX_SIZE]; > static unsigned int serial_rx_cons, serial_rx_prod; > > -static void (*serial_steal_fn)(const char *); > +#ifndef CONFIG_EARLY_PRINTK > +static inline void early_puts(const char *str) > +{} This duplicates bits of asm-arm/early_printk.h. I think if the feature is going to be used from common code then the common bits of the asm header should be moved to xen/early_printk.h. If any per-arch stuff remains then xen/e_p.h can include asm/e_p.h. > +#endif > + > +static void (*serial_steal_fn)(const char *) = early_puts; > > int console_steal(int handle, void (*fn)(const char *)) > { > @@ -652,7 +660,10 @@ void __init console_init_preirq(void) > else if ( !strncmp(p, "none", 4) ) > continue; > else if ( (sh = serial_parse_handle(p)) >= 0 ) > + { > sercon_handle = sh; > + serial_steal_fn = NULL; > + } > else > { > char *q = strchr(p, ','); _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |