aboutsummaryrefslogtreecommitdiff
path: root/hw/vfio
diff options
context:
space:
mode:
authorCédric Le Goater <clg@redhat.com>2023-09-18 11:17:17 +0200
committerDaniel Henrique Barboza <danielhb413@gmail.com>2023-09-18 07:25:28 -0300
commit44fa20c92811a9b88b41b4882a7e948c2fe6bd08 (patch)
tree8ed5368d12a8ab7d0e31179fd71f4c0602d549bb /hw/vfio
parent527b23832930bd17338093725cb9b95203b60742 (diff)
spapr: Remove support for NVIDIA V100 GPU with NVLink2
NVLink2 support was removed from the PPC PowerNV platform and VFIO in Linux 5.13 with commits : 562d1e207d32 ("powerpc/powernv: remove the nvlink support") b392a1989170 ("vfio/pci: remove vfio_pci_nvlink2") This was 2.5 years ago. Do the same in QEMU with a revert of commit ec132efaa81f ("spapr: Support NVIDIA V100 GPU with NVLink2"). Some adjustements are required on the NUMA part. Cc: Alexey Kardashevskiy <aik@ozlabs.ru> Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com> Acked-by: Alex Williamson <alex.williamson@redhat.com> Signed-off-by: Cédric Le Goater <clg@redhat.com> Message-ID: <20230918091717.149950-1-clg@kaod.org> Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Diffstat (limited to 'hw/vfio')
-rw-r--r--hw/vfio/pci-quirks.c115
-rw-r--r--hw/vfio/pci.c14
-rw-r--r--hw/vfio/pci.h2
-rw-r--r--hw/vfio/trace-events4
4 files changed, 0 insertions, 135 deletions
diff --git a/hw/vfio/pci-quirks.c b/hw/vfio/pci-quirks.c
index f4ff836805..84b1a7b948 100644
--- a/hw/vfio/pci-quirks.c
+++ b/hw/vfio/pci-quirks.c
@@ -1610,121 +1610,6 @@ static int vfio_add_nv_gpudirect_cap(VFIOPCIDevice *vdev, Error **errp)
return 0;
}
-int vfio_pci_nvidia_v100_ram_init(VFIOPCIDevice *vdev, Error **errp)
-{
- int ret;
- void *p;
- struct vfio_region_info *nv2reg = NULL;
- struct vfio_info_cap_header *hdr;
- struct vfio_region_info_cap_nvlink2_ssatgt *cap;
- VFIOQuirk *quirk;
-
- ret = vfio_get_dev_region_info(&vdev->vbasedev,
- VFIO_REGION_TYPE_PCI_VENDOR_TYPE |
- PCI_VENDOR_ID_NVIDIA,
- VFIO_REGION_SUBTYPE_NVIDIA_NVLINK2_RAM,
- &nv2reg);
- if (ret) {
- return ret;
- }
-
- hdr = vfio_get_region_info_cap(nv2reg, VFIO_REGION_INFO_CAP_NVLINK2_SSATGT);
- if (!hdr) {
- ret = -ENODEV;
- goto free_exit;
- }
- cap = (void *) hdr;
-
- p = mmap(NULL, nv2reg->size, PROT_READ | PROT_WRITE,
- MAP_SHARED, vdev->vbasedev.fd, nv2reg->offset);
- if (p == MAP_FAILED) {
- ret = -errno;
- goto free_exit;
- }
-
- quirk = vfio_quirk_alloc(1);
- memory_region_init_ram_ptr(&quirk->mem[0], OBJECT(vdev), "nvlink2-mr",
- nv2reg->size, p);
- QLIST_INSERT_HEAD(&vdev->bars[0].quirks, quirk, next);
-
- object_property_add_uint64_ptr(OBJECT(vdev), "nvlink2-tgt",
- (uint64_t *) &cap->tgt,
- OBJ_PROP_FLAG_READ);
- trace_vfio_pci_nvidia_gpu_setup_quirk(vdev->vbasedev.name, cap->tgt,
- nv2reg->size);
-free_exit:
- g_free(nv2reg);
-
- return ret;
-}
-
-int vfio_pci_nvlink2_init(VFIOPCIDevice *vdev, Error **errp)
-{
- int ret;
- void *p;
- struct vfio_region_info *atsdreg = NULL;
- struct vfio_info_cap_header *hdr;
- struct vfio_region_info_cap_nvlink2_ssatgt *captgt;
- struct vfio_region_info_cap_nvlink2_lnkspd *capspeed;
- VFIOQuirk *quirk;
-
- ret = vfio_get_dev_region_info(&vdev->vbasedev,
- VFIO_REGION_TYPE_PCI_VENDOR_TYPE |
- PCI_VENDOR_ID_IBM,
- VFIO_REGION_SUBTYPE_IBM_NVLINK2_ATSD,
- &atsdreg);
- if (ret) {
- return ret;
- }
-
- hdr = vfio_get_region_info_cap(atsdreg,
- VFIO_REGION_INFO_CAP_NVLINK2_SSATGT);
- if (!hdr) {
- ret = -ENODEV;
- goto free_exit;
- }
- captgt = (void *) hdr;
-
- hdr = vfio_get_region_info_cap(atsdreg,
- VFIO_REGION_INFO_CAP_NVLINK2_LNKSPD);
- if (!hdr) {
- ret = -ENODEV;
- goto free_exit;
- }
- capspeed = (void *) hdr;
-
- /* Some NVLink bridges may not have assigned ATSD */
- if (atsdreg->size) {
- p = mmap(NULL, atsdreg->size, PROT_READ | PROT_WRITE,
- MAP_SHARED, vdev->vbasedev.fd, atsdreg->offset);
- if (p == MAP_FAILED) {
- ret = -errno;
- goto free_exit;
- }
-
- quirk = vfio_quirk_alloc(1);
- memory_region_init_ram_device_ptr(&quirk->mem[0], OBJECT(vdev),
- "nvlink2-atsd-mr", atsdreg->size, p);
- QLIST_INSERT_HEAD(&vdev->bars[0].quirks, quirk, next);
- }
-
- object_property_add_uint64_ptr(OBJECT(vdev), "nvlink2-tgt",
- (uint64_t *) &captgt->tgt,
- OBJ_PROP_FLAG_READ);
- trace_vfio_pci_nvlink2_setup_quirk_ssatgt(vdev->vbasedev.name, captgt->tgt,
- atsdreg->size);
-
- object_property_add_uint32_ptr(OBJECT(vdev), "nvlink2-link-speed",
- &capspeed->link_speed,
- OBJ_PROP_FLAG_READ);
- trace_vfio_pci_nvlink2_setup_quirk_lnkspd(vdev->vbasedev.name,
- capspeed->link_speed);
-free_exit:
- g_free(atsdreg);
-
- return ret;
-}
-
/*
* The VMD endpoint provides a real PCIe domain to the guest and the guest
* kernel performs enumeration of the VMD sub-device domain. Guest transactions
diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
index a205c6b113..3b2ca3c24c 100644
--- a/hw/vfio/pci.c
+++ b/hw/vfio/pci.c
@@ -3271,20 +3271,6 @@ static void vfio_realize(PCIDevice *pdev, Error **errp)
}
}
- if (vfio_pci_is(vdev, PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID)) {
- ret = vfio_pci_nvidia_v100_ram_init(vdev, errp);
- if (ret && ret != -ENODEV) {
- error_report("Failed to setup NVIDIA V100 GPU RAM");
- }
- }
-
- if (vfio_pci_is(vdev, PCI_VENDOR_ID_IBM, PCI_ANY_ID)) {
- ret = vfio_pci_nvlink2_init(vdev, errp);
- if (ret && ret != -ENODEV) {
- error_report("Failed to setup NVlink2 bridge");
- }
- }
-
if (!pdev->failover_pair_id) {
if (!vfio_migration_realize(vbasedev, errp)) {
goto out_deregister;
diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h
index a2771b9ff3..2d836093a8 100644
--- a/hw/vfio/pci.h
+++ b/hw/vfio/pci.h
@@ -221,8 +221,6 @@ int vfio_populate_vga(VFIOPCIDevice *vdev, Error **errp);
int vfio_pci_igd_opregion_init(VFIOPCIDevice *vdev,
struct vfio_region_info *info,
Error **errp);
-int vfio_pci_nvidia_v100_ram_init(VFIOPCIDevice *vdev, Error **errp);
-int vfio_pci_nvlink2_init(VFIOPCIDevice *vdev, Error **errp);
void vfio_display_reset(VFIOPCIDevice *vdev);
int vfio_display_probe(VFIOPCIDevice *vdev, Error **errp);
diff --git a/hw/vfio/trace-events b/hw/vfio/trace-events
index 81ec7c7a95..e64ca4a019 100644
--- a/hw/vfio/trace-events
+++ b/hw/vfio/trace-events
@@ -82,10 +82,6 @@ vfio_ioeventfd_handler(const char *name, uint64_t addr, unsigned size, uint64_t
vfio_ioeventfd_init(const char *name, uint64_t addr, unsigned size, uint64_t data, bool vfio) "%s+0x%"PRIx64"[%d]:0x%"PRIx64" vfio:%d"
vfio_pci_igd_opregion_enabled(const char *name) "%s"
-vfio_pci_nvidia_gpu_setup_quirk(const char *name, uint64_t tgt, uint64_t size) "%s tgt=0x%"PRIx64" size=0x%"PRIx64
-vfio_pci_nvlink2_setup_quirk_ssatgt(const char *name, uint64_t tgt, uint64_t size) "%s tgt=0x%"PRIx64" size=0x%"PRIx64
-vfio_pci_nvlink2_setup_quirk_lnkspd(const char *name, uint32_t link_speed) "%s link_speed=0x%x"
-
# igd.c
vfio_pci_igd_bar4_write(const char *name, uint32_t index, uint32_t data, uint32_t base) "%s [0x%03x] 0x%08x -> 0x%08x"
vfio_pci_igd_bdsm_enabled(const char *name, int size) "%s %dMB"