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