RE: [PATCH v7 02/16] iommu/smmu: Report empty domain nesting info

2021-03-03 Thread Liu, Yi L
Hi Eric,

> From: Auger Eric 
> Sent: Friday, February 12, 2021 5:58 PM
> 
> Hi Vivek, Yi,
> 
> On 2/12/21 8:14 AM, Vivek Gautam wrote:
> > Hi Yi,
> >
> >
> > On Sat, Jan 23, 2021 at 2:29 PM Liu, Yi L  wrote:
> >>
> >> Hi Eric,
> >>
> >>> From: Auger Eric 
> >>> Sent: Tuesday, January 19, 2021 6:03 PM
> >>>
> >>> Hi Yi, Vivek,
> >>>
> >> [...]
>  I see. I think there needs a change in the code there. Should also expect
>  a nesting_info returned instead of an int anymore. @Eric, how about your
>  opinion?
> 
>  domain = iommu_get_domain_for_dev(>pdev->dev);
>  ret = iommu_domain_get_attr(domain, DOMAIN_ATTR_NESTING,
> >>> );
>  if (ret || !(info.features & IOMMU_NESTING_FEAT_PAGE_RESP)) {
>  /*
>   * No need go futher as no page request service support.
>   */
>  return 0;
>  }
> >>> Sure I think it is "just" a matter of synchro between the 2 series. Yi,
> >>
> >> exactly.
> >>
> >>> do you have plans to respin part of
> >>> [PATCH v7 00/16] vfio: expose virtual Shared Virtual Addressing to VMs
> >>> or would you allow me to embed this patch in my series.
> >>
> >> My v7 hasn’t touch the prq change yet. So I think it's better for you to
> >> embed it to  your series. ^_^>>
> >
> > Can you please let me know if you have an updated series of these
> > patches? It will help me to work with virtio-iommu/arm side changes.
> 
> As per the previous discussion, I plan to take those 2 patches in my
> SMMUv3 nested stage series:
> 
> [PATCH v7 01/16] iommu: Report domain nesting info
> [PATCH v7 02/16] iommu/smmu: Report empty domain nesting info
> 
> we need to upgrade both since we do not want to report an empty nesting
> info anymore, for arm.

sorry for the late response. I've sent out the updated version. Also,
yeah, please feel free to take the patch in your series.

https://lore.kernel.org/linux-iommu/20210302203545.436623-2-yi.l@intel.com/

Regards,
Yi Liu

> Thanks
> 
> Eric
> >
> > Thanks & regards
> > Vivek
> >

___
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Re: [PATCH v7 02/16] iommu/smmu: Report empty domain nesting info

2021-02-12 Thread Vivek Kumar Gautam

Hi Eric,


On 2/12/21 3:48 PM, Vivek Kumar Gautam wrote:

Hi Eric,


On 2/12/21 3:27 PM, Auger Eric wrote:

Hi Vivek, Yi,

On 2/12/21 8:14 AM, Vivek Gautam wrote:

Hi Yi,


On Sat, Jan 23, 2021 at 2:29 PM Liu, Yi L  wrote:


Hi Eric,


From: Auger Eric 
Sent: Tuesday, January 19, 2021 6:03 PM

Hi Yi, Vivek,


[...]

I see. I think there needs a change in the code there. Should also
expect
a nesting_info returned instead of an int anymore. @Eric, how
about your
opinion?

 domain = iommu_get_domain_for_dev(>pdev->dev);
 ret = iommu_domain_get_attr(domain, DOMAIN_ATTR_NESTING,

);

 if (ret || !(info.features & IOMMU_NESTING_FEAT_PAGE_RESP)) {
 /*
  * No need go futher as no page request service support.
  */
 return 0;
 }

Sure I think it is "just" a matter of synchro between the 2 series.
Yi,


exactly.


do you have plans to respin part of
[PATCH v7 00/16] vfio: expose virtual Shared Virtual Addressing to VMs
or would you allow me to embed this patch in my series.


My v7 hasn’t touch the prq change yet. So I think it's better for
you to
embed it to  your series. ^_^>>


Can you please let me know if you have an updated series of these
patches? It will help me to work with virtio-iommu/arm side changes.


As per the previous discussion, I plan to take those 2 patches in my
SMMUv3 nested stage series:

[PATCH v7 01/16] iommu: Report domain nesting info
[PATCH v7 02/16] iommu/smmu: Report empty domain nesting info

we need to upgrade both since we do not want to report an empty nesting
info anymore, for arm.


Absolutely. Let me send the couple of patches that I have been using,
that add arm configuration.


Posted the couple of patches that I have been using -

https://lore.kernel.org/linux-iommu/20210212105859.8445-1-vivek.gau...@arm.com/T/#t


