Message ID | 20181122121402.13764-14-yuval.shaia@oracle.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add support for RDMA MAD | expand |
On 11/22/18 2:13 PM, Yuval Shaia wrote: > Guest driver enforces it, we should also. > > Signed-off-by: Yuval Shaia <yuval.shaia@oracle.com> > --- > hw/rdma/vmw/pvrdma.h | 2 ++ > hw/rdma/vmw/pvrdma_main.c | 12 ++++++++++++ > 2 files changed, 14 insertions(+) > > diff --git a/hw/rdma/vmw/pvrdma.h b/hw/rdma/vmw/pvrdma.h > index b019cb843a..10a3c4fb7c 100644 > --- a/hw/rdma/vmw/pvrdma.h > +++ b/hw/rdma/vmw/pvrdma.h > @@ -20,6 +20,7 @@ > #include "hw/pci/pci.h" > #include "hw/pci/msix.h" > #include "chardev/char-fe.h" > +#include "hw/net/vmxnet3_defs.h" > > #include "../rdma_backend_defs.h" > #include "../rdma_rm_defs.h" > @@ -85,6 +86,7 @@ typedef struct PVRDMADev { > RdmaBackendDev backend_dev; > RdmaDeviceResources rdma_dev_res; > CharBackend mad_chr; > + VMXNET3State *func0; > } PVRDMADev; > #define PVRDMA_DEV(dev) OBJECT_CHECK(PVRDMADev, (dev), PVRDMA_HW_NAME) > > diff --git a/hw/rdma/vmw/pvrdma_main.c b/hw/rdma/vmw/pvrdma_main.c > index ac8c092db0..b35b5dc5f0 100644 > --- a/hw/rdma/vmw/pvrdma_main.c > +++ b/hw/rdma/vmw/pvrdma_main.c > @@ -565,6 +565,7 @@ static void pvrdma_realize(PCIDevice *pdev, Error **errp) > PVRDMADev *dev = PVRDMA_DEV(pdev); > Object *memdev_root; > bool ram_shared = false; > + PCIDevice *func0; > > init_pr_dbg(); > > @@ -576,6 +577,17 @@ static void pvrdma_realize(PCIDevice *pdev, Error **errp) > return; > } > > + func0 = pci_get_function_0(pdev); > + /* Break if not vmxnet3 device in slot 0 */ > + if (strcmp(object_get_typename(&func0->qdev.parent_obj), TYPE_VMXNET3)) { > + pr_dbg("func0 type is %s\n", > + object_get_typename(&func0->qdev.parent_obj)); > + error_setg(errp, "Device on %x.0 must be %s", PCI_SLOT(pdev->devfn), > + TYPE_VMXNET3); > + return; > + } > + dev->func0 = VMXNET3(func0); > + > memdev_root = object_resolve_path("/objects", NULL); > if (memdev_root) { > object_child_foreach(memdev_root, pvrdma_check_ram_shared, &ram_shared); Reviewed-by: Marcel Apfelbaum <marcel.apfelbaum@gmail.com> Thanks, Marcel
diff --git a/hw/rdma/vmw/pvrdma.h b/hw/rdma/vmw/pvrdma.h index b019cb843a..10a3c4fb7c 100644 --- a/hw/rdma/vmw/pvrdma.h +++ b/hw/rdma/vmw/pvrdma.h @@ -20,6 +20,7 @@ #include "hw/pci/pci.h" #include "hw/pci/msix.h" #include "chardev/char-fe.h" +#include "hw/net/vmxnet3_defs.h" #include "../rdma_backend_defs.h" #include "../rdma_rm_defs.h" @@ -85,6 +86,7 @@ typedef struct PVRDMADev { RdmaBackendDev backend_dev; RdmaDeviceResources rdma_dev_res; CharBackend mad_chr; + VMXNET3State *func0; } PVRDMADev; #define PVRDMA_DEV(dev) OBJECT_CHECK(PVRDMADev, (dev), PVRDMA_HW_NAME) diff --git a/hw/rdma/vmw/pvrdma_main.c b/hw/rdma/vmw/pvrdma_main.c index ac8c092db0..b35b5dc5f0 100644 --- a/hw/rdma/vmw/pvrdma_main.c +++ b/hw/rdma/vmw/pvrdma_main.c @@ -565,6 +565,7 @@ static void pvrdma_realize(PCIDevice *pdev, Error **errp) PVRDMADev *dev = PVRDMA_DEV(pdev); Object *memdev_root; bool ram_shared = false; + PCIDevice *func0; init_pr_dbg(); @@ -576,6 +577,17 @@ static void pvrdma_realize(PCIDevice *pdev, Error **errp) return; } + func0 = pci_get_function_0(pdev); + /* Break if not vmxnet3 device in slot 0 */ + if (strcmp(object_get_typename(&func0->qdev.parent_obj), TYPE_VMXNET3)) { + pr_dbg("func0 type is %s\n", + object_get_typename(&func0->qdev.parent_obj)); + error_setg(errp, "Device on %x.0 must be %s", PCI_SLOT(pdev->devfn), + TYPE_VMXNET3); + return; + } + dev->func0 = VMXNET3(func0); + memdev_root = object_resolve_path("/objects", NULL); if (memdev_root) { object_child_foreach(memdev_root, pvrdma_check_ram_shared, &ram_shared);
Guest driver enforces it, we should also. Signed-off-by: Yuval Shaia <yuval.shaia@oracle.com> --- hw/rdma/vmw/pvrdma.h | 2 ++ hw/rdma/vmw/pvrdma_main.c | 12 ++++++++++++ 2 files changed, 14 insertions(+)