From mboxrd@z Thu Jan 1 00:00:00 1970 From: NISHIGUCHI Naoki Subject: Re: [PATCH] Support more Capability Structures (including MSI/MSI-X) and Device Specific Registers for pt device. Date: Tue, 08 Jul 2008 14:14:55 +0900 Message-ID: <4872F7CF.2040603@jp.fujitsu.com> References: <20080704152258.855C.SHIMADA-YXB@necst.nec.co.jp> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------000602070004040707070105" Return-path: In-Reply-To: <20080704152258.855C.SHIMADA-YXB@necst.nec.co.jp> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Yuji Shimada Cc: Ian Jackson , xen-devel , "Dong, Eddie" , Keir Fraser , "Cui, Dexuan" List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------000602070004040707070105 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Hi, I've tested your patch with Windows XP Professional SP2 and UHCI/EHCI. But your patch did not work with USB keyboard and USB mouse and so on. The following are hypervisor's log. (XEN) domctl.c:760:d0 ioport_map:invalid:gport=ffffffff mport=f600 nr_ports=20 (XEN) domctl.c:760:d0 ioport_map:invalid:gport=ffffffff mport=f800 nr_ports=20 (XEN) domctl.c:760:d0 ioport_map:invalid:gport=ffffffff mport=f700 nr_ports=20 (XEN) domctl.c:760:d0 ioport_map:invalid:gport=ffffffff mport=f700 nr_ports=20 (XEN) domctl.c:760:d0 ioport_map:invalid:gport=ffffffff mport=f800 nr_ports=20 (XEN) domctl.c:760:d0 ioport_map:invalid:gport=ffffffff mport=f600 nr_ports=20 (XEN) p2m.c:1158:d0 clear_mmio_p2m_entry: gfn_to_mfn failed! gfn=000fffff The problem had occurred by removing mapping of invalid guest address(-1). Attached patch fixes this problem. Signed-off-by: Naoki Nishiguchi Regards, Naoki Nishiguchi Yuji Shimada wrote: > I am submitting the patch which supports more Capability Structures > including MSI/MSI-X Capability Structure and Device Specific > Registers for passthrough device. The purpose of the patch is enabling > various I/O device to be assigned to guest domain. > > I hope the patch is applied to xen 3.3 unstable tree, and tested by > many developers. > > I implemented following Capability Structures and Device Specific > Registers. > > * Configuration Header Type 0 > -> emulation. > "emulation" does not mean no accessing real I/O device. > Access real I/O device, but guest value and real value > might be different. > * MSI Capability Structure > -> emulation. > Behavior is not changed from existed implementation in > pt-msi.c, although code is changed. > * MSI-X Capability Structure > -> emulation. > Behavior is not changed from existed implementation in > pt-msi.c, although code is changed. > * PCI Express Capability Structure > -> emulation. > * PCI Power Management Capability Structure > -> emulation. > * Vital Product Data Capability Structure > -> emulation. > Emulated register is only Next Capability Pointer Register. > All other registers are passthrough. > * Vendor Specific Capability Structure > -> emulation > Emulated register is only Next Capability Pointer Register. > All other registers are passthrough. > * Device Specific Register (exclude capability structures) > -> passthrough. > The device drivers in guest domain are allowed to access > Device Specific Register. So various I/O device will work. > > I assigned following device to guest domain, and they worked fine. > > - PCIe NIC (MSI) > - PCI NIC (MSI) > - UHCI (INTx interrupt) > - IDE Controller (INTx interrupt) > > To assign device with MSI to guest domain, please add "msi_irq_enable" > to xen hypervisor's boot parameter. If you would like to disable > MSI/MSI-X, please add "pci=nomsi" to guest linux boot parameter. > > I have not tested MSI-X much. I hope developers in xen community test > them. > > Other Capability Structures are hidden from guest software. To do > this, I change Next Capability Pointer's value to point only the > Capability Structure that need to be exported to guest software (see > emulate capabilities above). And some Capability Structures are 0 > hardwired, and others are passthrough. > > This patch removes "switch" statements for emulation, and introduces > table based emulation derived from pciback driver. You can implement > new Capability Structure by adding new table. > > The other advantage of using this table is that you can easily change > the emulation policy of each field/bit by just simply modifying the > "emu_mask" value provided in each register table. > And for only special emulation or interacting with other components > (like hypervisor), you have to implement function corresponding to the > register. > > Thanks. > > Signed-off-by: Yuji Shimada > > > ------------------------------------------------------------------------ > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel --------------000602070004040707070105 Content-Type: text/x-patch; name="fix_pt_iomap.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="fix_pt_iomap.patch" diff -r 0d707feab01e tools/ioemu/hw/pass-through.c --- a/tools/ioemu/hw/pass-through.c Mon Jul 07 16:13:53 2008 +0100 +++ b/tools/ioemu/hw/pass-through.c Tue Jul 08 11:27:48 2008 +0900 @@ -827,7 +827,7 @@ void pt_iomem_map(PCIDevice *d, int i, u if ( e_size == 0 ) return; - if ( !first_map ) + if ( !first_map && old_ebase != -1 ) { add_msix_mapping(assigned_device, i); /* Remove old mapping */ @@ -883,7 +883,7 @@ void pt_ioport_map(PCIDevice *d, int i, if ( e_size == 0 ) return; - if ( !first_map ) + if ( !first_map && old_ebase != -1 ) { /* Remove old mapping */ ret = xc_domain_ioport_mapping(xc_handle, domid, old_ebase, --------------000602070004040707070105 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------------000602070004040707070105--