From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1760742AbcBYPE6 (ORCPT ); Thu, 25 Feb 2016 10:04:58 -0500 Received: from userp1040.oracle.com ([156.151.31.81]:43352 "EHLO userp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1760148AbcBYPE5 (ORCPT ); Thu, 25 Feb 2016 10:04:57 -0500 Subject: Re: [PATCH v2 2/3] hvc_xen: fix xenboot for DomUs To: Stefano Stabellini , xen-devel@lists.xensource.com References: <1456402239-4179-2-git-send-email-stefano.stabellini@eu.citrix.com> Cc: linux-kernel@vger.kernel.org, david.vrabel@citrix.com, konrad.wilk@oracle.com From: Boris Ostrovsky Message-ID: <56CF1814.5040807@oracle.com> Date: Thu, 25 Feb 2016 10:04:52 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.1.0 MIME-Version: 1.0 In-Reply-To: <1456402239-4179-2-git-send-email-stefano.stabellini@eu.citrix.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Source-IP: aserv0021.oracle.com [141.146.126.233] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 02/25/2016 07:10 AM, Stefano Stabellini wrote: > The xenboot early console has been partially broken for DomU for a long > time: the output would only go to the hypervisor via hypercall > (HYPERVISOR_console_io), while it wouldn't actually go to the DomU > console. The reason is that domU_write_console would return early as no > xencons structs are configured for it. > > Add an appropriate xencons struct for xenboot from the xenboot setup > callback. > > Signed-off-by: Stefano Stabellini > > --- > Changes in v2: > - add return to xenboot_setup_console > --- > drivers/tty/hvc/hvc_xen.c | 32 ++++++++++++++++++++++++++------ > 1 file changed, 26 insertions(+), 6 deletions(-) > > diff --git a/drivers/tty/hvc/hvc_xen.c b/drivers/tty/hvc/hvc_xen.c > index 68b8ec8..bf787aa 100644 > --- a/drivers/tty/hvc/hvc_xen.c > +++ b/drivers/tty/hvc/hvc_xen.c > @@ -246,6 +246,18 @@ err: > return -ENODEV; > } > > +static int xen_early_pv_console_init(struct xencons_info *info, int vtermno) Nit: not sure whether "early" is the right word to use here: when called from xen_pv_console_init() it's not really on the early path. Other than that: Reviewed-by: Boris Ostrovsky > +{ > + info->evtchn = xen_start_info->console.domU.evtchn; > + /* GFN == MFN for PV guest */ > + info->intf = gfn_to_virt(xen_start_info->console.domU.mfn); > + info->vtermno = vtermno; > + > + list_add_tail(&info->list, &xenconsoles); > + > + return 0; > +} > + > static int xen_pv_console_init(void) > { > struct xencons_info *info; > @@ -265,13 +277,8 @@ static int xen_pv_console_init(void) > /* already configured */ > return 0; > } > - info->evtchn = xen_start_info->console.domU.evtchn; > - /* GFN == MFN for PV guest */ > - info->intf = gfn_to_virt(xen_start_info->console.domU.mfn); > - info->vtermno = HVC_COOKIE; > - > spin_lock(&xencons_lock); > - list_add_tail(&info->list, &xenconsoles); > + xen_early_pv_console_init(info, HVC_COOKIE); > spin_unlock(&xencons_lock); > > return 0; > @@ -599,6 +606,18 @@ static int xen_cons_init(void) > console_initcall(xen_cons_init); > > #ifdef CONFIG_EARLY_PRINTK > +static int __init xenboot_setup_console(struct console *console, char *string) > +{ > + static struct xencons_info xenboot; > + > + if (xen_initial_domain()) > + return 0; > + if (!xen_pv_domain()) > + return -ENODEV; > + > + return xen_early_pv_console_init(&xenboot, 0); > +} > + > static void xenboot_write_console(struct console *console, const char *string, > unsigned len) > { > @@ -629,6 +648,7 @@ static void xenboot_write_console(struct console *console, const char *string, > struct console xenboot_console = { > .name = "xenboot", > .write = xenboot_write_console, > + .setup = xenboot_setup_console, > .flags = CON_PRINTBUFFER | CON_BOOT | CON_ANYTIME, > .index = -1, > };