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

Re: [RFC QEMU PATCH v7 1/1] xen/pci: get gsi for passthrough devices


  • To: Jiqian Chen <Jiqian.Chen@xxxxxxx>, <qemu-devel@xxxxxxxxxx>, "Stefano Stabellini" <sstabellini@xxxxxxxxxx>, Anthony PERARD <anthony@xxxxxxxxxxxxxx>, Paul Durrant <paul@xxxxxxx>, "Edgar E. Iglesias" <edgar.iglesias@xxxxxxxxx>
  • From: Stewart Hildebrand <stewart.hildebrand@xxxxxxx>
  • Date: Mon, 14 Oct 2024 15:34:50 -0400
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=nongnu.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0)
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=So1Uuts7Om0gG4P7bfTl+P+vFuUUY52uL60n03Dy22k=; b=hvj2GOeVa2zhCY8k0HTQ+eOHVQ1zTzpkLRMu0Hod7W2LhzdYfOqsw0borW8+K+u8ttSYmyovNyv0o7JIs6qaH8Zxt7/3yATflAz4gd2r+IgVn/7vG7sZw/g0pGd1xA3eoIxLdyBaeWOIPRnfwz46EK9ddRNTD+kIQAfSSpJRXKh0qd8yWR/eJ3iQEwJz2BPwpO28vRj8l8MxwZKlq+AJMzDbqCTSTpXQLv+UOqYj6AdVyMm6ucIFbH6cFoB6t8dtHjXmD4jauBvb0H4aOh+S06nNYiCsnq6ZE2QRr449cJdOIjc3gy4gxQczlumH0PVuIrQHTh3iKWG/bykx06vYkQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=acGXjQhoTlI13Cho0+B/muvkVH4JmsPGZDFt21J01nCW8LYhta6iM9812epKB1vyhIoTMkDNMaLFAVOjdODiK+sZ01TSeLjN8F6bhLmYLAqHZmgUiKWNVBwZGyurcDcYZntvyMoaa828xNlrMwvydF+39KDAWGUlF/baOQoeeW9LZ6/HZn0WwwQ5BVS0qtCNcbMA5QH1ngvKtdrPySB9Unb2/0FuE3VCofxAiZRoyRfekr2vZjjpc5UIRo0R1raB8DFTK4U82b69+cBB7u7mKgROW63/0CenSczl84McydHbtb8+VuYoEbjatY/waSHZtOZcHmApq8vlPNi4phH47w==
  • Cc: <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Huang Rui <Ray.Huang@xxxxxxx>
  • Delivery-date: Mon, 14 Oct 2024 19:35:18 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

+Edgar

On 5/16/24 06:13, Jiqian Chen wrote:
> In PVH dom0, it uses the linux local interrupt mechanism,
> when it allocs irq for a gsi, it is dynamic, and follow
> the principle of applying first, distributing first. And
> the irq number is alloced from small to large, but the
> applying gsi number is not, may gsi 38 comes before gsi
> 28, that causes the irq number is not equal with the gsi
> number. And when passthrough a device, qemu wants to use
> gsi to map pirq, xen_pt_realize->xc_physdev_map_pirq, but
> the gsi number is got from file
> /sys/bus/pci/devices/<sbdf>/irq in current code, so it
> will fail when mapping.
> 
> Get gsi by using new function supported by Xen tools.
> 
> Signed-off-by: Huang Rui <ray.huang@xxxxxxx>
> Signed-off-by: Jiqian Chen <Jiqian.Chen@xxxxxxx>

I think you can safely remove the RFC tag since the Xen bits have been
upstreamed.

> ---
>  hw/xen/xen-host-pci-device.c | 19 +++++++++++++++----
>  1 file changed, 15 insertions(+), 4 deletions(-)
> 
> diff --git a/hw/xen/xen-host-pci-device.c b/hw/xen/xen-host-pci-device.c
> index 8c6e9a1716a2..2fe6a60434ba 100644
> --- a/hw/xen/xen-host-pci-device.c
> +++ b/hw/xen/xen-host-pci-device.c
> @@ -10,6 +10,7 @@
>  #include "qapi/error.h"
>  #include "qemu/cutils.h"
>  #include "xen-host-pci-device.h"
> +#include "hw/xen/xen_native.h"

The inclusion order unfortunately seems to be delicate.
"hw/xen/xen_native.h" should be before all the other xen
includes, but after "qemu/osdep.h".

>  
>  #define XEN_HOST_PCI_MAX_EXT_CAP \
>      ((PCIE_CONFIG_SPACE_SIZE - PCI_CONFIG_SPACE_SIZE) / (PCI_CAP_SIZEOF + 4))
> @@ -329,12 +330,17 @@ int xen_host_pci_find_ext_cap_offset(XenHostPCIDevice 
> *d, uint32_t cap)
>      return -1;
>  }
>  
> +#define PCI_SBDF(seg, bus, dev, func) \
> +            ((((uint32_t)(seg)) << 16) | \
> +            (PCI_BUILD_BDF(bus, PCI_DEVFN(dev, func))))
> +
>  void xen_host_pci_device_get(XenHostPCIDevice *d, uint16_t domain,
>                               uint8_t bus, uint8_t dev, uint8_t func,
>                               Error **errp)
>  {
>      ERRP_GUARD();
>      unsigned int v;
> +    uint32_t sdbf;

Typo: s/sdbf/sbdf/

>  
>      d->config_fd = -1;
>      d->domain = domain;
> @@ -364,11 +370,16 @@ void xen_host_pci_device_get(XenHostPCIDevice *d, 
> uint16_t domain,
>      }
>      d->device_id = v;
>  
> -    xen_host_pci_get_dec_value(d, "irq", &v, errp);
> -    if (*errp) {
> -        goto error;
> +    sdbf = PCI_SBDF(domain, bus, dev, func);
> +    d->irq = xc_physdev_gsi_from_dev(xen_xc, sdbf);

This was renamed to xc_pcidev_get_gsi.

This also needs some sort of Xen interface version guard for backward
compatibility since it's a new call introduced in Xen 4.20.

> +    /* fail to get gsi, fallback to irq */
> +    if (d->irq == -1) {
> +        xen_host_pci_get_dec_value(d, "irq", &v, errp);
> +        if (*errp) {
> +            goto error;
> +        }
> +        d->irq = v;
>      }
> -    d->irq = v;
>  
>      xen_host_pci_get_hex_value(d, "class", &v, errp);
>      if (*errp) {




 


Rackspace

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