On 11/13/18 9:13 AM, Yuval Shaia wrote:
In order to clean some external resources such as GIDs, QPs etc,
register to receive notification when VM is shutdown.

Signed-off-by: Yuval Shaia <yuval.sh...@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 10a3c4fb7c..ffae36986e 100644
--- a/hw/rdma/vmw/pvrdma.h
+++ b/hw/rdma/vmw/pvrdma.h
@@ -17,6 +17,7 @@
  #define PVRDMA_PVRDMA_H
#include "qemu/units.h"
+#include "qemu/notify.h"
  #include "hw/pci/pci.h"
  #include "hw/pci/msix.h"
  #include "chardev/char-fe.h"
@@ -87,6 +88,7 @@ typedef struct PVRDMADev {
      RdmaDeviceResources rdma_dev_res;
      CharBackend mad_chr;
      VMXNET3State *func0;
+    Notifier shutdown_notifier;
  } 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 95e9322b7c..45a59cddf9 100644
--- a/hw/rdma/vmw/pvrdma_main.c
+++ b/hw/rdma/vmw/pvrdma_main.c
@@ -24,6 +24,7 @@
  #include "hw/qdev-properties.h"
  #include "cpu.h"
  #include "trace.h"
+#include "sysemu/sysemu.h"
#include "../rdma_rm.h"
  #include "../rdma_backend.h"
@@ -559,6 +560,14 @@ static int pvrdma_check_ram_shared(Object *obj, void 
*opaque)
      return 0;
  }
+static void pvrdma_shutdown_notifier(Notifier *n, void *opaque)
+{
+    PVRDMADev *dev = container_of(n, PVRDMADev, shutdown_notifier);
+    PCIDevice *pci_dev = PCI_DEVICE(dev);
+
+    pvrdma_fini(pci_dev);
+}
+
  static void pvrdma_realize(PCIDevice *pdev, Error **errp)
  {
      int rc;
@@ -623,6 +632,9 @@ static void pvrdma_realize(PCIDevice *pdev, Error **errp)
          goto out;
      }
+ dev->shutdown_notifier.notify = pvrdma_shutdown_notifier;
+    qemu_register_shutdown_notifier(&dev->shutdown_notifier);
+
  out:
      if (rc) {
          error_append_hint(errp, "Device fail to load\n");

Reviewed-by: Marcel Apfelbaum<marcel.apfelb...@gmail.com>

Thanks,
Marcel


Reply via email to