Message ID | 20230223065924.42503-4-jasowang@redhat.com |
---|---|
State | New |
Headers | show |
Series | Fix UNMAP notifier for intel-iommu | expand |
On 23/02/2023 07.59, Jason Wang wrote: > This patch introduces a new helper to unmap the range of a specific > IOMMU notifier. > > Signed-off-by: Jason Wang <jasowang@redhat.com> > --- > include/exec/memory.h | 10 ++++++++++ > softmmu/memory.c | 13 +++++++++++++ > 2 files changed, 23 insertions(+) > > diff --git a/include/exec/memory.h b/include/exec/memory.h > index 2e602a2fad..6fa0b071f0 100644 > --- a/include/exec/memory.h > +++ b/include/exec/memory.h > @@ -1731,6 +1731,16 @@ void memory_region_notify_iommu(IOMMUMemoryRegion *iommu_mr, > void memory_region_notify_iommu_one(IOMMUNotifier *notifier, > IOMMUTLBEvent *event); > > +/** > + * memory_region_unmap_iommu_notifier_range: notify a unmap for an IOMMU > + * translation that covers the > + * range of a notifier > + * > + * @notifier: the notifier to be notified > + */ > +void memory_region_unmap_iommu_notifier_range(IOMMUNotifier *n); FWIW, this causes warning during the build process for me now: ../include/exec/memory.h:1741: warning: Function parameter or member 'n' not described in 'memory_region_unmap_iommu_notifier_range' ../include/exec/memory.h:1741: warning: Excess function parameter 'notifier' description in 'memory_region_unmap_iommu_notifier_range' Thomas
On Thu, Feb 23, 2023 at 02:59:22PM +0800, Jason Wang wrote: > This patch introduces a new helper to unmap the range of a specific > IOMMU notifier. > > Signed-off-by: Jason Wang <jasowang@redhat.com> > --- > include/exec/memory.h | 10 ++++++++++ > softmmu/memory.c | 13 +++++++++++++ > 2 files changed, 23 insertions(+) > > diff --git a/include/exec/memory.h b/include/exec/memory.h > index 2e602a2fad..6fa0b071f0 100644 > --- a/include/exec/memory.h > +++ b/include/exec/memory.h > @@ -1731,6 +1731,16 @@ void memory_region_notify_iommu(IOMMUMemoryRegion *iommu_mr, > void memory_region_notify_iommu_one(IOMMUNotifier *notifier, > IOMMUTLBEvent *event); > > +/** > + * memory_region_unmap_iommu_notifier_range: notify a unmap for an IOMMU > + * translation that covers the > + * range of a notifier > + * > + * @notifier: the notifier to be notified > + */ > +void memory_region_unmap_iommu_notifier_range(IOMMUNotifier *n); > + > + > /** > * memory_region_register_iommu_notifier: register a notifier for changes to > * IOMMU translation entries. This causes doc warnings: /scm/qemu/docs/../include/exec/memory.h:1741: warning: Function parameter or member 'n' not described in 'memory_region_unmap_iommu_notifier_range' /scm/qemu/docs/../include/exec/memory.h:1741: warning: Excess function parameter 'notifier' description in 'memory_region_unmap_iommu_notifier_range' please fix. > diff --git a/softmmu/memory.c b/softmmu/memory.c > index 9d64efca26..ba43b4474e 100644 > --- a/softmmu/memory.c > +++ b/softmmu/memory.c > @@ -1996,6 +1996,19 @@ void memory_region_notify_iommu_one(IOMMUNotifier *notifier, > } > } > > +void memory_region_unmap_iommu_notifier_range(IOMMUNotifier *n) > +{ > + IOMMUTLBEvent event; > + > + event.type = IOMMU_NOTIFIER_UNMAP; > + event.entry.target_as = &address_space_memory; > + event.entry.iova = n->start; > + event.entry.perm = IOMMU_NONE; > + event.entry.addr_mask = n->end - n->start; > + > + memory_region_notify_iommu_one(n, &event); > +} > + > void memory_region_notify_iommu(IOMMUMemoryRegion *iommu_mr, > int iommu_idx, > IOMMUTLBEvent event) > -- > 2.25.1
On Wed, Mar 8, 2023 at 9:02 AM Michael S. Tsirkin <mst@redhat.com> wrote: > > On Thu, Feb 23, 2023 at 02:59:22PM +0800, Jason Wang wrote: > > This patch introduces a new helper to unmap the range of a specific > > IOMMU notifier. > > > > Signed-off-by: Jason Wang <jasowang@redhat.com> > > --- > > include/exec/memory.h | 10 ++++++++++ > > softmmu/memory.c | 13 +++++++++++++ > > 2 files changed, 23 insertions(+) > > > > diff --git a/include/exec/memory.h b/include/exec/memory.h > > index 2e602a2fad..6fa0b071f0 100644 > > --- a/include/exec/memory.h > > +++ b/include/exec/memory.h > > @@ -1731,6 +1731,16 @@ void memory_region_notify_iommu(IOMMUMemoryRegion *iommu_mr, > > void memory_region_notify_iommu_one(IOMMUNotifier *notifier, > > IOMMUTLBEvent *event); > > > > +/** > > + * memory_region_unmap_iommu_notifier_range: notify a unmap for an IOMMU > > + * translation that covers the > > + * range of a notifier > > + * > > + * @notifier: the notifier to be notified > > + */ > > +void memory_region_unmap_iommu_notifier_range(IOMMUNotifier *n); > > + > > + > > /** > > * memory_region_register_iommu_notifier: register a notifier for changes to > > * IOMMU translation entries. > > This causes doc warnings: > > /scm/qemu/docs/../include/exec/memory.h:1741: warning: Function parameter or member 'n' not described in 'memory_region_unmap_iommu_notifier_range' > /scm/qemu/docs/../include/exec/memory.h:1741: warning: Excess function parameter 'notifier' description in 'memory_region_unmap_iommu_notifier_range' > > > please fix. Will do. Thanks > > > > diff --git a/softmmu/memory.c b/softmmu/memory.c > > index 9d64efca26..ba43b4474e 100644 > > --- a/softmmu/memory.c > > +++ b/softmmu/memory.c > > @@ -1996,6 +1996,19 @@ void memory_region_notify_iommu_one(IOMMUNotifier *notifier, > > } > > } > > > > +void memory_region_unmap_iommu_notifier_range(IOMMUNotifier *n) > > +{ > > + IOMMUTLBEvent event; > > + > > + event.type = IOMMU_NOTIFIER_UNMAP; > > + event.entry.target_as = &address_space_memory; > > + event.entry.iova = n->start; > > + event.entry.perm = IOMMU_NONE; > > + event.entry.addr_mask = n->end - n->start; > > + > > + memory_region_notify_iommu_one(n, &event); > > +} > > + > > void memory_region_notify_iommu(IOMMUMemoryRegion *iommu_mr, > > int iommu_idx, > > IOMMUTLBEvent event) > > -- > > 2.25.1 >
diff --git a/include/exec/memory.h b/include/exec/memory.h index 2e602a2fad..6fa0b071f0 100644 --- a/include/exec/memory.h +++ b/include/exec/memory.h @@ -1731,6 +1731,16 @@ void memory_region_notify_iommu(IOMMUMemoryRegion *iommu_mr, void memory_region_notify_iommu_one(IOMMUNotifier *notifier, IOMMUTLBEvent *event); +/** + * memory_region_unmap_iommu_notifier_range: notify a unmap for an IOMMU + * translation that covers the + * range of a notifier + * + * @notifier: the notifier to be notified + */ +void memory_region_unmap_iommu_notifier_range(IOMMUNotifier *n); + + /** * memory_region_register_iommu_notifier: register a notifier for changes to * IOMMU translation entries. diff --git a/softmmu/memory.c b/softmmu/memory.c index 9d64efca26..ba43b4474e 100644 --- a/softmmu/memory.c +++ b/softmmu/memory.c @@ -1996,6 +1996,19 @@ void memory_region_notify_iommu_one(IOMMUNotifier *notifier, } } +void memory_region_unmap_iommu_notifier_range(IOMMUNotifier *n) +{ + IOMMUTLBEvent event; + + event.type = IOMMU_NOTIFIER_UNMAP; + event.entry.target_as = &address_space_memory; + event.entry.iova = n->start; + event.entry.perm = IOMMU_NONE; + event.entry.addr_mask = n->end - n->start; + + memory_region_notify_iommu_one(n, &event); +} + void memory_region_notify_iommu(IOMMUMemoryRegion *iommu_mr, int iommu_idx, IOMMUTLBEvent event)
This patch introduces a new helper to unmap the range of a specific IOMMU notifier. Signed-off-by: Jason Wang <jasowang@redhat.com> --- include/exec/memory.h | 10 ++++++++++ softmmu/memory.c | 13 +++++++++++++ 2 files changed, 23 insertions(+)