From cf7baf56cb57e756aec1e8dc3dcd20894740f2b4 Mon Sep 17 00:00:00 2001 From: Michael Young Date: Jun 24 2013 20:24:39 +0000 Subject: add upstream patch for PCI passthrough problems after XSA-46 --- diff --git a/xen.git-934a5253d932b6f67fe40fc48975a2b0117e4cce.patch b/xen.git-934a5253d932b6f67fe40fc48975a2b0117e4cce.patch new file mode 100644 index 0000000..e35be52 --- /dev/null +++ b/xen.git-934a5253d932b6f67fe40fc48975a2b0117e4cce.patch @@ -0,0 +1,68 @@ +From 934a5253d932b6f67fe40fc48975a2b0117e4cce Mon Sep 17 00:00:00 2001 +From: Jan Beulich +Date: Tue, 21 May 2013 11:32:34 +0200 +Subject: [PATCH] fix XSA-46 regression with xend/xm + +The hypervisor side changes for XSA-46 require the tool stack to now +always map the guest pIRQ before granting access permission to the +underlying host IRQ (GSI). This in particular requires that pciif.py +no longer can skip this step (assuming qemu would do it) for HVM +guests. + +This in turn exposes, however, an inconsistency between xend and qemu: +The former wants to always establish 1:1 mappings between pIRQ and host +IRQ (for non-MSI only of course), while the latter always wants to +allocate an arbitrary mapping. Since the whole tool stack obviously +should always agree on the mapping model, make libxc enforce the 1:1 +mapping as the more natural one (as well as being the one that allows +for easier debugging, since there no need to find out the extra +mapping). Users of libxc that want to establish a particular (rather +than an allocated) mapping are still free to do so, as well as tool +stacks not based on libxc wanting to implement an allocation based +model (which is why it's not the hypervisor that's being changed to +enforce either model). + +Since libxl, like xend, already uses a 1:1 model, it's unaffected by +the libxc change (and it being unaffected by the original hypervisor +side changes is - afaict - simply due to qemu getting spawned at a +later point in time compared to the xend event flow). + +Signed-off-by: Jan Beulich +Tested-by: Andreas Falck (on 4.1) +Tested-by: Gordan Bobic (on 4.2) +Acked-by: Ian Campbell +Reviewed-by: Andrew Cooper +--- + tools/libxc/xc_physdev.c | 2 +- + tools/python/xen/xend/server/pciif.py | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/tools/libxc/xc_physdev.c b/tools/libxc/xc_physdev.c +index bdbcba7..cf02d85 100644 +--- a/tools/libxc/xc_physdev.c ++++ b/tools/libxc/xc_physdev.c +@@ -49,7 +49,7 @@ int xc_physdev_map_pirq(xc_interface *xch, + map.domid = domid; + map.type = MAP_PIRQ_TYPE_GSI; + map.index = index; +- map.pirq = *pirq; ++ map.pirq = *pirq < 0 ? index : *pirq; + + rc = do_physdev_op(xch, PHYSDEVOP_map_pirq, &map, sizeof(map)); + +diff --git a/tools/python/xen/xend/server/pciif.py b/tools/python/xen/xend/server/pciif.py +index 43d0c80..27c1b75 100644 +--- a/tools/python/xen/xend/server/pciif.py ++++ b/tools/python/xen/xend/server/pciif.py +@@ -340,7 +340,7 @@ class PciController(DevController): + raise VmError(('pci: failed to configure I/O memory on device '+ + '%s - errno=%d')%(dev.name,rc)) + +- if not self.vm.info.is_hvm() and dev.irq: ++ if dev.irq > 0: + rc = xc.physdev_map_pirq(domid = fe_domid, + index = dev.irq, + pirq = dev.irq) +-- +1.7.2.5 + diff --git a/xen.spec b/xen.spec index 5f4d031..5e7ee0e 100644 --- a/xen.spec +++ b/xen.spec @@ -27,7 +27,7 @@ Summary: Xen is a virtual machine monitor Name: xen Version: 4.2.2 -Release: 8%{?dist} +Release: 9%{?dist} Group: Development/Libraries License: GPLv2+ and LGPLv2+ and BSD URL: http://xen.org/ @@ -115,6 +115,7 @@ Patch98: xsa55-4.20021-libxc-range-checks-in-xc_dom_p2m_host-and-_guest.patch Patch99: xsa55-4.20022-libxc-check-blob-size-before-proceeding-in-xc_dom_ch.patch Patch101: xsa55-4.20023-libxc-Better-range-check-in-xc_dom_alloc_segment.patch Patch102: xsa57-4.2.patch +Patch103: xen.git-934a5253d932b6f67fe40fc48975a2b0117e4cce.patch Patch100: xen-configure-xend.patch @@ -321,6 +322,7 @@ manage Xen virtual machines. %patch99 -p1 %patch101 -p1 %patch102 -p1 +%patch103 -p1 %patch100 -p1 @@ -810,6 +812,9 @@ rm -rf %{buildroot} %endif %changelog +* Mon Jun 24 2013 Michael Young - 4.2.2-9 +- add upstream patch for PCI passthrough problems after XSA-46 (#977310) + * Fri Jun 21 2013 Michael Young - 4.2.2-8 - xenstore permissions not set correctly by libxl [XSA-57] (#976779)