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

Re: [Xen-devel] [xen-unstable] [qemu-xen] pci passthrough msi-x returns same pirq



On Thu, 6 Dec 2012, Sander Eikelenboom wrote:
> Hi Stefano / Anthony,
> 
> With the debug output turned on i see some difference between 
> qemu-traditional and qemu-upstream:
> 
> With the pci passthroughed device that fails with msi-x, in qemu-xen it seems 
> to get the same pirq back for every entry
> 
> in qemu-traditional:
> 
> pt_msix_update_one: pt_msix_update_one requested pirq = 87
> pt_msix_update_one: Update msix entry 0 with pirq 57 gvec 0
> pt_msix_update_one: pt_msix_update_one requested pirq = 86
> pt_msix_update_one: Update msix entry 1 with pirq 56 gvec 0
> pt_msix_update_one: pt_msix_update_one requested pirq = 85
> pt_msix_update_one: Update msix entry 2 with pirq 55 gvec 0
> pt_msix_update_one: pt_msix_update_one requested pirq = 84
> pt_msix_update_one: Update msix entry 3 with pirq 54 gvec 0
> 
> 
> in qemu-xen (upstream):
> 
> [00:05.0] msi_msix_setup: requested pirq 4 for MSI-X (vec: 0, entry: 0)
> [00:05.0] msi_msix_update: Updating MSI-X with pirq 4 gvec 0 gflags 0x3057 
> (entry: 0)
> [00:05.0] msi_msix_setup: requested pirq 4 for MSI-X (vec: 0, entry: 0x1)
> [00:05.0] msi_msix_update: Updating MSI-X with pirq 4 gvec 0 gflags 0x3056 
> (entry: 0x1)
> [00:05.0] msi_msix_setup: requested pirq 4 for MSI-X (vec: 0, entry: 0x2)
> [00:05.0] msi_msix_update: Updating MSI-X with pirq 4 gvec 0 gflags 0x3055 
> (entry: 0x2)
> [00:05.0] msi_msix_setup: requested pirq 4 for MSI-X (vec: 0, entry: 0x3)
> [00:05.0] msi_msix_update: Updating MSI-X with pirq 4 gvec 0 gflags 0x3054 
> (entry: 0x3)

That is a good pointer, but unfortunately the code that parses those
entries look exactly alike in both QEMU trees:

qemu-xen-traditional/hw/pt-msi.c:pt_msix_update_one

if (!gvec) {
        /* if gvec is 0, the guest is asking for a particular pirq that
         * is passed as dest_id */
        pirq = ((gaddr >> 32) & 0xffffff00) |
               (((gaddr & 0xffffffff) >> MSI_TARGET_CPU_SHIFT) & 0xff);



qemu-xen/hw/xen_pt_msi.c:msi_msix_setup

if (gvec == 0) {
        /* if gvec is 0, the guest is asking for a particular pirq that
         * is passed as dest_id */
        *ppirq = msi_ext_dest_id(addr >> 32) | msi_dest_id(addr);

given how msi_ext_dest_id and msi_dest_id are defined, they should
behave the same way.

Maybe adding a printk in msi_msix_setup to show addr would help
nonetheless...

_______________________________________________
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®.