On 05/10/17 16:50, Alexey Kardashevskiy wrote: > The new callback will be called when a new VFIO IOMMU group is added. > > This should cause no behavioral change, the next patch will. > > Signed-off-by: Alexey Kardashevskiy <a...@ozlabs.ru>
What about this one, any conclusion yet? > --- > > This could be at the higher level - in MemoryRegionOps, makes sense? > > --- > include/exec/memory.h | 4 ++++ > hw/vfio/common.c | 15 +++++++++++++++ > 2 files changed, 19 insertions(+) > > diff --git a/include/exec/memory.h b/include/exec/memory.h > index 5ed4042f87..64e0b4fc96 100644 > --- a/include/exec/memory.h > +++ b/include/exec/memory.h > @@ -210,6 +210,10 @@ typedef struct IOMMUMemoryRegionClass { > IOMMUNotifierFlag new_flags); > /* Set this up to provide customized IOMMU replay function */ > void (*replay)(IOMMUMemoryRegion *iommu, IOMMUNotifier *notifier); > + > + /* Notifies IOMMUMR about attached VFIO IOMMU group */ > + void (*add_vfio_group)(IOMMUMemoryRegion *iommu_mr, int vfio_kvm_fd, > + int groupfd); > } IOMMUMemoryRegionClass; > > typedef struct CoalescedMemoryRange CoalescedMemoryRange; > diff --git a/hw/vfio/common.c b/hw/vfio/common.c > index 7b2924c0ef..9e861e0393 100644 > --- a/hw/vfio/common.c > +++ b/hw/vfio/common.c > @@ -481,6 +481,21 @@ static void vfio_listener_region_add(MemoryListener > *listener, > VFIOGuestIOMMU *giommu; > IOMMUMemoryRegion *iommu_mr = IOMMU_MEMORY_REGION(section->mr); > > +#ifdef CONFIG_KVM > + if (kvm_enabled()) { > + VFIOGroup *group; > + IOMMUMemoryRegionClass *imrc = > + IOMMU_MEMORY_REGION_GET_CLASS(iommu_mr); > + > + QLIST_FOREACH(group, &container->group_list, container_next) { > + if (imrc->add_vfio_group) { > + imrc->add_vfio_group(iommu_mr, vfio_kvm_device_fd, > + group->fd); > + } > + } > + } > +#endif > + > trace_vfio_listener_region_add_iommu(iova, end); > /* > * FIXME: For VFIO iommu types which have KVM acceleration to > -- Alexey