Thanks & regards
Vivek



Best regards
Vivek



Thanks

Eric


Thanks & regards
Vivek




IMPORTANT NOTICE: The contents of this email and any attachments are 
confidential and may also be privileged. If you are not the intended recipient, 
please notify the sender immediately and do not disclose the contents to any 
other person, use it for any purpose, or store or copy the information in any 
medium. Thank you.
___
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Re: [PATCH v7 02/16] iommu/smmu: Report empty domain nesting info

2021-02-12 Thread Vivek Kumar Gautam

Hi Eric,


On 2/12/21 3:27 PM, Auger Eric wrote:

Hi Vivek, Yi,

On 2/12/21 8:14 AM, Vivek Gautam wrote:

Hi Yi,


On Sat, Jan 23, 2021 at 2:29 PM Liu, Yi L  wrote:


Hi Eric,


From: Auger Eric 
Sent: Tuesday, January 19, 2021 6:03 PM

Hi Yi, Vivek,


[...]

I see. I think there needs a change in the code there. Should also expect
a nesting_info returned instead of an int anymore. @Eric, how about your
opinion?

 domain = iommu_get_domain_for_dev(>pdev->dev);
 ret = iommu_domain_get_attr(domain, DOMAIN_ATTR_NESTING,

);

 if (ret || !(info.features & IOMMU_NESTING_FEAT_PAGE_RESP)) {
 /*
  * No need go futher as no page request service support.
  */
 return 0;
 }

Sure I think it is "just" a matter of synchro between the 2 series. Yi,


exactly.


do you have plans to respin part of
[PATCH v7 00/16] vfio: expose virtual Shared Virtual Addressing to VMs
or would you allow me to embed this patch in my series.


My v7 hasn’t touch the prq change yet. So I think it's better for you to
embed it to  your series. ^_^>>


Can you please let me know if you have an updated series of these
patches? It will help me to work with virtio-iommu/arm side changes.


As per the previous discussion, I plan to take those 2 patches in my
SMMUv3 nested stage series:

[PATCH v7 01/16] iommu: Report domain nesting info
[PATCH v7 02/16] iommu/smmu: Report empty domain nesting info

we need to upgrade both since we do not want to report an empty nesting
info anymore, for arm.


Absolutely. Let me send the couple of patches that I have been using,
that add arm configuration.

Best regards
Vivek



Thanks

Eric


Thanks & regards
Vivek




IMPORTANT NOTICE: The contents of this email and any attachments are 
confidential and may also be privileged. If you are not the intended recipient, 
please notify the sender immediately and do not disclose the contents to any 
other person, use it for any purpose, or store or copy the information in any 
medium. Thank you.
___
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Re: [PATCH v7 02/16] iommu/smmu: Report empty domain nesting info

2021-02-12 Thread Auger Eric
Hi Vivek, Yi,

On 2/12/21 8:14 AM, Vivek Gautam wrote:
> Hi Yi,
> 
> 
> On Sat, Jan 23, 2021 at 2:29 PM Liu, Yi L  wrote:
>>
>> Hi Eric,
>>
>>> From: Auger Eric 
>>> Sent: Tuesday, January 19, 2021 6:03 PM
>>>
>>> Hi Yi, Vivek,
>>>
>> [...]
 I see. I think there needs a change in the code there. Should also expect
 a nesting_info returned instead of an int anymore. @Eric, how about your
 opinion?

 domain = iommu_get_domain_for_dev(>pdev->dev);
 ret = iommu_domain_get_attr(domain, DOMAIN_ATTR_NESTING,
>>> );
 if (ret || !(info.features & IOMMU_NESTING_FEAT_PAGE_RESP)) {
 /*
  * No need go futher as no page request service support.
  */
 return 0;
 }
>>> Sure I think it is "just" a matter of synchro between the 2 series. Yi,
>>
>> exactly.
>>
>>> do you have plans to respin part of
>>> [PATCH v7 00/16] vfio: expose virtual Shared Virtual Addressing to VMs
>>> or would you allow me to embed this patch in my series.
>>
>> My v7 hasn’t touch the prq change yet. So I think it's better for you to
>> embed it to  your series. ^_^>>
> 
> Can you please let me know if you have an updated series of these
> patches? It will help me to work with virtio-iommu/arm side changes.

As per the previous discussion, I plan to take those 2 patches in my
SMMUv3 nested stage series:

[PATCH v7 01/16] iommu: Report domain nesting info
[PATCH v7 02/16] iommu/smmu: Report empty domain nesting info

we need to upgrade both since we do not want to report an empty nesting
info anymore, for arm.

Thanks

Eric
> 
> Thanks & regards
> Vivek
> 

