On Thu, Aug 29, 2019 at 01:17:48PM +0200, Thierry Reding wrote: > From: Thierry Reding <treding@xxxxxxxxxx> > > Implement a generic function for removing reserved regions. This can be > used by drivers that don't do anything fancy with these regions other > than allocating memory for them. > > Signed-off-by: Thierry Reding <treding@xxxxxxxxxx> > --- > drivers/iommu/iommu.c | 19 +++++++++++++++++++ > include/linux/iommu.h | 2 ++ > 2 files changed, 21 insertions(+) > > diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c > index 0f585b614657..73a2a6b13507 100644 > --- a/drivers/iommu/iommu.c > +++ b/drivers/iommu/iommu.c > @@ -2170,6 +2170,25 @@ void iommu_put_resv_regions(struct device *dev, struct list_head *list) > ops->put_resv_regions(dev, list); > } > > +/** > + * iommu_put_resv_regions_simple - Reserved region driver helper > + * @dev: device for which to free reserved regions > + * @list: reserved region list for device > + * > + * IOMMU drivers can use this to implement their .put_resv_regions() callback > + * for simple reservations. Memory allocated for each reserved region will be > + * freed. If an IOMMU driver allocates additional resources per region, it is > + * going to have to implement a custom callback. > + */ > +void iommu_put_resv_regions_simple(struct device *dev, struct list_head *list) > +{ > + struct iommu_resv_region *entry, *next; > + > + list_for_each_entry_safe(entry, next, list, list) > + kfree(entry); > +} > +EXPORT_SYMBOL(iommu_put_resv_regions_simple); Can you call this directly from iommu_put_resv_regions() if the function pointer in ops is NULL? That would save having to plumb the default callback into a bunch of drivers. Will _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization