Messages in this thread | | | Date | Thu, 10 Feb 2022 09:19:50 +0800 | Subject | Re: [PATCH v1 1/1] iommu/vt-d: Don't cast parameter in for_each_set_bit() | From | Lu Baolu <> |
| |
Hi Andy,
On 2/10/22 1:49 AM, Andy Shevchenko wrote: > While in this particular case it would not be a (critical) issue, > the pattern itself is bad and error prone in case the location > of the parameter is changed. > > Don't cast parameter to unsigned long pointer in for_each_set_bit(). > Instead copy to a local variable on stack of a proper type and use. > > Fixes: 6ee1b77ba3ac ("iommu/vt-d: Add svm/sva invalidate function") > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> > --- > drivers/iommu/intel/iommu.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c > index 92fea3fbbb11..777e81b8f4f5 100644 > --- a/drivers/iommu/intel/iommu.c > +++ b/drivers/iommu/intel/iommu.c > @@ -4973,6 +4973,7 @@ intel_iommu_sva_invalidate(struct iommu_domain *domain, struct device *dev, > struct dmar_domain *dmar_domain = to_dmar_domain(domain); > struct device_domain_info *info; > struct intel_iommu *iommu; > + unsigned long cache_bits; > unsigned long flags; > int cache_type; > u8 bus, devfn; > @@ -5008,9 +5009,8 @@ intel_iommu_sva_invalidate(struct iommu_domain *domain, struct device *dev, > size = to_vtd_size(inv_info->granu.addr_info.granule_size, > inv_info->granu.addr_info.nb_granules); > > - for_each_set_bit(cache_type, > - (unsigned long *)&inv_info->cache, > - IOMMU_CACHE_INV_TYPE_NR) { > + cache_bits = inv_info->cache; > + for_each_set_bit(cache_type, &cache_bits, IOMMU_CACHE_INV_TYPE_NR) { > int granu = 0; > u64 pasid = 0; > u64 addr = 0;
Thanks for your patch. The function that you are changing becomes dead code (nobody uses it and there's no plan to use it anymore) now. I already have a patch to remove this function.
Best regards, baolu
| |