Re: [PATCH v11 1/9] iommu: Introduce a callback to struct iommu_resv_region

Lu Baolu
2022-04-23T02:05:02Z

On 2022/4/23 00:28, Shameer Kolothum via iommu wrote:
> diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
> index f2c45b85b9fc..ffcfa684e80c 100644
> --- a/drivers/iommu/iommu.c
> +++ b/drivers/iommu/iommu.c
> @@ -2597,16 +2597,22 @@ void iommu_put_resv_regions(struct device *dev, struct list_head *list)
> * @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.
> + * for simple reservations. If a per region callback is provided that will be
> + * used to free all memory allocations associated with the reserved region or
> + * else just free up the memory for the regions. If an IOMMU driver allocates
> + * additional resources per region, it is going to have to implement a custom
> + * callback.
> */
> void generic_iommu_put_resv_regions(struct device *dev, struct list_head *list)
> {
> struct iommu_resv_region *entry, *next;
>
> - list_for_each_entry_safe(entry, next, list, list)
> - kfree(entry);
> + list_for_each_entry_safe(entry, next, list, list) {
> + if (entry->free)
> + entry->free(dev, entry);
> + else
> + kfree(entry);
> + }
> }
> EXPORT_SYMBOL(generic_iommu_put_resv_regions);

The generic_iommu_put_resv_regions() itself is a callback. Why bothering
adding another callback from the same iommu driver in it? Or, you are
going to remove the put_resv_regions from the iommu ops?

Best regards,
baolu