From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dmitry Torokhov Subject: Re: [PATCH] xen/pvhvm: If xen_platform_pci=0 is set don't blow up. Date: Wed, 4 Dec 2013 08:42:18 -0800 Message-ID: <20131204164218.GA8838@core.coreip.homeip.net> References: <1386105246-14337-1-git-send-email-konrad.wilk@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from mail-pb0-f44.google.com ([209.85.160.44]:43056 "EHLO mail-pb0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754074Ab3LDQmZ (ORCPT ); Wed, 4 Dec 2013 11:42:25 -0500 Content-Disposition: inline In-Reply-To: <1386105246-14337-1-git-send-email-konrad.wilk@oracle.com> Sender: linux-input-owner@vger.kernel.org List-Id: linux-input@vger.kernel.org To: Konrad Rzeszutek Wilk Cc: stefano.stabellini@eu.citrix.com, ian.campbell@citrix.com, xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org, boris.ostrovsky@oracle.com, david.vrabel@citrix.com, leosilva@linux.vnet.ibm.com, ashley@ashleylai.com, peterhuewe@gmx.de, mail@srajiv.net, tpmdd@selhorst.net, tpmdd@sirrix.com, bhelgaas@google.com, plagnioj@jcrosoft.com, tomi.valkeinen@ti.com, tpmdd-devel@lists.sourceforge.net, linux-input@vger.kernel.org, netdev@vger.kernel.org, linux-pci@vger.kernel.org, linux-fbdev@vger.kernel.org Hi Konrad, On Tue, Dec 03, 2013 at 04:14:06PM -0500, Konrad Rzeszutek Wilk wrote: > The user has the option of disabling the platform driver: > 00:02.0 Unassigned class [ff80]: XenSource, Inc. Xen Platform Device (rev 01) > > which is used to unplug the emulated drivers (IDE, Realtek 8169, etc) > and allow the PV drivers to take over. If the user wishes > to disable that they can set: > > xen_platform_pci=0 > (in the guest config file) > > or > xen_emul_unplug=never > (on the Linux command line) > > except it does not work properly. The PV drivers still try to > load and since the Xen platform driver is not run - and it > has not initialized the grant tables, most of the PV drivers > stumble upon: > > input: Xen Virtual Keyboard as /devices/virtual/input/input5 > input: Xen Virtual Pointer as /devices/virtual/input/input6M > ------------[ cut here ]------------ > kernel BUG at /home/konrad/ssd/konrad/linux/drivers/xen/grant-table.c:1206! > invalid opcode: 0000 [#1] SMP > Modules linked in: xen_kbdfront(+) xenfs xen_privcmd > CPU: 6 PID: 1389 Comm: modprobe Not tainted 3.13.0-rc1upstream-00021-ga6c892b-dirty #1 > Hardware name: Xen HVM domU, BIOS 4.4-unstable 11/26/2013 > RIP: 0010:[] [] get_free_entries+0x2e0/0x300 > Call Trace: > [] ? evdev_connect+0x1e3/0x240 > [] gnttab_grant_foreign_access+0x2e/0x70 > [] xenkbd_connect_backend+0x41/0x290 [xen_kbdfront] > [] xenkbd_probe+0x2f2/0x324 [xen_kbdfront] > [] xenbus_dev_probe+0x77/0x130 > [] xenbus_frontend_dev_probe+0x47/0x50 > [] driver_probe_device+0x89/0x230 > [] __driver_attach+0x9b/0xa0 > [] ? driver_probe_device+0x230/0x230 > [] ? driver_probe_device+0x230/0x230 > [] bus_for_each_dev+0x8c/0xb0 > [] driver_attach+0x19/0x20 > [] bus_add_driver+0x1a0/0x220 > [] driver_register+0x5f/0xf0 > [] xenbus_register_driver_common+0x15/0x20 > [] xenbus_register_frontend+0x23/0x40 > [] ? 0xffffffffa0014fff > [] xenkbd_init+0x2b/0x1000 [xen_kbdfront] > [] do_one_initcall+0x49/0x170 > > .. snip.. > > which is hardly nice. This patch fixes this by having each > PV driver check for: > - if running in PV, then it is fine to execute (as that is their > native environment). > - if running in HVM, check if user wanted 'xen_emul_unplug=never', > in which case bail out and don't load PV drivers. > - if running in HVM, and if PCI device 5853:0001 (xen_platform_pci) > does not exist, then bail out and not load PV drivers. > > P.S. > Ian Campbell suggested getting rid of 'xen_platform_pci_unplug' > but unfortunatly the xen-blkfront driver is using it, so we > cannot do it. > > Reported-by: Sander Eikelenboom Reported-by: Anthony PERARD > Reported-by: Fabio Fantoni For input: Acked-by: Dmitry Torokhov ... > +#if defined(CONFIG_XEN_PVHVM) > +extern bool xen_has_pv_devices(void); > +#else > +static inline bool xen_has_pv_devices(void) > +{ > +#if defined(CONFIG_XEN) > + return true; > +#else > + return false; > +#endif return IS_ENABLED(CONFIG_XEN); ? Thanks. -- Dmitry