2021-01-11 11:25:09

by Yong Wu (吴勇)

[permalink] [raw]
Subject: [PATCH v6 07/33] iommu: Avoid reallocate default domain for a group

If group->default_domain exists, avoid reallocate it.

In some iommu drivers, there may be several devices share a group. Avoid
realloc the default domain for this case.

Signed-off-by: Yong Wu <[email protected]>
---
drivers/iommu/iommu.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
index 3d099a31ddca..f4b87e6abe80 100644
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
@@ -266,7 +266,8 @@ int iommu_probe_device(struct device *dev)
* support default domains, so the return value is not yet
* checked.
*/
- iommu_alloc_default_domain(group, dev);
+ if (!group->default_domain)
+ iommu_alloc_default_domain(group, dev);

if (group->default_domain) {
ret = __iommu_attach_device(group->default_domain, dev);
--
2.18.0


2021-01-27 19:59:40

by Will Deacon

[permalink] [raw]
Subject: Re: [PATCH v6 07/33] iommu: Avoid reallocate default domain for a group

On Mon, Jan 11, 2021 at 07:18:48PM +0800, Yong Wu wrote:
> If group->default_domain exists, avoid reallocate it.
>
> In some iommu drivers, there may be several devices share a group. Avoid
> realloc the default domain for this case.
>
> Signed-off-by: Yong Wu <[email protected]>
> ---
> drivers/iommu/iommu.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
> index 3d099a31ddca..f4b87e6abe80 100644
> --- a/drivers/iommu/iommu.c
> +++ b/drivers/iommu/iommu.c
> @@ -266,7 +266,8 @@ int iommu_probe_device(struct device *dev)
> * support default domains, so the return value is not yet
> * checked.
> */
> - iommu_alloc_default_domain(group, dev);
> + if (!group->default_domain)
> + iommu_alloc_default_domain(group, dev);

I don't really get what this achieves, since iommu_alloc_default_domain()
looks like this:

static int iommu_alloc_default_domain(struct iommu_group *group,
struct device *dev)
{
unsigned int type;

if (group->default_domain)
return 0;

...

in which case, it should be fine?

Will

2021-01-27 21:52:17

by Yong Wu (吴勇)

[permalink] [raw]
Subject: Re: [PATCH v6 07/33] iommu: Avoid reallocate default domain for a group

On Tue, 2021-01-26 at 22:23 +0000, Will Deacon wrote:
> On Mon, Jan 11, 2021 at 07:18:48PM +0800, Yong Wu wrote:
> > If group->default_domain exists, avoid reallocate it.
> >
> > In some iommu drivers, there may be several devices share a group. Avoid
> > realloc the default domain for this case.
> >
> > Signed-off-by: Yong Wu <[email protected]>
> > ---
> > drivers/iommu/iommu.c | 3 ++-
> > 1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
> > index 3d099a31ddca..f4b87e6abe80 100644
> > --- a/drivers/iommu/iommu.c
> > +++ b/drivers/iommu/iommu.c
> > @@ -266,7 +266,8 @@ int iommu_probe_device(struct device *dev)
> > * support default domains, so the return value is not yet
> > * checked.
> > */
> > - iommu_alloc_default_domain(group, dev);
> > + if (!group->default_domain)
> > + iommu_alloc_default_domain(group, dev);
>
> I don't really get what this achieves, since iommu_alloc_default_domain()
> looks like this:
>
> static int iommu_alloc_default_domain(struct iommu_group *group,
> struct device *dev)
> {
> unsigned int type;
>
> if (group->default_domain)
> return 0;
>
> ...
>
> in which case, it should be fine?

oh. sorry, I overlooked this. the current code is enough.
I will remove this patch. and send the next version in this week.
Thanks very much.

>
> Will

2021-01-28 21:13:05

by Will Deacon

[permalink] [raw]
Subject: Re: [PATCH v6 07/33] iommu: Avoid reallocate default domain for a group

On Wed, Jan 27, 2021 at 05:39:16PM +0800, Yong Wu wrote:
> On Tue, 2021-01-26 at 22:23 +0000, Will Deacon wrote:
> > On Mon, Jan 11, 2021 at 07:18:48PM +0800, Yong Wu wrote:
> > > If group->default_domain exists, avoid reallocate it.
> > >
> > > In some iommu drivers, there may be several devices share a group. Avoid
> > > realloc the default domain for this case.
> > >
> > > Signed-off-by: Yong Wu <[email protected]>
> > > ---
> > > drivers/iommu/iommu.c | 3 ++-
> > > 1 file changed, 2 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
> > > index 3d099a31ddca..f4b87e6abe80 100644
> > > --- a/drivers/iommu/iommu.c
> > > +++ b/drivers/iommu/iommu.c
> > > @@ -266,7 +266,8 @@ int iommu_probe_device(struct device *dev)
> > > * support default domains, so the return value is not yet
> > > * checked.
> > > */
> > > - iommu_alloc_default_domain(group, dev);
> > > + if (!group->default_domain)
> > > + iommu_alloc_default_domain(group, dev);
> >
> > I don't really get what this achieves, since iommu_alloc_default_domain()
> > looks like this:
> >
> > static int iommu_alloc_default_domain(struct iommu_group *group,
> > struct device *dev)
> > {
> > unsigned int type;
> >
> > if (group->default_domain)
> > return 0;
> >
> > ...
> >
> > in which case, it should be fine?
>
> oh. sorry, I overlooked this. the current code is enough.
> I will remove this patch. and send the next version in this week.
> Thanks very much.

Actually, looking at this again, if we're dropping this patch and patch 6
just needs the kfree() moving about, then there's no need to repost. The
issue that Robin and Paul are discussing can be handled separately.

Will

2021-01-28 21:17:01

by Will Deacon

[permalink] [raw]
Subject: Re: [PATCH v6 07/33] iommu: Avoid reallocate default domain for a group

On Thu, Jan 28, 2021 at 09:10:20PM +0000, Will Deacon wrote:
> On Wed, Jan 27, 2021 at 05:39:16PM +0800, Yong Wu wrote:
> > On Tue, 2021-01-26 at 22:23 +0000, Will Deacon wrote:
> > > On Mon, Jan 11, 2021 at 07:18:48PM +0800, Yong Wu wrote:
> > > > If group->default_domain exists, avoid reallocate it.
> > > >
> > > > In some iommu drivers, there may be several devices share a group. Avoid
> > > > realloc the default domain for this case.
> > > >
> > > > Signed-off-by: Yong Wu <[email protected]>
> > > > ---
> > > > drivers/iommu/iommu.c | 3 ++-
> > > > 1 file changed, 2 insertions(+), 1 deletion(-)
> > > >
> > > > diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
> > > > index 3d099a31ddca..f4b87e6abe80 100644
> > > > --- a/drivers/iommu/iommu.c
> > > > +++ b/drivers/iommu/iommu.c
> > > > @@ -266,7 +266,8 @@ int iommu_probe_device(struct device *dev)
> > > > * support default domains, so the return value is not yet
> > > > * checked.
> > > > */
> > > > - iommu_alloc_default_domain(group, dev);
> > > > + if (!group->default_domain)
> > > > + iommu_alloc_default_domain(group, dev);
> > >
> > > I don't really get what this achieves, since iommu_alloc_default_domain()
> > > looks like this:
> > >
> > > static int iommu_alloc_default_domain(struct iommu_group *group,
> > > struct device *dev)
> > > {
> > > unsigned int type;
> > >
> > > if (group->default_domain)
> > > return 0;
> > >
> > > ...
> > >
> > > in which case, it should be fine?
> >
> > oh. sorry, I overlooked this. the current code is enough.
> > I will remove this patch. and send the next version in this week.
> > Thanks very much.
>
> Actually, looking at this again, if we're dropping this patch and patch 6
> just needs the kfree() moving about, then there's no need to repost. The
> issue that Robin and Paul are discussing can be handled separately.

Argh, except that this version of the patches doesn't apply :)

So after all that, please go ahead and post a v7 ASAP based on this branch:

https://git.kernel.org/pub/scm/linux/kernel/git/will/linux.git/log/?h=for-joerg/mtk

Will

2021-01-29 00:08:57

by Robin Murphy

[permalink] [raw]
Subject: Re: [PATCH v6 07/33] iommu: Avoid reallocate default domain for a group

On 2021-01-28 21:14, Will Deacon wrote:
> On Thu, Jan 28, 2021 at 09:10:20PM +0000, Will Deacon wrote:
>> On Wed, Jan 27, 2021 at 05:39:16PM +0800, Yong Wu wrote:
>>> On Tue, 2021-01-26 at 22:23 +0000, Will Deacon wrote:
>>>> On Mon, Jan 11, 2021 at 07:18:48PM +0800, Yong Wu wrote:
>>>>> If group->default_domain exists, avoid reallocate it.
>>>>>
>>>>> In some iommu drivers, there may be several devices share a group. Avoid
>>>>> realloc the default domain for this case.
>>>>>
>>>>> Signed-off-by: Yong Wu <[email protected]>
>>>>> ---
>>>>> drivers/iommu/iommu.c | 3 ++-
>>>>> 1 file changed, 2 insertions(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
>>>>> index 3d099a31ddca..f4b87e6abe80 100644
>>>>> --- a/drivers/iommu/iommu.c
>>>>> +++ b/drivers/iommu/iommu.c
>>>>> @@ -266,7 +266,8 @@ int iommu_probe_device(struct device *dev)
>>>>> * support default domains, so the return value is not yet
>>>>> * checked.
>>>>> */
>>>>> - iommu_alloc_default_domain(group, dev);
>>>>> + if (!group->default_domain)
>>>>> + iommu_alloc_default_domain(group, dev);
>>>>
>>>> I don't really get what this achieves, since iommu_alloc_default_domain()
>>>> looks like this:
>>>>
>>>> static int iommu_alloc_default_domain(struct iommu_group *group,
>>>> struct device *dev)
>>>> {
>>>> unsigned int type;
>>>>
>>>> if (group->default_domain)
>>>> return 0;
>>>>
>>>> ...
>>>>
>>>> in which case, it should be fine?
>>>
>>> oh. sorry, I overlooked this. the current code is enough.
>>> I will remove this patch. and send the next version in this week.
>>> Thanks very much.
>>
>> Actually, looking at this again, if we're dropping this patch and patch 6
>> just needs the kfree() moving about, then there's no need to repost. The
>> issue that Robin and Paul are discussing can be handled separately.

FWIW patch #6 gets dropped as well now, since Rob has applied the
standalone fix (89c7cb1608ac).

Robin.

> Argh, except that this version of the patches doesn't apply :)
>
> So after all that, please go ahead and post a v7 ASAP based on this branch:
>
> https://git.kernel.org/pub/scm/linux/kernel/git/will/linux.git/log/?h=for-joerg/mtk
>
> Will
>

2021-01-29 01:54:33

by Yong Wu (吴勇)

[permalink] [raw]
Subject: Re: [PATCH v6 07/33] iommu: Avoid reallocate default domain for a group

On Thu, 2021-01-28 at 21:14 +0000, Will Deacon wrote:
> On Thu, Jan 28, 2021 at 09:10:20PM +0000, Will Deacon wrote:
> > On Wed, Jan 27, 2021 at 05:39:16PM +0800, Yong Wu wrote:
> > > On Tue, 2021-01-26 at 22:23 +0000, Will Deacon wrote:
> > > > On Mon, Jan 11, 2021 at 07:18:48PM +0800, Yong Wu wrote:
> > > > > If group->default_domain exists, avoid reallocate it.
> > > > >
> > > > > In some iommu drivers, there may be several devices share a group. Avoid
> > > > > realloc the default domain for this case.
> > > > >
> > > > > Signed-off-by: Yong Wu <[email protected]>
> > > > > ---
> > > > > drivers/iommu/iommu.c | 3 ++-
> > > > > 1 file changed, 2 insertions(+), 1 deletion(-)
> > > > >
> > > > > diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
> > > > > index 3d099a31ddca..f4b87e6abe80 100644
> > > > > --- a/drivers/iommu/iommu.c
> > > > > +++ b/drivers/iommu/iommu.c
> > > > > @@ -266,7 +266,8 @@ int iommu_probe_device(struct device *dev)
> > > > > * support default domains, so the return value is not yet
> > > > > * checked.
> > > > > */
> > > > > - iommu_alloc_default_domain(group, dev);
> > > > > + if (!group->default_domain)
> > > > > + iommu_alloc_default_domain(group, dev);
> > > >
> > > > I don't really get what this achieves, since iommu_alloc_default_domain()
> > > > looks like this:
> > > >
> > > > static int iommu_alloc_default_domain(struct iommu_group *group,
> > > > struct device *dev)
> > > > {
> > > > unsigned int type;
> > > >
> > > > if (group->default_domain)
> > > > return 0;
> > > >
> > > > ...
> > > >
> > > > in which case, it should be fine?
> > >
> > > oh. sorry, I overlooked this. the current code is enough.
> > > I will remove this patch. and send the next version in this week.
> > > Thanks very much.
> >
> > Actually, looking at this again, if we're dropping this patch and patch 6
> > just needs the kfree() moving about, then there's no need to repost. The
> > issue that Robin and Paul are discussing can be handled separately.
>
> Argh, except that this version of the patches doesn't apply :)
>
> So after all that, please go ahead and post a v7 ASAP based on this branch:
>
> https://git.kernel.org/pub/scm/linux/kernel/git/will/linux.git/log/?h=for-joerg/mtk

After confirm with Tomasz, He still need some time to take a look at v6.

thus I need wait some time to send v7 after his feedback.

Thanks for your comment. and Thanks Tomasz for the review.

>
> Will