From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: Re: [PATCH] fix XSA-46 regression with xend/xm Date: Tue, 21 May 2013 10:00:28 +0100 Message-ID: <519B37AC.9080202@citrix.com> References: <519B4F1102000078000D789D@nat28.tlf.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <519B4F1102000078000D789D@nat28.tlf.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Jan Beulich Cc: Steven Haigh , Ian Campbell , Ian Jackson , Andreas Falck , xen-devel , Gordan Bobic List-Id: xen-devel@lists.xenproject.org On 21/05/13 09:40, Jan Beulich wrote: > 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) Reviewed-by: Andrew Cooper > > --- a/tools/libxc/xc_physdev.c > +++ b/tools/libxc/xc_physdev.c > @@ -49,7 +49,7 @@ int xc_physdev_map_pirq(xc_interface *xc > 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)); > > --- 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) > > >