2022-07-01 19:19:32

by Danilo Krummrich

[permalink] [raw]
Subject: [PATCH 00/10] drm: use idr_init_base() over idr_init() if applicable

From: Danilo Krummrich <[email protected]>

This patch series initializes IDRs with idr_init_base(&idr, 1) rather than
idr_init(&idr) in case for the particular IDR no IDs < 1 are ever requested -
this avoids unnecessary tree walks.

Danilo Krummrich (10):
drm/amdgpu: use idr_init_base() to initialize mgr->ctx_handles
drm/amdgpu: use idr_init_base() to initialize fpriv->bo_list_handles
drm: use idr_init_base() to initialize master->magic_map
drm: use idr_init_base() to initialize master->lessee_idr
drm: use idr_init_base() to initialize mode_config.object_idr
drm: use idr_init_base() to initialize mode_config.tile_idr
drm/sis: use idr_init_base() to initialize dev_priv->object_idr
drm/v3d: use idr_init_base() to initialize v3d_priv->perfmon.idr
drm/via: use idr_init_base() to initialize dev_priv->object_idr
drm/todo: remove task for idr_init_base()

Documentation/gpu/todo.rst | 12 ------------
drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c | 2 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 2 +-
drivers/gpu/drm/drm_auth.c | 4 ++--
drivers/gpu/drm/drm_mode_config.c | 4 ++--
drivers/gpu/drm/sis/sis_drv.c | 2 +-
drivers/gpu/drm/v3d/v3d_perfmon.c | 2 +-
drivers/gpu/drm/via/via_map.c | 2 +-
8 files changed, 9 insertions(+), 21 deletions(-)

--
2.36.1


2022-07-01 19:19:55

by Danilo Krummrich

[permalink] [raw]
Subject: [PATCH 05/10] drm: use idr_init_base() to initialize mode_config.object_idr

From: Danilo Krummrich <[email protected]>

idr_init_base(), implemented by commit 6ce711f27500 ("idr: Make 1-based
IDRs more efficient"), let us set an arbitrary base other than
idr_init(), which uses base 0.

Since, for this IDR, no ID < 1 is ever requested/allocated, using
idr_init_base(&idr, 1) avoids unnecessary tree walks.

Signed-off-by: Danilo Krummrich <[email protected]>
---
drivers/gpu/drm/drm_mode_config.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
index 37b4b9f0e468..e2a295a4ee0b 100644
--- a/drivers/gpu/drm/drm_mode_config.c
+++ b/drivers/gpu/drm/drm_mode_config.c
@@ -411,7 +411,7 @@ int drmm_mode_config_init(struct drm_device *dev)
INIT_LIST_HEAD(&dev->mode_config.property_blob_list);
INIT_LIST_HEAD(&dev->mode_config.plane_list);
INIT_LIST_HEAD(&dev->mode_config.privobj_list);
- idr_init(&dev->mode_config.object_idr);
+ idr_init_base(&dev->mode_config.object_idr, 1);
idr_init(&dev->mode_config.tile_idr);
ida_init(&dev->mode_config.connector_ida);
spin_lock_init(&dev->mode_config.connector_list_lock);
--
2.36.1

2022-07-01 19:20:34

by Danilo Krummrich

[permalink] [raw]
Subject: [PATCH 04/10] drm: use idr_init_base() to initialize master->lessee_idr

From: Danilo Krummrich <[email protected]>

idr_init_base(), implemented by commit 6ce711f27500 ("idr: Make 1-based
IDRs more efficient"), let us set an arbitrary base other than
idr_init(), which uses base 0.

Since, for this IDR, no ID < 1 is ever requested/allocated, using
idr_init_base(&idr, 1) avoids unnecessary tree walks.

Signed-off-by: Danilo Krummrich <[email protected]>
---
drivers/gpu/drm/drm_auth.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/drm_auth.c b/drivers/gpu/drm/drm_auth.c
index 63395bebaa6b..cf92a9ae8034 100644
--- a/drivers/gpu/drm/drm_auth.c
+++ b/drivers/gpu/drm/drm_auth.c
@@ -147,7 +147,7 @@ struct drm_master *drm_master_create(struct drm_device *dev)
INIT_LIST_HEAD(&master->lessees);
INIT_LIST_HEAD(&master->lessee_list);
idr_init(&master->leases);
- idr_init(&master->lessee_idr);
+ idr_init_base(&master->lessee_idr, 1);

return master;
}
--
2.36.1

2022-07-01 19:23:57

by Danilo Krummrich

[permalink] [raw]
Subject: [PATCH 01/10] drm/amdgpu: use idr_init_base() to initialize mgr->ctx_handles

From: Danilo Krummrich <[email protected]>

idr_init_base(), implemented by commit 6ce711f27500 ("idr: Make 1-based
IDRs more efficient"), let us set an arbitrary base other than
idr_init(), which uses base 0.

Since, for this IDR, no ID < 1 is ever requested, using
idr_init_base(&idr, 1) avoids unnecessary tree walks.

Signed-off-by: Danilo Krummrich <[email protected]>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
index 7dc92ef36b2b..cc87c3809a8d 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
@@ -841,7 +841,7 @@ void amdgpu_ctx_mgr_init(struct amdgpu_ctx_mgr *mgr,

mgr->adev = adev;
mutex_init(&mgr->lock);
- idr_init(&mgr->ctx_handles);
+ idr_init_base(&mgr->ctx_handles, 1);

for (i = 0; i < AMDGPU_HW_IP_NUM; ++i)
atomic64_set(&mgr->time_spend[i], 0);
--
2.36.1

2022-07-01 19:24:13

by Danilo Krummrich

[permalink] [raw]
Subject: [PATCH 03/10] drm: use idr_init_base() to initialize master->magic_map

From: Danilo Krummrich <[email protected]>

idr_init_base(), implemented by commit 6ce711f27500 ("idr: Make 1-based
IDRs more efficient"), let us set an arbitrary base other than
idr_init(), which uses base 0.

Since, for this IDR, no ID < 1 is ever requested/allocated, using
idr_init_base(&idr, 1) avoids unnecessary tree walks.

Signed-off-by: Danilo Krummrich <[email protected]>
---
drivers/gpu/drm/drm_auth.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/drm_auth.c b/drivers/gpu/drm/drm_auth.c
index 6e433d465f41..63395bebaa6b 100644
--- a/drivers/gpu/drm/drm_auth.c
+++ b/drivers/gpu/drm/drm_auth.c
@@ -140,7 +140,7 @@ struct drm_master *drm_master_create(struct drm_device *dev)

kref_init(&master->refcount);
drm_master_legacy_init(master);
- idr_init(&master->magic_map);
+ idr_init_base(&master->magic_map, 1);
master->dev = dev;

/* initialize the tree of output resource lessees */
--
2.36.1

2022-07-01 19:24:15

by Danilo Krummrich

[permalink] [raw]
Subject: [PATCH 07/10] drm/sis: use idr_init_base() to initialize dev_priv->object_idr

From: Danilo Krummrich <[email protected]>

idr_init_base(), implemented by commit 6ce711f27500 ("idr: Make 1-based
IDRs more efficient"), let us set an arbitrary base other than
idr_init(), which uses base 0.

Since, for this IDR, no ID < 1 is ever requested/allocated, using
idr_init_base(&idr, 1) avoids unnecessary tree walks.

Signed-off-by: Danilo Krummrich <[email protected]>
---
drivers/gpu/drm/sis/sis_drv.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/sis/sis_drv.c b/drivers/gpu/drm/sis/sis_drv.c
index e35e719cf315..6173020a9bf5 100644
--- a/drivers/gpu/drm/sis/sis_drv.c
+++ b/drivers/gpu/drm/sis/sis_drv.c
@@ -50,7 +50,7 @@ static int sis_driver_load(struct drm_device *dev, unsigned long chipset)
if (dev_priv == NULL)
return -ENOMEM;

- idr_init(&dev_priv->object_idr);
+ idr_init_base(&dev_priv->object_idr, 1);
dev->dev_private = (void *)dev_priv;
dev_priv->chipset = chipset;

--
2.36.1

2022-07-01 19:25:24

by Danilo Krummrich

[permalink] [raw]
Subject: [PATCH 08/10] drm/v3d: use idr_init_base() to initialize v3d_priv->perfmon.idr

From: Danilo Krummrich <[email protected]>

idr_init_base(), implemented by commit 6ce711f27500 ("idr: Make 1-based
IDRs more efficient"), let us set an arbitrary base other than
idr_init(), which uses base 0.

Since, for this IDR, no ID < 1 is ever requested/allocated, using
idr_init_base(&idr, 1) avoids unnecessary tree walks.

Signed-off-by: Danilo Krummrich <[email protected]>
---
drivers/gpu/drm/v3d/v3d_perfmon.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/v3d/v3d_perfmon.c b/drivers/gpu/drm/v3d/v3d_perfmon.c
index f6a88abccc7d..48aaaa972c49 100644
--- a/drivers/gpu/drm/v3d/v3d_perfmon.c
+++ b/drivers/gpu/drm/v3d/v3d_perfmon.c
@@ -95,7 +95,7 @@ struct v3d_perfmon *v3d_perfmon_find(struct v3d_file_priv *v3d_priv, int id)
void v3d_perfmon_open_file(struct v3d_file_priv *v3d_priv)
{
mutex_init(&v3d_priv->perfmon.lock);
- idr_init(&v3d_priv->perfmon.idr);
+ idr_init_base(&v3d_priv->perfmon.idr, 1);
}

static int v3d_perfmon_idr_del(int id, void *elem, void *data)
--
2.36.1

2022-07-04 13:17:32

by Christian König

[permalink] [raw]
Subject: Re: [PATCH 00/10] drm: use idr_init_base() over idr_init() if applicable

Am 01.07.22 um 20:52 schrieb [email protected]:
> From: Danilo Krummrich <[email protected]>
>
> This patch series initializes IDRs with idr_init_base(&idr, 1) rather than
> idr_init(&idr) in case for the particular IDR no IDs < 1 are ever requested -
> this avoids unnecessary tree walks.

Feel free to add Reviewed-by: Christian König <[email protected]>
for the two amdgpu patches.

And an Acked-by: Christian König <[email protected]> for the rest.

Regards,
Christian.

>
> Danilo Krummrich (10):
> drm/amdgpu: use idr_init_base() to initialize mgr->ctx_handles
> drm/amdgpu: use idr_init_base() to initialize fpriv->bo_list_handles
> drm: use idr_init_base() to initialize master->magic_map
> drm: use idr_init_base() to initialize master->lessee_idr
> drm: use idr_init_base() to initialize mode_config.object_idr
> drm: use idr_init_base() to initialize mode_config.tile_idr
> drm/sis: use idr_init_base() to initialize dev_priv->object_idr
> drm/v3d: use idr_init_base() to initialize v3d_priv->perfmon.idr
> drm/via: use idr_init_base() to initialize dev_priv->object_idr
> drm/todo: remove task for idr_init_base()
>
> Documentation/gpu/todo.rst | 12 ------------
> drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c | 2 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 2 +-
> drivers/gpu/drm/drm_auth.c | 4 ++--
> drivers/gpu/drm/drm_mode_config.c | 4 ++--
> drivers/gpu/drm/sis/sis_drv.c | 2 +-
> drivers/gpu/drm/v3d/v3d_perfmon.c | 2 +-
> drivers/gpu/drm/via/via_map.c | 2 +-
> 8 files changed, 9 insertions(+), 21 deletions(-)
>

2022-07-12 14:59:55

by Danilo Krummrich

[permalink] [raw]
Subject: Re: [PATCH 00/10] drm: use idr_init_base() over idr_init() if applicable

Hi Laurent,

On 7/1/22 20:52, [email protected] wrote:
> From: Danilo Krummrich <[email protected]>
>
> This patch series initializes IDRs with idr_init_base(&idr, 1) rather than
> idr_init(&idr) in case for the particular IDR no IDs < 1 are ever requested -
> this avoids unnecessary tree walks.
>
Guess this would go through drm-misc too?

- Danilo

> Danilo Krummrich (10):
> drm/amdgpu: use idr_init_base() to initialize mgr->ctx_handles
> drm/amdgpu: use idr_init_base() to initialize fpriv->bo_list_handles
> drm: use idr_init_base() to initialize master->magic_map
> drm: use idr_init_base() to initialize master->lessee_idr
> drm: use idr_init_base() to initialize mode_config.object_idr
> drm: use idr_init_base() to initialize mode_config.tile_idr
> drm/sis: use idr_init_base() to initialize dev_priv->object_idr
> drm/v3d: use idr_init_base() to initialize v3d_priv->perfmon.idr
> drm/via: use idr_init_base() to initialize dev_priv->object_idr
> drm/todo: remove task for idr_init_base()
>
> Documentation/gpu/todo.rst | 12 ------------
> drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c | 2 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 2 +-
> drivers/gpu/drm/drm_auth.c | 4 ++--
> drivers/gpu/drm/drm_mode_config.c | 4 ++--
> drivers/gpu/drm/sis/sis_drv.c | 2 +-
> drivers/gpu/drm/v3d/v3d_perfmon.c | 2 +-
> drivers/gpu/drm/via/via_map.c | 2 +-
> 8 files changed, 9 insertions(+), 21 deletions(-)
>

2022-07-28 04:32:52

by Dave Airlie

[permalink] [raw]
Subject: Re: [PATCH 00/10] drm: use idr_init_base() over idr_init() if applicable

On Wed, 13 Jul 2022 at 00:24, Danilo Krummrich <[email protected]> wrote:
>
> Hi Laurent,
>
> On 7/1/22 20:52, [email protected] wrote:
> > From: Danilo Krummrich <[email protected]>
> >
> > This patch series initializes IDRs with idr_init_base(&idr, 1) rather than
> > idr_init(&idr) in case for the particular IDR no IDs < 1 are ever requested -
> > this avoids unnecessary tree walks.
> >
> Guess this would go through drm-misc too?

Could someone from the misc team pick this up, Danilo doesn't have
commit rights yet.

Dave.

2022-07-28 14:56:40

by Maxime Ripard

[permalink] [raw]
Subject: Re: [PATCH 00/10] drm: use idr_init_base() over idr_init() if applicable

On Thu, Jul 28, 2022 at 04:41:41PM +0200, Maxime Ripard wrote:
> On Fri, 1 Jul 2022 20:52:53 +0200, [email protected] wrote:
> > From: Danilo Krummrich <[email protected]>
> >
> > This patch series initializes IDRs with idr_init_base(&idr, 1) rather than
> > idr_init(&idr) in case for the particular IDR no IDs < 1 are ever requested -
> > this avoids unnecessary tree walks.
> >
> > Danilo Krummrich (10):
> > drm/amdgpu: use idr_init_base() to initialize mgr->ctx_handles
> > drm/amdgpu: use idr_init_base() to initialize fpriv->bo_list_handles
> > drm: use idr_init_base() to initialize master->magic_map
> > drm: use idr_init_base() to initialize master->lessee_idr
> > drm: use idr_init_base() to initialize mode_config.object_idr
> > drm: use idr_init_base() to initialize mode_config.tile_idr
> > drm/sis: use idr_init_base() to initialize dev_priv->object_idr
> > drm/v3d: use idr_init_base() to initialize v3d_priv->perfmon.idr
> > drm/via: use idr_init_base() to initialize dev_priv->object_idr
> > drm/todo: remove task for idr_init_base()
> >
> > [...]
>
> Applied to drm/drm-misc (drm-misc-next).

The via driver had changed a bit and the patch 9 didn't apply at all.
I've moved the change to where it looked like it belonged, but you might
want to double check.

Maxime


Attachments:
(No filename) (1.30 kB)
signature.asc (235.00 B)
Download all attachments

2022-07-28 14:58:15

by Maxime Ripard

[permalink] [raw]
Subject: Re: [PATCH 00/10] drm: use idr_init_base() over idr_init() if applicable

On Fri, 1 Jul 2022 20:52:53 +0200, [email protected] wrote:
> From: Danilo Krummrich <[email protected]>
>
> This patch series initializes IDRs with idr_init_base(&idr, 1) rather than
> idr_init(&idr) in case for the particular IDR no IDs < 1 are ever requested -
> this avoids unnecessary tree walks.
>
> Danilo Krummrich (10):
> drm/amdgpu: use idr_init_base() to initialize mgr->ctx_handles
> drm/amdgpu: use idr_init_base() to initialize fpriv->bo_list_handles
> drm: use idr_init_base() to initialize master->magic_map
> drm: use idr_init_base() to initialize master->lessee_idr
> drm: use idr_init_base() to initialize mode_config.object_idr
> drm: use idr_init_base() to initialize mode_config.tile_idr
> drm/sis: use idr_init_base() to initialize dev_priv->object_idr
> drm/v3d: use idr_init_base() to initialize v3d_priv->perfmon.idr
> drm/via: use idr_init_base() to initialize dev_priv->object_idr
> drm/todo: remove task for idr_init_base()
>
> [...]

Applied to drm/drm-misc (drm-misc-next).

Thanks!
Maxime

2022-07-28 15:02:54

by Danilo Krummrich

[permalink] [raw]
Subject: Re: [PATCH 00/10] drm: use idr_init_base() over idr_init() if applicable

On 7/28/22 16:44, Maxime Ripard wrote:
> On Thu, Jul 28, 2022 at 04:41:41PM +0200, Maxime Ripard wrote:
>> On Fri, 1 Jul 2022 20:52:53 +0200, [email protected] wrote:
>>> From: Danilo Krummrich <[email protected]>
>>>
>>> This patch series initializes IDRs with idr_init_base(&idr, 1) rather than
>>> idr_init(&idr) in case for the particular IDR no IDs < 1 are ever requested -
>>> this avoids unnecessary tree walks.
>>>
>>> Danilo Krummrich (10):
>>> drm/amdgpu: use idr_init_base() to initialize mgr->ctx_handles
>>> drm/amdgpu: use idr_init_base() to initialize fpriv->bo_list_handles
>>> drm: use idr_init_base() to initialize master->magic_map
>>> drm: use idr_init_base() to initialize master->lessee_idr
>>> drm: use idr_init_base() to initialize mode_config.object_idr
>>> drm: use idr_init_base() to initialize mode_config.tile_idr
>>> drm/sis: use idr_init_base() to initialize dev_priv->object_idr
>>> drm/v3d: use idr_init_base() to initialize v3d_priv->perfmon.idr
>>> drm/via: use idr_init_base() to initialize dev_priv->object_idr
>>> drm/todo: remove task for idr_init_base()
>>>
>>> [...]
>>
>> Applied to drm/drm-misc (drm-misc-next).

Thanks.

>
> The via driver had changed a bit and the patch 9 didn't apply at all.
> I've moved the change to where it looked like it belonged, but you might
> want to double check.

LGTM.

- Danilo
>
> Maxime