hw/pvrdma: Make sure PCI function 0 is vmxnet3
Guest driver enforces it, we should also. Signed-off-by: Yuval Shaia <yuval.shaia@oracle.com> Reviewed-by: Marcel Apfelbaum <marcel.apfelbaum@gmail.com> Signed-off-by: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
This commit is contained in:
parent
317639aafd
commit
d961ead16e
|
@ -20,6 +20,7 @@
|
||||||
#include "hw/pci/pci.h"
|
#include "hw/pci/pci.h"
|
||||||
#include "hw/pci/msix.h"
|
#include "hw/pci/msix.h"
|
||||||
#include "chardev/char-fe.h"
|
#include "chardev/char-fe.h"
|
||||||
|
#include "hw/net/vmxnet3_defs.h"
|
||||||
|
|
||||||
#include "../rdma_backend_defs.h"
|
#include "../rdma_backend_defs.h"
|
||||||
#include "../rdma_rm_defs.h"
|
#include "../rdma_rm_defs.h"
|
||||||
|
@ -85,6 +86,7 @@ typedef struct PVRDMADev {
|
||||||
RdmaBackendDev backend_dev;
|
RdmaBackendDev backend_dev;
|
||||||
RdmaDeviceResources rdma_dev_res;
|
RdmaDeviceResources rdma_dev_res;
|
||||||
CharBackend mad_chr;
|
CharBackend mad_chr;
|
||||||
|
VMXNET3State *func0;
|
||||||
} PVRDMADev;
|
} PVRDMADev;
|
||||||
#define PVRDMA_DEV(dev) OBJECT_CHECK(PVRDMADev, (dev), PVRDMA_HW_NAME)
|
#define PVRDMA_DEV(dev) OBJECT_CHECK(PVRDMADev, (dev), PVRDMA_HW_NAME)
|
||||||
|
|
||||||
|
|
|
@ -565,6 +565,7 @@ static void pvrdma_realize(PCIDevice *pdev, Error **errp)
|
||||||
PVRDMADev *dev = PVRDMA_DEV(pdev);
|
PVRDMADev *dev = PVRDMA_DEV(pdev);
|
||||||
Object *memdev_root;
|
Object *memdev_root;
|
||||||
bool ram_shared = false;
|
bool ram_shared = false;
|
||||||
|
PCIDevice *func0;
|
||||||
|
|
||||||
init_pr_dbg();
|
init_pr_dbg();
|
||||||
|
|
||||||
|
@ -576,6 +577,17 @@ static void pvrdma_realize(PCIDevice *pdev, Error **errp)
|
||||||
return;
|
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);
|
memdev_root = object_resolve_path("/objects", NULL);
|
||||||
if (memdev_root) {
|
if (memdev_root) {
|
||||||
object_child_foreach(memdev_root, pvrdma_check_ram_shared, &ram_shared);
|
object_child_foreach(memdev_root, pvrdma_check_ram_shared, &ram_shared);
|
||||||
|
|
Loading…
Reference in a new issue