From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: iommuu/vt-d issues with LSI MegaSAS (PERC5i) Date: Wed, 2 Jun 2010 10:49:06 -0400 Message-ID: <20100602144906.GC13344@phenom.dumpdata.com> References: <1275143477.15573.19.camel@debmed> <4C05B299.60504@intel.com> <20100602062624.GJ17817@reaktio.net> <4C0602AF.5040806@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable Return-path: Content-Disposition: inline In-Reply-To: <4C0602AF.5040806@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Weidong Han Cc: "M. Nunberg" , Xen-devel List-Id: xen-devel@lists.xenproject.org On Wed, Jun 02, 2010 at 03:05:19PM +0800, Weidong Han wrote: > Pasi K=E4rkk=E4inen wrote: >> On Wed, Jun 02, 2010 at 09:23:37AM +0800, Weidong Han wrote: >> =20 >>> This PCI-x card is not suitable for assignment. It contains an invisi= ble >>> device 05:08.0 (lspci cannot show it), but this invisible device won'= t >>> be mapped by VT-d because VT-d engine doesn't know this device, so yo= u >>> can see the DMAR faults on it. One workaround is to hard code to map >>> 05:08.0 when assign 05:0e.0. BTW, PCIe LSI card don't have this probl= em. >>> >>> =20 >> >> Note that this problem happens when booting up dom0.. >> =20 > I see. all devices are assigned to dom0 in booting. It just needs to ma= p =20 > 05:08.0 as well when map 05:0e.0 in domain_context_mapping. Hey Weidong, Thank you the explanation. I am not that familiar with the VT-D chipset, but it seems that this issue also appears with CardBus controllers: http://lkml.org/lkml/2010/5/22/69 ? For this device, the problem should also appear with the newer kernels without using the Hypervisor and with CONFIG_DMAR enabled, right?=20 Am I to understand that the workaround you are proposing is doing something akin to this: /* * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License v2.0 as published= by * the Free Software Foundation * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define LSI_HACK "0.1" MODULE_AUTHOR("Konrad Rzeszutek Wilk "); MODULE_DESCRIPTION("lsi hack"); MODULE_LICENSE("GPL"); MODULE_VERSION(LSI_HACK); static int __init lsi_hack_init(void) { int r =3D 0; struct physdev_manage_pci manage_pci =3D { .bus =3D 0x5, .devfn =3D PCI_DEVFN(8,0), }; r =3D HYPERVISOR_physdev_op(PHYSDEVOP_manage_pci_add, &manage_pci); return r; } static void __exit lsi_hack_exit(void) { int r =3D 0; struct physdev_manage_pci manage_pci; manage_pci.bus =3D 0x5; manage_pci.devfn =3D PCI_DEVFN(8,0); r =3D HYPERVISOR_physdev_op(PHYSDEVOP_manage_pci_remove, &manage_pci); if (r) printk(KERN_ERR "%s: %d\n", __FUNCTION__, r); } module_init(lsi_hack_init); module_exit(lsi_hack_exit);