___
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Re: [PATCH v7 02/16] iommu/smmu: Report empty domain nesting info

2021-02-11 Thread Vivek Gautam
Hi Yi,


On Sat, Jan 23, 2021 at 2:29 PM Liu, Yi L  wrote:
>
> Hi Eric,
>
> > From: Auger Eric 
> > Sent: Tuesday, January 19, 2021 6:03 PM
> >
> > Hi Yi, Vivek,
> >
> [...]
> > > I see. I think there needs a change in the code there. Should also expect
> > > a nesting_info returned instead of an int anymore. @Eric, how about your
> > > opinion?
> > >
> > > domain = iommu_get_domain_for_dev(>pdev->dev);
> > > ret = iommu_domain_get_attr(domain, DOMAIN_ATTR_NESTING,
> > );
> > > if (ret || !(info.features & IOMMU_NESTING_FEAT_PAGE_RESP)) {
> > > /*
> > >  * No need go futher as no page request service support.
> > >  */
> > > return 0;
> > > }
> > Sure I think it is "just" a matter of synchro between the 2 series. Yi,
>
> exactly.
>
> > do you have plans to respin part of
> > [PATCH v7 00/16] vfio: expose virtual Shared Virtual Addressing to VMs
> > or would you allow me to embed this patch in my series.
>
> My v7 hasn’t touch the prq change yet. So I think it's better for you to
> embed it to  your series. ^_^
>

Can you please let me know if you have an updated series of these
patches? It will help me to work with virtio-iommu/arm side changes.

Thanks & regards
Vivek
___
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

RE: [PATCH v7 02/16] iommu/smmu: Report empty domain nesting info

2021-01-23 Thread Liu, Yi L
Hi Eric,

> From: Auger Eric 
> Sent: Tuesday, January 19, 2021 6:03 PM
> 
> Hi Yi, Vivek,
> 
[...]
> > I see. I think there needs a change in the code there. Should also expect
> > a nesting_info returned instead of an int anymore. @Eric, how about your
> > opinion?
> >
> > domain = iommu_get_domain_for_dev(>pdev->dev);
> > ret = iommu_domain_get_attr(domain, DOMAIN_ATTR_NESTING,
> );
> > if (ret || !(info.features & IOMMU_NESTING_FEAT_PAGE_RESP)) {
> > /*
> >  * No need go futher as no page request service support.
> >  */
> > return 0;
> > }
> Sure I think it is "just" a matter of synchro between the 2 series. Yi,

exactly.

> do you have plans to respin part of
> [PATCH v7 00/16] vfio: expose virtual Shared Virtual Addressing to VMs
> or would you allow me to embed this patch in my series.

My v7 hasn’t touch the prq change yet. So I think it's better for you to
embed it to  your series. ^_^

Regards,
Yi Liu

___
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Re: [PATCH v7 02/16] iommu/smmu: Report empty domain nesting info

2021-01-19 Thread Auger Eric
Hi Yi, Vivek,

On 1/13/21 6:56 AM, Liu, Yi L wrote:
> Hi Vivek,
> 
>> From: Vivek Gautam 
>> Sent: Tuesday, January 12, 2021 7:06 PM
>>
>> Hi Yi,
>>
>>
>> On Tue, Jan 12, 2021 at 2:51 PM Liu, Yi L  wrote:
>>>
>>> Hi Vivek,
>>>
 From: Vivek Gautam 
 Sent: Tuesday, January 12, 2021 2:50 PM

 Hi Yi,


 On Thu, Sep 10, 2020 at 4:13 PM Liu Yi L  wrote:
>
> This patch is added as instead of returning a boolean for
 DOMAIN_ATTR_NESTING,
> iommu_domain_get_attr() should return an iommu_nesting_info
>> handle.
 For
> now, return an empty nesting info struct for now as true nesting is not
> yet supported by the SMMUs.
>
> Cc: Will Deacon 
> Cc: Robin Murphy 
> Cc: Eric Auger 
> Cc: Jean-Philippe Brucker 
> Suggested-by: Jean-Philippe Brucker 
> Signed-off-by: Liu Yi L 
> Signed-off-by: Jacob Pan 
> Reviewed-by: Eric Auger 
> ---
> v5 -> v6:
> *) add review-by from Eric Auger.
>
> v4 -> v5:
> *) address comments from Eric Auger.
> ---
>  drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 29
 +++--
>  drivers/iommu/arm/arm-smmu/arm-smmu.c   | 29
 +++--
>  2 files changed, 54 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
 b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> index 7196207..016e2e5 100644
> --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> @@ -3019,6 +3019,32 @@ static struct iommu_group
 *arm_smmu_device_group(struct device *dev)
