qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH v2 2/5] pci: Add interface names to hybrid PCI d


From: Marcel Apfelbaum
Subject: Re: [Qemu-devel] [PATCH v2 2/5] pci: Add interface names to hybrid PCI devices
Date: Thu, 28 Sep 2017 12:27:16 +0300
User-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:52.0) Gecko/20100101 Thunderbird/52.3.0

On 28/09/2017 7:08, David Gibson wrote:
On Wed, Sep 27, 2017 at 04:56:32PM -0300, Eduardo Habkost wrote:
The following devices support both PCI Express and Conventional
PCI, by including special code to handle the QEMU_PCI_CAP_EXPRESS
flag and/or conditional pcie_endpoint_cap_init() calls:

* vfio-pci (is_express=1, but legacy PCI handled by
   vfio_populate_device())

In the case of VFIO, won't this depend on the capabilities of the
device on the host?


Most (almost all?) assigned devices are PCI Express,
they will be exposed as PCI/PCI express depending on the
slot they are plugged into.

Anyway, the interface only states the device can be PCI or PCI Express,
so I think is OK.

Reviewed-by: Marcel Apfelbaum <address@hidden>

Thanks,
Marcel

* vmxnet3 (is_express=0, but PCIe handled by vmxnet3_realize())
* pvscsi (is_express=0, but PCIe handled by pvscsi_realize())
* virtio-pci (is_express=0, but PCIe handled by
   virtio_pci_dc_realize(), and additional legacy PCI code at
   virtio_pci_realize())
* base-xhci (is_express=1, but pcie_endpoint_cap_init() call
   is conditional on pci_bus_is_express(dev->bus)
   * Note that xhci does not clear QEMU_PCI_CAP_EXPRESS like the
     other hybrid devices

Cc: Dmitry Fleytman <address@hidden>
Cc: Jason Wang <address@hidden>
Cc: Paolo Bonzini <address@hidden>
Cc: Gerd Hoffmann <address@hidden>
Cc: Alex Williamson <address@hidden>
Cc: "Michael S. Tsirkin" <address@hidden>
Signed-off-by: Eduardo Habkost <address@hidden>

Except for the query above,

Reviewed-by: David Gibson <address@hidden>

---
Changes v1 -> v2:
* s/legacy/conventional/
   * Suggested-by: Alex Williamson <address@hidden>
* Mark base-xhci as hybrid too
---
  hw/net/vmxnet3.c       | 5 +++++
  hw/scsi/vmw_pvscsi.c   | 2 ++
  hw/usb/hcd-xhci.c      | 5 +++++
  hw/vfio/pci.c          | 5 +++++
  hw/virtio/virtio-pci.c | 5 +++++
  5 files changed, 22 insertions(+)

diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
index a19a7a31dd..f99d9a69ec 100644
--- a/hw/net/vmxnet3.c
+++ b/hw/net/vmxnet3.c
@@ -2651,6 +2651,11 @@ static const TypeInfo vmxnet3_info = {
      .instance_size = sizeof(VMXNET3State),
      .class_init    = vmxnet3_class_init,
      .instance_init = vmxnet3_instance_init,
+    .interfaces = (InterfaceInfo[]) {
+        { INTERFACE_PCIE_DEVICE },
+        { INTERFACE_CONVENTIONAL_PCI_DEVICE },
+        { }
+    },
  };
static void vmxnet3_register_types(void)
diff --git a/hw/scsi/vmw_pvscsi.c b/hw/scsi/vmw_pvscsi.c
index 6d3f0bf11d..d6b315f8b2 100644
--- a/hw/scsi/vmw_pvscsi.c
+++ b/hw/scsi/vmw_pvscsi.c
@@ -1300,6 +1300,8 @@ static const TypeInfo pvscsi_info = {
      .class_init    = pvscsi_class_init,
      .interfaces = (InterfaceInfo[]) {
          { TYPE_HOTPLUG_HANDLER },
+        { INTERFACE_PCIE_DEVICE },
+        { INTERFACE_CONVENTIONAL_PCI_DEVICE },
          { }
      }
  };
diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c
index d75c085d94..af3a9d88de 100644
--- a/hw/usb/hcd-xhci.c
+++ b/hw/usb/hcd-xhci.c
@@ -3670,6 +3670,11 @@ static const TypeInfo xhci_info = {
      .instance_size = sizeof(XHCIState),
      .class_init    = xhci_class_init,
      .abstract      = true,
+    .interfaces = (InterfaceInfo[]) {
+        { INTERFACE_PCIE_DEVICE },
+        { INTERFACE_CONVENTIONAL_PCI_DEVICE },
+        { }
+    },
  };
static void qemu_xhci_class_init(ObjectClass *klass, void *data)
diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
index 31e1edf447..913433d6ba 100644
--- a/hw/vfio/pci.c
+++ b/hw/vfio/pci.c
@@ -3023,6 +3023,11 @@ static const TypeInfo vfio_pci_dev_info = {
      .class_init = vfio_pci_dev_class_init,
      .instance_init = vfio_instance_init,
      .instance_finalize = vfio_instance_finalize,
+    .interfaces = (InterfaceInfo[]) {
+        { INTERFACE_PCIE_DEVICE },
+        { INTERFACE_CONVENTIONAL_PCI_DEVICE },
+        { }
+    },
  };
static void register_vfio_pci_dev_type(void)
diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
index 8b0d6b69cd..67c8ab63ad 100644
--- a/hw/virtio/virtio-pci.c
+++ b/hw/virtio/virtio-pci.c
@@ -1958,6 +1958,11 @@ static const TypeInfo virtio_pci_info = {
      .class_init    = virtio_pci_class_init,
      .class_size    = sizeof(VirtioPCIClass),
      .abstract      = true,
+    .interfaces = (InterfaceInfo[]) {
+        { INTERFACE_PCIE_DEVICE },
+        { INTERFACE_CONVENTIONAL_PCI_DEVICE },
+        { }
+    },
  };
/* virtio-blk-pci */





reply via email to

[Prev in Thread] Current Thread [Next in Thread]