return 0;
 }
 
+/*
+ * vfio_ap_mdev_iommu_notifier: IOMMU notifier callback
+ *
+ * @nb: The notifier block
+ * @action: Action to be taken
+ * @data: data associated with the request
+ *
+ * For an UNMAP request, unpin the guest IOVA (the NIB guest address we
+ * pinned before). Other requests are ignored.
+ *
+ */
+static int vfio_ap_mdev_iommu_notifier(struct notifier_block *nb,
+                                      unsigned long action, void *data)
+{
+       struct ap_matrix_mdev *matrix_mdev;
+
+       matrix_mdev = container_of(nb, struct ap_matrix_mdev, iommu_notifier);
+
+       if (action == VFIO_IOMMU_NOTIFY_DMA_UNMAP) {
+               struct vfio_iommu_type1_dma_unmap *unmap = data;
+               unsigned long g_pfn = unmap->iova >> PAGE_SHIFT;
+
+               vfio_unpin_pages(mdev_dev(matrix_mdev->mdev), &g_pfn, 1);
+               return NOTIFY_OK;
+       }
+
+       return NOTIFY_DONE;
+}
+
 static int vfio_ap_mdev_group_notifier(struct notifier_block *nb,
                                       unsigned long action, void *data)
 {
                return ret;
        }
 
-       return 0;
+       matrix_mdev->iommu_notifier.notifier_call = vfio_ap_mdev_iommu_notifier;
+       events = VFIO_IOMMU_NOTIFY_DMA_UNMAP;
+       ret = vfio_register_notifier(mdev_dev(mdev), VFIO_IOMMU_NOTIFY,
+                                    &events, &matrix_mdev->iommu_notifier);
+       if (!ret)
+               return ret;
+
+       vfio_unregister_notifier(mdev_dev(mdev), VFIO_GROUP_NOTIFY,
+                                &matrix_mdev->group_notifier);
+       module_put(THIS_MODULE);
+       return ret;
 }
 
 static void vfio_ap_mdev_release(struct mdev_device *mdev)
                kvm_arch_crypto_clear_masks(matrix_mdev->kvm);
 
        vfio_ap_mdev_reset_queues(mdev);
+       vfio_unregister_notifier(mdev_dev(mdev), VFIO_IOMMU_NOTIFY,
+                                &matrix_mdev->iommu_notifier);
        vfio_unregister_notifier(mdev_dev(mdev), VFIO_GROUP_NOTIFY,
                                 &matrix_mdev->group_notifier);
        matrix_mdev->kvm = NULL;