|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] xen/arm: smmuv1: Fixed stream matching register allocation
Hi Julien,
> On 30 Jun 2021, at 7:00 pm, Julien Grall <julien@xxxxxxx> wrote:
>
>
>
> On 30/06/2021 18:49, Rahul Singh wrote:
>> Hi Julien,
>
> Hi,
>
>>> On 30 Jun 2021, at 10:09 am, Julien Grall <julien@xxxxxxx> wrote:
>>>
>>> Hi Rahul,
>>>
>>> On 25/06/2021 17:37, Rahul Singh wrote:
>>>> SMR allocation should be based on the number of supported stream
>>>> matching register for each SMMU device.
>>>> Issue introduced by commit 5e08586afbb90b2e2d56c175c07db77a4afa873c
>>>> when backported the patches from Linux to XEN to fix the stream match
>>>> conflict issue when two devices have the same stream-id.
>>>> Acked-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
>>>> Tested-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
>>>> Signed-off-by: Rahul Singh <rahul.singh@xxxxxxx>
>>>> ---
>>>> xen/drivers/passthrough/arm/smmu.c | 3 ++-
>>>> 1 file changed, 2 insertions(+), 1 deletion(-)
>>>> diff --git a/xen/drivers/passthrough/arm/smmu.c
>>>> b/xen/drivers/passthrough/arm/smmu.c
>>>> index d9a3a0cbf6..da2cd457d7 100644
>>>> --- a/xen/drivers/passthrough/arm/smmu.c
>>>> +++ b/xen/drivers/passthrough/arm/smmu.c
>>>> @@ -149,6 +149,7 @@ typedef enum irqreturn irqreturn_t;
>>>> #define kzalloc(size, flags) _xzalloc(size, sizeof(void *))
>>>> #define devm_kzalloc(dev, size, flags) _xzalloc(size, sizeof(void *))
>>>> #define kmalloc_array(size, n, flags) _xmalloc_array(size,
>>>> sizeof(void *), n)
>>>> +#define kzalloc_array(size, n, flags) _xzalloc_array(size,
>>>> sizeof(void *), n)
>>>> static void __iomem *devm_ioremap_resource(struct device *dev,
>>>> struct resource *res)
>>>> @@ -2221,7 +2222,7 @@ static int arm_smmu_device_cfg_probe(struct
>>>> arm_smmu_device *smmu)
>>>> smmu->smr_mask_mask = smr >> SMR_MASK_SHIFT;
>>>> /* Zero-initialised to mark as invalid */
>>>> - smmu->smrs = devm_kzalloc(smmu->dev, sizeof(*smmu->smrs),
>>>> GFP_KERNEL);
>>>> + smmu->smrs = kzalloc_array(sizeof(*smmu->smrs), size,
>>>> GFP_KERNEL);
>>>
>>> I noticed this is already in... However, I am a bit puzzled into why this
>>> was switched devm_kzalloc() to kzalloc_array(). This doesn't matter for Xen
>>> as they are just wrappers to x*alloc() but a mention in the commit message
>>> would have been useful.
>> Yes we can use the devm_kzalloc(..) but then we have to pass
>> (sizeof(*smmu->smrs) * size ) as size argument to devm_kzalloc(..)
>> I thought for better code readability I will use kzalloc_array() as the
>> function name suggests we are allocating memory for an array.
>
> My point is devm_k*alloc() and k*alloc() are quite different on the paper.
> One will allocate memory for a given device while the other is unknown memory.
>
> It would have been better to call the function devm_kzalloc_array() to keep
> to keep the code coherent. Can you please send a patch to make the switch?
Ok. I will modify the code as per your request as below . I will use
devm_kcalloc(..) as this will be more coherent.
diff --git a/xen/drivers/passthrough/arm/smmu.c
b/xen/drivers/passthrough/arm/smmu.c
index da2cd457d7..658c40433c 100644
--- a/xen/drivers/passthrough/arm/smmu.c
+++ b/xen/drivers/passthrough/arm/smmu.c
@@ -149,7 +149,8 @@ typedef enum irqreturn irqreturn_t;
#define kzalloc(size, flags) _xzalloc(size, sizeof(void *))
#define devm_kzalloc(dev, size, flags) _xzalloc(size, sizeof(void *))
#define kmalloc_array(size, n, flags) _xmalloc_array(size, sizeof(void *), n)
-#define kzalloc_array(size, n, flags) _xzalloc_array(size, sizeof(void *), n)
+#define devm_kcalloc(dev, n, size, flags) \
+ _xzalloc_array(size, sizeof(void *), n)
static void __iomem *devm_ioremap_resource(struct device *dev,
struct resource *res)
@@ -2222,7 +2223,8 @@ static int arm_smmu_device_cfg_probe(struct
arm_smmu_device *smmu)
smmu->smr_mask_mask = smr >> SMR_MASK_SHIFT;
/* Zero-initialised to mark as invalid */
- smmu->smrs = kzalloc_array(sizeof(*smmu->smrs), size,
GFP_KERNEL);
+ smmu->smrs = devm_kcalloc(smmu->dev, size, sizeof(*smmu->smrs),
+ GFP_KERNEL);
if (!smmu->smrs)
return -ENOMEM;
Regards,
Rahul
>
> Cheers,
>
> --
> Julien Grall
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |