diff options
| author | Akihiko Odaki <akihiko.odaki@daynix.com> | 2025-03-14 15:14:54 +0900 |
|---|---|---|
| committer | Michael S. Tsirkin <mst@redhat.com> | 2025-05-14 05:39:14 -0400 |
| commit | 19e55471d4e8a494cfda7470e701829e3a873bdc (patch) | |
| tree | d91d391086406b509cc8f42d5aee3c44d746e444 /include/hw/pci/pci_device.h | |
| parent | d2f5bb7849e463646173564fdadf40e32a32bf6e (diff) | |
| download | focaccia-qemu-19e55471d4e8a494cfda7470e701829e3a873bdc.tar.gz focaccia-qemu-19e55471d4e8a494cfda7470e701829e3a873bdc.zip | |
pcie_sriov: Allow user to create SR-IOV device
A user can create a SR-IOV device by specifying the PF with the sriov-pf property of the VFs. The VFs must be added before the PF. A user-creatable VF must have PCIDeviceClass::sriov_vf_user_creatable set. Such a VF cannot refer to the PF because it is created before the PF. A PF that user-creatable VFs can be attached calls pcie_sriov_pf_init_from_user_created_vfs() during realization and pcie_sriov_pf_exit() when exiting. Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> Message-Id: <20250314-sriov-v9-5-57dae8ae3ab5@daynix.com> Tested-by: Yui Washizu <yui.washidu@gmail.com> Tested-by: Pasha Tatashin <pasha.tatashin@soleen.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Diffstat (limited to 'include/hw/pci/pci_device.h')
| -rw-r--r-- | include/hw/pci/pci_device.h | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/include/hw/pci/pci_device.h b/include/hw/pci/pci_device.h index 345b12eaac..e41d95b0b0 100644 --- a/include/hw/pci/pci_device.h +++ b/include/hw/pci/pci_device.h @@ -38,6 +38,8 @@ struct PCIDeviceClass { uint16_t subsystem_id; /* only for header type = 0 */ const char *romfile; /* rom bar */ + + bool sriov_vf_user_creatable; }; enum PCIReqIDType { @@ -177,6 +179,8 @@ struct PCIDevice { * realizing the device. */ uint32_t max_bounce_buffer_size; + + char *sriov_pf; }; static inline int pci_intx(PCIDevice *pci_dev) @@ -209,7 +213,7 @@ static inline int pci_is_express_downstream_port(const PCIDevice *d) static inline int pci_is_vf(const PCIDevice *d) { - return d->exp.sriov_vf.pf != NULL; + return d->sriov_pf || d->exp.sriov_vf.pf != NULL; } static inline uint32_t pci_config_size(const PCIDevice *d) |