> return group;
>  }
>
> +static int arm_smmu_domain_nesting_info(struct
>> arm_smmu_domain
 *smmu_domain,
> +   void *data)
> +{
> +   struct iommu_nesting_info *info = (struct iommu_nesting_info
 *)data;
> +   unsigned int size;
> +
> +   if (!info || smmu_domain->stage !=
>> ARM_SMMU_DOMAIN_NESTED)
> +   return -ENODEV;
> +
> +   size = sizeof(struct iommu_nesting_info);
> +
> +   /*
> +* if provided buffer size is smaller than expected, should
> +* return 0 and also the expected buffer size to caller.
> +*/
> +   if (info->argsz < size) {
> +   info->argsz = size;
> +   return 0;
> +   }
> +
> +   /* report an empty iommu_nesting_info for now */
> +   memset(info, 0x0, size);
> +   info->argsz = size;
> +   return 0;
> +}
> +
>  static int arm_smmu_domain_get_attr(struct iommu_domain
>> *domain,
> enum iommu_attr attr, void *data)
>  {
> @@ -3028,8 +3054,7 @@ static int
>> arm_smmu_domain_get_attr(struct
 iommu_domain *domain,
> case IOMMU_DOMAIN_UNMANAGED:
> switch (attr) {
> case DOMAIN_ATTR_NESTING:
> -   *(int *)data = (smmu_domain->stage ==
 ARM_SMMU_DOMAIN_NESTED);
> -   return 0;
> +   return
>> arm_smmu_domain_nesting_info(smmu_domain,
 data);

 Thanks for the patch.
 This would unnecessarily overflow 'data' for any caller that's expecting
>> only
 an int data. Dump from one such issue that I was seeing when testing
 this change along with local kvmtool changes is pasted below [1].

 I could get around with the issue by adding another (iommu_attr) -
 DOMAIN_ATTR_NESTING_INFO that returns (iommu_nesting_info).
>>>
>>> nice to hear from you. At first, we planned to have a separate iommu_attr
>>> for getting nesting_info. However, we considered there is no existing user
>>> which gets DOMAIN_ATTR_NESTING, so we decided to reuse it for iommu
>> nesting
>>> info. Could you share me the code base you are using? If the error you
>>> encountered is due to this change, so there should be a place which gets
>>> DOMAIN_ATTR_NESTING.
>>
>> I am currently working on top of Eric's tree for nested stage support [1].
>> My best guess was that the vfio_pci_dma_fault_init() method [2] that is
>> requesting DOMAIN_ATTR_NESTING causes stack overflow, and corruption.
>> That's when I added a new attribute.
> 
> I see. I think there needs a change in the code there. Should also expect
> a nesting_info returned instead of an int anymore. @Eric, how about your
> opinion?
> 
>   domain = iommu_get_domain_for_dev(>pdev->dev);
>   ret = iommu_domain_get_attr(domain, DOMAIN_ATTR_NESTING, );
>   if (ret || !(info.features & IOMMU_NESTING_FEAT_PAGE_RESP)) {
>   /*
>* No need go futher as no page request service support.
>*/
>   return 0;
>   }
Sure I think it is "just" a matter of synchro between the 2 series. Yi,
do you have plans to 

RE: [PATCH v7 02/16] iommu/smmu: Report empty domain nesting info

2021-01-12 Thread Liu, Yi L
Hi Vivek,

> From: Vivek Gautam 
> Sent: Tuesday, January 12, 2021 7:06 PM
> 
> Hi Yi,
> 
> 
> On Tue, Jan 12, 2021 at 2:51 PM Liu, Yi L  wrote:
> >
> > Hi Vivek,
> >
> > > From: Vivek Gautam 
> > > Sent: Tuesday, January 12, 2021 2:50 PM
> > >
> > > Hi Yi,
> > >
> > >
> > > On Thu, Sep 10, 2020 at 4:13 PM Liu Yi L  wrote:
> > > >
> > > > This patch is added as instead of returning a boolean for
> > > DOMAIN_ATTR_NESTING,
> > > > iommu_domain_get_attr() should return an iommu_nesting_info
> handle.
> > > For
> > > > now, return an empty nesting info struct for now as true nesting is not
> > > > yet supported by the SMMUs.
> > > >
> > > > Cc: Will Deacon 
> > > > Cc: Robin Murphy 
> > > > Cc: Eric Auger 
> > > > Cc: Jean-Philippe Brucker 
> > > > Suggested-by: Jean-Philippe Brucker 
> > > > Signed-off-by: Liu Yi L 
> > > > Signed-off-by: Jacob Pan 
> > > > Reviewed-by: Eric Auger 
> > > > ---
> > > > v5 -> v6:
> > > > *) add review-by from Eric Auger.
> > > >
> > > > v4 -> v5:
> > > > *) address comments from Eric Auger.
> > > > ---
> > > >  drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 29
> > > +++--
> > > >  drivers/iommu/arm/arm-smmu/arm-smmu.c   | 29
> > > +++--
> > > >  2 files changed, 54 insertions(+), 4 deletions(-)
> > > >
> > > > diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> > > b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> > > > index 7196207..016e2e5 100644
> > > > --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> > > > +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> > > > @@ -3019,6 +3019,32 @@ static struct iommu_group
> > > *arm_smmu_device_group(struct device *dev)
> > > > return group;
> > > >  }
> > > >
> > > > +static int arm_smmu_domain_nesting_info(struct
> arm_smmu_domain
> > > *smmu_domain,
> > > > +   void *data)
> > > > +{
> > > > +   struct iommu_nesting_info *info = (struct iommu_nesting_info
> > > *)data;
> > > > +   unsigned int size;
> > > > +
> > > > +   if (!info || smmu_domain->stage !=
> ARM_SMMU_DOMAIN_NESTED)
> > > > +   return -ENODEV;
> > > > +
> > > > +   size = sizeof(struct iommu_nesting_info);
> > > > +
> > > > +   /*
> > > > +* if provided buffer size is smaller than expected, should
> > > > +* return 0 and also the expected buffer size to caller.
> > > > +*/
> > > > +   if (info->argsz < size) {
> > > > +   info->argsz = size;
> > > > +   return 0;
> > > > +   }
> > > > +
> > > > +   /* report an empty iommu_nesting_info for now */
> > > > +   memset(info, 0x0, size);
> > > > +   info->argsz = size;
> > > > +   return 0;
> > > > +}
> > > > +
> > > >  static int arm_smmu_domain_get_attr(struct iommu_domain
> *domain,
> > > > enum iommu_attr attr, void *data)
> > > >  {
> > > > @@ -3028,8 +3054,7 @@ static int
> arm_smmu_domain_get_attr(struct
> > > iommu_domain *domain,
> > > > case IOMMU_DOMAIN_UNMANAGED:
> > > > switch (attr) {
> > > > case DOMAIN_ATTR_NESTING:
> > > > -   *(int *)data = (smmu_domain->stage ==
> > > ARM_SMMU_DOMAIN_NESTED);
> > > > -   return 0;
> > > > +   return
> arm_smmu_domain_nesting_info(smmu_domain,
> > > data);
> > >
> > > Thanks for the patch.
> > > This would unnecessarily overflow 'data' for any caller that's expecting
> only
> > > an int data. Dump from one such issue that I was seeing when testing
> > > this change along with local kvmtool changes is pasted below [1].
> > >
> > > I could get around with the issue by adding another (iommu_attr) -
> > > DOMAIN_ATTR_NESTING_INFO that returns (iommu_nesting_info).
> >
> > nice to hear from you. At first, we planned to have a separate iommu_attr
> > for getting nesting_info. However, we considered there is no existing user
> > which gets DOMAIN_ATTR_NESTING, so we decided to reuse it for iommu
> nesting
> > info. Could you share me the code base you are using? If the error you
> > encountered is due to this change, so there should be a place which gets
> > DOMAIN_ATTR_NESTING.
> 
> I am currently working on top of Eric's tree for nested stage support [1].
> My best guess was that the vfio_pci_dma_fault_init() method [2] that is
> requesting DOMAIN_ATTR_NESTING causes stack overflow, and corruption.
> That's when I added a new attribute.

I see. I think there needs a change in the code there. Should also expect
a nesting_info returned instead of an int anymore. @Eric, how about your
opinion?

domain = iommu_get_domain_for_dev(>pdev->dev);
ret = iommu_domain_get_attr(domain, DOMAIN_ATTR_NESTING, );
if (ret || !(info.features & IOMMU_NESTING_FEAT_PAGE_RESP)) {
/*
 * No need go futher as no page request service support.
 */
return 0;
}


Re: [PATCH v7 02/16] iommu/smmu: Report empty domain nesting info

2021-01-12 Thread Vivek Gautam
Hi Yi,


On Tue, Jan 12, 2021 at 2:51 PM Liu, Yi L  wrote:
>
> Hi Vivek,
>
> > From: Vivek Gautam 
> > Sent: Tuesday, January 12, 2021 2:50 PM
> >
> > Hi Yi,
> >
> >
> > On Thu, Sep 10, 2020 at 4:13 PM Liu Yi L  wrote:
> > >
> > > This patch is added as instead of returning a boolean for
> > DOMAIN_ATTR_NESTING,
> > > iommu_domain_get_attr() should return an iommu_nesting_info handle.
> > For
> > > now, return an empty nesting info struct for now as true nesting is not
> > > yet supported by the SMMUs.
> > >
> > > Cc: Will Deacon 
> > > Cc: Robin Murphy 
> > > Cc: Eric Auger 
> > > Cc: Jean-Philippe Brucker 
> > > Suggested-by: Jean-Philippe Brucker 
> > > Signed-off-by: Liu Yi L 
> > > Signed-off-by: Jacob Pan 
> > > Reviewed-by: Eric Auger 
> > > ---
> > > v5 -> v6:
> > > *) add review-by from Eric Auger.
> > >
> > > v4 -> v5:
> > > *) address comments from Eric Auger.
> > > ---
> > >  drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 29
> > +++--
> > >  drivers/iommu/arm/arm-smmu/arm-smmu.c   | 29
> > +++--
> > >  2 files changed, 54 insertions(+), 4 deletions(-)
> > >
> > > diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> > b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> > > index 7196207..016e2e5 100644
> > > --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> > > +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> > > @@ -3019,6 +3019,32 @@ static struct iommu_group
> > *arm_smmu_device_group(struct device *dev)
> > > return group;
> > >  }
> > >
> > > +static int arm_smmu_domain_nesting_info(struct arm_smmu_domain
> > *smmu_domain,
> > > +   void *data)
> > > +{
> > > +   struct iommu_nesting_info *info = (struct iommu_nesting_info
> > *)data;
> > > +   unsigned int size;
> > > +
> > > +   if (!info || smmu_domain->stage != ARM_SMMU_DOMAIN_NESTED)
> > > +   return -ENODEV;
> > > +
> > > +   size = sizeof(struct iommu_nesting_info);
> > > +
> > > +   /*
> > > +* if provided buffer size is smaller than expected, should
> > > +* return 0 and also the expected buffer size to caller.
> > > +*/
> > > +   if (info->argsz < size) {
> > > +   info->argsz = size;
> > > +   return 0;
> > > +   }
> > > +
> > > +   /* report an empty iommu_nesting_info for now */
> > > +   memset(info, 0x0, size);
> > > +   info->argsz = size;
> > > +   return 0;
> > > +}
> > > +
> > >  static int arm_smmu_domain_get_attr(struct iommu_domain *domain,
> > > enum iommu_attr attr, void *data)
> > >  {
> > > @@ -3028,8 +3054,7 @@ static int arm_smmu_domain_get_attr(struct
> > iommu_domain *domain,
> > > case IOMMU_DOMAIN_UNMANAGED:
> > > switch (attr) {
> > > case DOMAIN_ATTR_NESTING:
> > > -   *(int *)data = (smmu_domain->stage ==
> > ARM_SMMU_DOMAIN_NESTED);
> > > -   return 0;
> > > +   return arm_smmu_domain_nesting_info(smmu_domain,
> > data);
> >
> > Thanks for the patch.
> > This would unnecessarily overflow 'data' for any caller that's expecting 
> > only
> > an int data. Dump from one such issue that I was seeing when testing
> > this change along with local kvmtool changes is pasted below [1].
> >
> > I could get around with the issue by adding another (iommu_attr) -
> > DOMAIN_ATTR_NESTING_INFO that returns (iommu_nesting_info).
>
> nice to hear from you. At first, we planned to have a separate iommu_attr
> for getting nesting_info. However, we considered there is no existing user
> which gets DOMAIN_ATTR_NESTING, so we decided to reuse it for iommu nesting
> info. Could you share me the code base you are using? If the error you
> encountered is due to this change, so there should be a place which gets
> DOMAIN_ATTR_NESTING.

I am currently working on top of Eric's tree for nested stage support [1].
My best guess was that the vfio_pci_dma_fault_init() method [2] that is
requesting DOMAIN_ATTR_NESTING causes stack overflow, and corruption.
That's when I added a new attribute.

I will soon publish my patches to the list for review. Let me know
your thoughts.

[1] https://github.com/eauger/linux/tree/5.10-rc4-2stage-v13
[2] 
https://github.com/eauger/linux/blob/5.10-rc4-2stage-v13/drivers/vfio/pci/vfio_pci.c#L494

Thanks
Vivek

>
> Regards,
> Yi Liu

[snip]
___
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu


RE: [PATCH v7 02/16] iommu/smmu: Report empty domain nesting info

2021-01-12 Thread Liu, Yi L
Hi Vivek,

> From: Vivek Gautam 
> Sent: Tuesday, January 12, 2021 2:50 PM
> 
> Hi Yi,
> 
> 
> On Thu, Sep 10, 2020 at 4:13 PM Liu Yi L  wrote:
> >
> > This patch is added as instead of returning a boolean for
> DOMAIN_ATTR_NESTING,
> > iommu_domain_get_attr() should return an iommu_nesting_info handle.
> For
> > now, return an empty nesting info struct for now as true nesting is not
> > yet supported by the SMMUs.
> >
> > Cc: Will Deacon 
> > Cc: Robin Murphy 
> > Cc: Eric Auger 
> > Cc: Jean-Philippe Brucker 
> > Suggested-by: Jean-Philippe Brucker 
> > Signed-off-by: Liu Yi L 
> > Signed-off-by: Jacob Pan 
> > Reviewed-by: Eric Auger 
> > ---
> > v5 -> v6:
> > *) add review-by from Eric Auger.
> >
> > v4 -> v5:
> > *) address comments from Eric Auger.
> > ---
> >  drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 29
> +++--
> >  drivers/iommu/arm/arm-smmu/arm-smmu.c   | 29
> +++--
> >  2 files changed, 54 insertions(+), 4 deletions(-)
> >
> > diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> > index 7196207..016e2e5 100644
> > --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> > +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> > @@ -3019,6 +3019,32 @@ static struct iommu_group
> *arm_smmu_device_group(struct device *dev)
> > return group;
> >  }
> >
> > +static int arm_smmu_domain_nesting_info(struct arm_smmu_domain
> *smmu_domain,
> > +   void *data)
> > +{
> > +   struct iommu_nesting_info *info = (struct iommu_nesting_info
> *)data;
> > +   unsigned int size;
> > +
> > +   if (!info || smmu_domain->stage != ARM_SMMU_DOMAIN_NESTED)
> > +   return -ENODEV;
> > +
> > +   size = sizeof(struct iommu_nesting_info);
> > +
> > +   /*
> > +* if provided buffer size is smaller than expected, should
> > +* return 0 and also the expected buffer size to caller.
> > +*/
> > +   if (info->argsz < size) {
> > +   info->argsz = size;
> > +   return 0;
> > +   }
> > +
> > +   /* report an empty iommu_nesting_info for now */
> > +   memset(info, 0x0, size);
> > +   info->argsz = size;
> > +   return 0;
> > +}
> > +
> >  static int arm_smmu_domain_get_attr(struct iommu_domain *domain,
> > enum iommu_attr attr, void *data)
> >  {
> > @@ -3028,8 +3054,7 @@ static int arm_smmu_domain_get_attr(struct
> iommu_domain *domain,
> > case IOMMU_DOMAIN_UNMANAGED:
> > switch (attr) {
> > case DOMAIN_ATTR_NESTING:
> > -   *(int *)data = (smmu_domain->stage ==
> ARM_SMMU_DOMAIN_NESTED);
> > -   return 0;
> > +   return arm_smmu_domain_nesting_info(smmu_domain,
> data);
> 
> Thanks for the patch.
> This would unnecessarily overflow 'data' for any caller that's expecting only
> an int data. Dump from one such issue that I was seeing when testing
> this change along with local kvmtool changes is pasted below [1].
> 
> I could get around with the issue by adding another (iommu_attr) -
> DOMAIN_ATTR_NESTING_INFO that returns (iommu_nesting_info).

nice to hear from you. At first, we planned to have a separate iommu_attr
for getting nesting_info. However, we considered there is no existing user
which gets DOMAIN_ATTR_NESTING, so we decided to reuse it for iommu nesting
info. Could you share me the code base you are using? If the error you
encountered is due to this change, so there should be a place which gets
DOMAIN_ATTR_NESTING.

Regards,
Yi Liu

> Thanks & regards
> Vivek
> 
> [1]--
> [  811.756516] vfio-pci :08:00.1: vfio_ecap_init: hiding ecap
> 0x1b@0x108
> [  811.756516] Kernel panic - not syncing: stack-protector: Kernel
> stack is corrupted in: vfio_pci_open+0x644/0x648
> [  811.756516] CPU: 0 PID: 175 Comm: lkvm-cleanup-ne Not tainted
> 5.10.0-rc5-00096-gf015061e14cf #43
> [  811.756516] Call trace:
> [  811.756516]  dump_backtrace+0x0/0x1b0
> [  811.756516]  show_stack+0x18/0x68
> [  811.756516]  dump_stack+0xd8/0x134
> [  811.756516]  panic+0x174/0x33c
> [  811.756516]  __stack_chk_fail+0x3c/0x40
> [  811.756516]  vfio_pci_open+0x644/0x648
> [  811.756516]  vfio_group_fops_unl_ioctl+0x4bc/0x648
> [  811.756516]  0x0
> [  811.756516] SMP: stopping secondary CPUs
> [  811.756597] Kernel Offset: disabled
> [  811.756597] CPU features: 0x0040006,6a00aa38
> [  811.756602] Memory Limit: none
> [  811.768497] ---[ end Kernel panic - not syncing: stack-protector:
> Kernel stack is corrupted in: vfio_pci_open+0x644/0x648 ]
> -
___
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu


Re: [PATCH v7 02/16] iommu/smmu: Report empty domain nesting info

2021-01-11 Thread Vivek Gautam
Hi Yi,


On Thu, Sep 10, 2020 at 4:13 PM Liu Yi L  wrote:
>
> This patch is added as instead of returning a boolean for DOMAIN_ATTR_NESTING,
> iommu_domain_get_attr() should return an iommu_nesting_info handle. For
> now, return an empty nesting info struct for now as true nesting is not
> yet supported by the SMMUs.
>
> Cc: Will Deacon 
> Cc: Robin Murphy 
> Cc: Eric Auger 
> Cc: Jean-Philippe Brucker 
> Suggested-by: Jean-Philippe Brucker 
> Signed-off-by: Liu Yi L 
> Signed-off-by: Jacob Pan 
> Reviewed-by: Eric Auger 
> ---
> v5 -> v6:
> *) add review-by from Eric Auger.
>
> v4 -> v5:
> *) address comments from Eric Auger.
> ---
>  drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 29 
> +++--
>  drivers/iommu/arm/arm-smmu/arm-smmu.c   | 29 
> +++--
>  2 files changed, 54 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c 
> b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> index 7196207..016e2e5 100644
> --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> @@ -3019,6 +3019,32 @@ static struct iommu_group 
> *arm_smmu_device_group(struct device *dev)
> return group;
>  }
>
> +static int arm_smmu_domain_nesting_info(struct arm_smmu_domain *smmu_domain,
> +   void *data)
> +{
> +   struct iommu_nesting_info *info = (struct iommu_nesting_info *)data;
> +   unsigned int size;
> +
> +   if (!info || smmu_domain->stage != ARM_SMMU_DOMAIN_NESTED)
> +   return -ENODEV;
> +
> +   size = sizeof(struct iommu_nesting_info);
> +
> +   /*
> +* if provided buffer size is smaller than expected, should
> +* return 0 and also the expected buffer size to caller.
> +*/
> +   if (info->argsz < size) {
> +   info->argsz = size;
> +   return 0;
> +   }
> +
> +   /* report an empty iommu_nesting_info for now */
> +   memset(info, 0x0, size);
> +   info->argsz = size;
> +   return 0;
> +}
> +
>  static int arm_smmu_domain_get_attr(struct iommu_domain *domain,
> enum iommu_attr attr, void *data)
>  {
> @@ -3028,8 +3054,7 @@ static int arm_smmu_domain_get_attr(struct iommu_domain 
> *domain,
> case IOMMU_DOMAIN_UNMANAGED:
> switch (attr) {
> case DOMAIN_ATTR_NESTING:
> -   *(int *)data = (smmu_domain->stage == 
> ARM_SMMU_DOMAIN_NESTED);
> -   return 0;
> +   return arm_smmu_domain_nesting_info(smmu_domain, 
> data);

Thanks for the patch.
This would unnecessarily overflow 'data' for any caller that's expecting only
an int data. Dump from one such issue that I was seeing when testing
this change along with local kvmtool changes is pasted below [1].

I could get around with the issue by adding another (iommu_attr) -
DOMAIN_ATTR_NESTING_INFO that returns (iommu_nesting_info).

Thanks & regards
Vivek

[1]--
[  811.756516] vfio-pci :08:00.1: vfio_ecap_init: hiding ecap 0x1b@0x108
[  811.756516] Kernel panic - not syncing: stack-protector: Kernel
stack is corrupted in: vfio_pci_open+0x644/0x648
[  811.756516] CPU: 0 PID: 175 Comm: lkvm-cleanup-ne Not tainted
5.10.0-rc5-00096-gf015061e14cf #43
[  811.756516] Call trace:
[  811.756516]  dump_backtrace+0x0/0x1b0
[  811.756516]  show_stack+0x18/0x68
[  811.756516]  dump_stack+0xd8/0x134
[  811.756516]  panic+0x174/0x33c
[  811.756516]  __stack_chk_fail+0x3c/0x40
[  811.756516]  vfio_pci_open+0x644/0x648
[  811.756516]  vfio_group_fops_unl_ioctl+0x4bc/0x648
[  811.756516]  0x0
[  811.756516] SMP: stopping secondary CPUs
[  811.756597] Kernel Offset: disabled
[  811.756597] CPU features: 0x0040006,6a00aa38
[  811.756602] Memory Limit: none
[  811.768497] ---[ end Kernel panic - not syncing: stack-protector:
Kernel stack is corrupted in: vfio_pci_open+0x644/0x648 ]
-
___
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu