From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: [RFC 4/6] xen/console: Add support for early printk Date: Sun, 5 Jan 2014 21:26:29 +0000 Message-ID: <1388957191-10337-5-git-send-email-julien.grall@linaro.org> References: <1388957191-10337-1-git-send-email-julien.grall@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta4.messagelabs.com ([85.158.143.247]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1VzvDh-0000IM-TV for xen-devel@lists.xenproject.org; Sun, 05 Jan 2014 21:26:54 +0000 Received: by mail-lb0-f174.google.com with SMTP id y6so9317807lbh.19 for ; Sun, 05 Jan 2014 13:26:51 -0800 (PST) In-Reply-To: <1388957191-10337-1-git-send-email-julien.grall@linaro.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xenproject.org Cc: Keir Fraser , ian.campbell@citrix.com, stefano.stabellini@eu.citrix.com, Julien Grall , tim@xen.org, patches@linaro.org List-Id: xen-devel@lists.xenproject.org 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. Cc: Keir Fraser Signed-off-by: Julien Grall --- 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 #include #include /* for do_console_io */ +#ifdef CONFIG_EARLY_PRINTK +#include +#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) +{} +#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, ','); -- 1.8.3.1