[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] fix XSA-46 regression with xend/xm



On Tue, 2013-05-21 at 09:40 +0100, 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 <jbeulich@xxxxxxxx>
> Tested-by: Andreas Falck <falck.andreas.lists@xxxxxxxxx> (on 4.1)
> Tested-by: Gordan Bobic <gordan@xxxxxxxxxx> (on 4.2)

In both cases tested with xend rather than xl or both?

Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx>

> --- 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)
> 
> 
> 



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.