diff mbox series

[v6,07/33] iommu: Avoid reallocate default domain for a group

Message ID 20210111111914.22211-8-yong.wu@mediatek.com
State New
Headers show
Series MT8192 IOMMU support | expand

Commit Message

Yong Wu (吴勇) Jan. 11, 2021, 11:18 a.m. UTC
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 <yong.wu@mediatek.com>
---
 drivers/iommu/iommu.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Will Deacon Jan. 26, 2021, 10:23 p.m. UTC | #1
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 <yong.wu@mediatek.com>

> ---

>  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
Yong Wu (吴勇) Jan. 27, 2021, 9:39 a.m. UTC | #2
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 <yong.wu@mediatek.com>

> > ---

> >  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
Will Deacon Jan. 28, 2021, 9:10 p.m. UTC | #3
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 <yong.wu@mediatek.com>

> > > ---

> > >  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
Will Deacon Jan. 28, 2021, 9:14 p.m. UTC | #4
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 <yong.wu@mediatek.com>

> > > > ---

> > > >  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
Robin Murphy Jan. 29, 2021, 12:03 a.m. UTC | #5
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 <yong.wu@mediatek.com>
>>>>> ---
>>>>>   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
>
Yong Wu (吴勇) Jan. 29, 2021, 1:52 a.m. UTC | #6
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 <yong.wu@mediatek.com>

> > > > > ---

> > > > >  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
diff mbox series

Patch

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);