[PATCH] iommu/vt-d: Use bitmap_zalloc() when applicable

Christophe JAILLET posted 1 patch 4 years, 6 months ago
drivers/iommu/intel/iommu.c | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
[PATCH] iommu/vt-d: Use bitmap_zalloc() when applicable
Posted by Christophe JAILLET 4 years, 6 months ago
'ommu->domain_ids' is a bitmap. So use 'bitmap_zalloc()' to simplify
code and improve the semantic, instead of hand writing it.

Also change the corresponding 'kfree()' into 'bitmap_free()' to keep
consistency.

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
---
 drivers/iommu/intel/iommu.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
index b6a8f3282411..4acc97765209 100644
--- a/drivers/iommu/intel/iommu.c
+++ b/drivers/iommu/intel/iommu.c
@@ -1878,17 +1878,16 @@ static void iommu_disable_translation(struct intel_iommu *iommu)
 
 static int iommu_init_domains(struct intel_iommu *iommu)
 {
-	u32 ndomains, nlongs;
+	u32 ndomains;
 	size_t size;
 
 	ndomains = cap_ndoms(iommu->cap);
 	pr_debug("%s: Number of Domains supported <%d>\n",
 		 iommu->name, ndomains);
-	nlongs = BITS_TO_LONGS(ndomains);
 
 	spin_lock_init(&iommu->lock);
 
-	iommu->domain_ids = kcalloc(nlongs, sizeof(unsigned long), GFP_KERNEL);
+	iommu->domain_ids = bitmap_zalloc(ndomains, GFP_KERNEL);
 	if (!iommu->domain_ids)
 		return -ENOMEM;
 
@@ -1903,7 +1902,7 @@ static int iommu_init_domains(struct intel_iommu *iommu)
 	if (!iommu->domains || !iommu->domains[0]) {
 		pr_err("%s: Allocating domain array failed\n",
 		       iommu->name);
-		kfree(iommu->domain_ids);
+		bitmap_free(iommu->domain_ids);
 		kfree(iommu->domains);
 		iommu->domain_ids = NULL;
 		iommu->domains    = NULL;
@@ -1964,7 +1963,7 @@ static void free_dmar_iommu(struct intel_iommu *iommu)
 		for (i = 0; i < elems; i++)
 			kfree(iommu->domains[i]);
 		kfree(iommu->domains);
-		kfree(iommu->domain_ids);
+		bitmap_free(iommu->domain_ids);
 		iommu->domains = NULL;
 		iommu->domain_ids = NULL;
 	}
-- 
2.30.2

Re: [PATCH] iommu/vt-d: Use bitmap_zalloc() when applicable
Posted by Lu Baolu 4 years, 6 months ago
On 2021/12/18 5:58, Christophe JAILLET wrote:
> 'ommu->domain_ids' is a bitmap. So use 'bitmap_zalloc()' to simplify
> code and improve the semantic, instead of hand writing it.
> 
> Also change the corresponding 'kfree()' into 'bitmap_free()' to keep
> consistency.
> 
> Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
> ---
>   drivers/iommu/intel/iommu.c | 9 ++++-----
>   1 file changed, 4 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
> index b6a8f3282411..4acc97765209 100644
> --- a/drivers/iommu/intel/iommu.c
> +++ b/drivers/iommu/intel/iommu.c
> @@ -1878,17 +1878,16 @@ static void iommu_disable_translation(struct intel_iommu *iommu)
>   
>   static int iommu_init_domains(struct intel_iommu *iommu)
>   {
> -	u32 ndomains, nlongs;
> +	u32 ndomains;
>   	size_t size;
>   
>   	ndomains = cap_ndoms(iommu->cap);
>   	pr_debug("%s: Number of Domains supported <%d>\n",
>   		 iommu->name, ndomains);
> -	nlongs = BITS_TO_LONGS(ndomains);
>   
>   	spin_lock_init(&iommu->lock);
>   
> -	iommu->domain_ids = kcalloc(nlongs, sizeof(unsigned long), GFP_KERNEL);
> +	iommu->domain_ids = bitmap_zalloc(ndomains, GFP_KERNEL);
>   	if (!iommu->domain_ids)
>   		return -ENOMEM;
>   
> @@ -1903,7 +1902,7 @@ static int iommu_init_domains(struct intel_iommu *iommu)
>   	if (!iommu->domains || !iommu->domains[0]) {
>   		pr_err("%s: Allocating domain array failed\n",
>   		       iommu->name);
> -		kfree(iommu->domain_ids);
> +		bitmap_free(iommu->domain_ids);
>   		kfree(iommu->domains);
>   		iommu->domain_ids = NULL;
>   		iommu->domains    = NULL;
> @@ -1964,7 +1963,7 @@ static void free_dmar_iommu(struct intel_iommu *iommu)
>   		for (i = 0; i < elems; i++)
>   			kfree(iommu->domains[i]);
>   		kfree(iommu->domains);
> -		kfree(iommu->domain_ids);
> +		bitmap_free(iommu->domain_ids);
>   		iommu->domains = NULL;
>   		iommu->domain_ids = NULL;
>   	}

This patch has been merged to Joerg's tree through

https://lore.kernel.org/linux-iommu/20211217083817.1745419-2-baolu.lu@linux.intel.com/

Are there any extra changes in this one?

Best regards,
baolu
Re: [PATCH] iommu/vt-d: Use bitmap_zalloc() when applicable
Posted by Christophe JAILLET 4 years, 6 months ago
Le 18/12/2021 à 06:56, Lu Baolu a écrit :
> On 2021/12/18 5:58, Christophe JAILLET wrote:
>> 'ommu->domain_ids' is a bitmap. So use 'bitmap_zalloc()' to simplify
>> code and improve the semantic, instead of hand writing it.
>>
>> Also change the corresponding 'kfree()' into 'bitmap_free()' to keep
>> consistency.
>>
>> Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
>> ---
>>   drivers/iommu/intel/iommu.c | 9 ++++-----
>>   1 file changed, 4 insertions(+), 5 deletions(-)
>>
>> diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
>> index b6a8f3282411..4acc97765209 100644
>> --- a/drivers/iommu/intel/iommu.c
>> +++ b/drivers/iommu/intel/iommu.c
>> @@ -1878,17 +1878,16 @@ static void iommu_disable_translation(struct 
>> intel_iommu *iommu)
>>   static int iommu_init_domains(struct intel_iommu *iommu)
>>   {
>> -    u32 ndomains, nlongs;
>> +    u32 ndomains;
>>       size_t size;
>>       ndomains = cap_ndoms(iommu->cap);
>>       pr_debug("%s: Number of Domains supported <%d>\n",
>>            iommu->name, ndomains);
>> -    nlongs = BITS_TO_LONGS(ndomains);
>>       spin_lock_init(&iommu->lock);
>> -    iommu->domain_ids = kcalloc(nlongs, sizeof(unsigned long), 
>> GFP_KERNEL);
>> +    iommu->domain_ids = bitmap_zalloc(ndomains, GFP_KERNEL);
>>       if (!iommu->domain_ids)
>>           return -ENOMEM;
>> @@ -1903,7 +1902,7 @@ static int iommu_init_domains(struct intel_iommu 
>> *iommu)
>>       if (!iommu->domains || !iommu->domains[0]) {
>>           pr_err("%s: Allocating domain array failed\n",
>>                  iommu->name);
>> -        kfree(iommu->domain_ids);
>> +        bitmap_free(iommu->domain_ids);
>>           kfree(iommu->domains);
>>           iommu->domain_ids = NULL;
>>           iommu->domains    = NULL;
>> @@ -1964,7 +1963,7 @@ static void free_dmar_iommu(struct intel_iommu 
>> *iommu)
>>           for (i = 0; i < elems; i++)
>>               kfree(iommu->domains[i]);
>>           kfree(iommu->domains);
>> -        kfree(iommu->domain_ids);
>> +        bitmap_free(iommu->domain_ids);
>>           iommu->domains = NULL;
>>           iommu->domain_ids = NULL;
>>       }
> 
> This patch has been merged to Joerg's tree through
> 
> https://lore.kernel.org/linux-iommu/20211217083817.1745419-2-baolu.lu@linux.intel.com/ 
> 
> 
> Are there any extra changes in this one?

No, this is the same. Sorry for the duplicate.

CJ

> 
> Best regards,
> baolu
>