diff mbox series

[11/13] drm/nouveau: switch the TTM backends to self alloc

Message ID 20210430092508.60710-11-christian.koenig@amd.com (mailing list archive)
State New, archived
Headers show
Series [01/13] drm/ttm: add ttm_sys_manager v2 | expand

Commit Message

Christian König April 30, 2021, 9:25 a.m. UTC
Similar to the TTM range manager.

Signed-off-by: Christian König <christian.koenig@amd.com>
---
 drivers/gpu/drm/nouveau/nouveau_mem.h | 1 +
 drivers/gpu/drm/nouveau/nouveau_ttm.c | 4 ++++
 2 files changed, 5 insertions(+)

Comments

Matthew Auld April 30, 2021, 3:02 p.m. UTC | #1
On Fri, 30 Apr 2021 at 10:25, Christian König
<ckoenig.leichtzumerken@gmail.com> wrote:
>
> Similar to the TTM range manager.
>
> Signed-off-by: Christian König <christian.koenig@amd.com>
> ---
>  drivers/gpu/drm/nouveau/nouveau_mem.h | 1 +
>  drivers/gpu/drm/nouveau/nouveau_ttm.c | 4 ++++
>  2 files changed, 5 insertions(+)
>
> diff --git a/drivers/gpu/drm/nouveau/nouveau_mem.h b/drivers/gpu/drm/nouveau/nouveau_mem.h
> index 7df3848e85aa..3a6a1be2ed52 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_mem.h
> +++ b/drivers/gpu/drm/nouveau/nouveau_mem.h
> @@ -13,6 +13,7 @@ nouveau_mem(struct ttm_resource *reg)
>  }
>
>  struct nouveau_mem {
> +       struct ttm_resource base;
>         struct nouveau_cli *cli;
>         u8 kind;
>         u8 comp;
> diff --git a/drivers/gpu/drm/nouveau/nouveau_ttm.c b/drivers/gpu/drm/nouveau/nouveau_ttm.c
> index 15c7627f8f58..5e5ce2ec89f0 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_ttm.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_ttm.c
> @@ -59,6 +59,8 @@ nouveau_vram_manager_new(struct ttm_resource_manager *man,
>         if (ret)
>                 return ret;
>
> +       ttm_resource_init(bo, place, reg->mm_node);
> +

What happened here? I assume this needs to be nouveau_mem.base not the mm_node?

>         ret = nouveau_mem_vram(reg, nvbo->contig, nvbo->page);
>         if (ret) {
>                 nouveau_mem_del(reg);
> @@ -87,6 +89,7 @@ nouveau_gart_manager_new(struct ttm_resource_manager *man,
>         if (ret)
>                 return ret;
>
> +       ttm_resource_init(bo, place, reg->mm_node);
>         reg->start = 0;
>         return 0;
>  }
> @@ -112,6 +115,7 @@ nv04_gart_manager_new(struct ttm_resource_manager *man,
>         if (ret)
>                 return ret;
>
> +       ttm_resource_init(bo, place, reg->mm_node);
>         ret = nvif_vmm_get(&mem->cli->vmm.vmm, PTES, false, 12, 0,
>                            (long)reg->num_pages << PAGE_SHIFT, &mem->vma[0]);
>         if (ret) {
> --
> 2.25.1
>
Christian König May 3, 2021, 11:14 a.m. UTC | #2
Am 30.04.21 um 17:02 schrieb Matthew Auld:
> On Fri, 30 Apr 2021 at 10:25, Christian König
> <ckoenig.leichtzumerken@gmail.com> wrote:
>> Similar to the TTM range manager.
>>
>> Signed-off-by: Christian König <christian.koenig@amd.com>
>> ---
>>   drivers/gpu/drm/nouveau/nouveau_mem.h | 1 +
>>   drivers/gpu/drm/nouveau/nouveau_ttm.c | 4 ++++
>>   2 files changed, 5 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/nouveau/nouveau_mem.h b/drivers/gpu/drm/nouveau/nouveau_mem.h
>> index 7df3848e85aa..3a6a1be2ed52 100644
>> --- a/drivers/gpu/drm/nouveau/nouveau_mem.h
>> +++ b/drivers/gpu/drm/nouveau/nouveau_mem.h
>> @@ -13,6 +13,7 @@ nouveau_mem(struct ttm_resource *reg)
>>   }
>>
>>   struct nouveau_mem {
>> +       struct ttm_resource base;
>>          struct nouveau_cli *cli;
>>          u8 kind;
>>          u8 comp;
>> diff --git a/drivers/gpu/drm/nouveau/nouveau_ttm.c b/drivers/gpu/drm/nouveau/nouveau_ttm.c
>> index 15c7627f8f58..5e5ce2ec89f0 100644
>> --- a/drivers/gpu/drm/nouveau/nouveau_ttm.c
>> +++ b/drivers/gpu/drm/nouveau/nouveau_ttm.c
>> @@ -59,6 +59,8 @@ nouveau_vram_manager_new(struct ttm_resource_manager *man,
>>          if (ret)
>>                  return ret;
>>
>> +       ttm_resource_init(bo, place, reg->mm_node);
>> +
> What happened here? I assume this needs to be nouveau_mem.base not the mm_node?

Same like the other backends I'm first changing the allocation so that 
we allocate ttm_resource and the private housekeeping together and then 
flip the switch in the last patch.

So reg->mm_node is temporary pointing to the ttm_resource object until 
it is removed in the last patch.

Christian.

>
>>          ret = nouveau_mem_vram(reg, nvbo->contig, nvbo->page);
>>          if (ret) {
>>                  nouveau_mem_del(reg);
>> @@ -87,6 +89,7 @@ nouveau_gart_manager_new(struct ttm_resource_manager *man,
>>          if (ret)
>>                  return ret;
>>
>> +       ttm_resource_init(bo, place, reg->mm_node);
>>          reg->start = 0;
>>          return 0;
>>   }
>> @@ -112,6 +115,7 @@ nv04_gart_manager_new(struct ttm_resource_manager *man,
>>          if (ret)
>>                  return ret;
>>
>> +       ttm_resource_init(bo, place, reg->mm_node);
>>          ret = nvif_vmm_get(&mem->cli->vmm.vmm, PTES, false, 12, 0,
>>                             (long)reg->num_pages << PAGE_SHIFT, &mem->vma[0]);
>>          if (ret) {
>> --
>> 2.25.1
>>
Matthew Auld May 5, 2021, 4:46 p.m. UTC | #3
On Mon, 3 May 2021 at 12:14, Christian König
<ckoenig.leichtzumerken@gmail.com> wrote:
>
> Am 30.04.21 um 17:02 schrieb Matthew Auld:
> > On Fri, 30 Apr 2021 at 10:25, Christian König
> > <ckoenig.leichtzumerken@gmail.com> wrote:
> >> Similar to the TTM range manager.
> >>
> >> Signed-off-by: Christian König <christian.koenig@amd.com>
> >> ---
> >>   drivers/gpu/drm/nouveau/nouveau_mem.h | 1 +
> >>   drivers/gpu/drm/nouveau/nouveau_ttm.c | 4 ++++
> >>   2 files changed, 5 insertions(+)
> >>
> >> diff --git a/drivers/gpu/drm/nouveau/nouveau_mem.h b/drivers/gpu/drm/nouveau/nouveau_mem.h
> >> index 7df3848e85aa..3a6a1be2ed52 100644
> >> --- a/drivers/gpu/drm/nouveau/nouveau_mem.h
> >> +++ b/drivers/gpu/drm/nouveau/nouveau_mem.h
> >> @@ -13,6 +13,7 @@ nouveau_mem(struct ttm_resource *reg)
> >>   }
> >>
> >>   struct nouveau_mem {
> >> +       struct ttm_resource base;
> >>          struct nouveau_cli *cli;
> >>          u8 kind;
> >>          u8 comp;
> >> diff --git a/drivers/gpu/drm/nouveau/nouveau_ttm.c b/drivers/gpu/drm/nouveau/nouveau_ttm.c
> >> index 15c7627f8f58..5e5ce2ec89f0 100644
> >> --- a/drivers/gpu/drm/nouveau/nouveau_ttm.c
> >> +++ b/drivers/gpu/drm/nouveau/nouveau_ttm.c
> >> @@ -59,6 +59,8 @@ nouveau_vram_manager_new(struct ttm_resource_manager *man,
> >>          if (ret)
> >>                  return ret;
> >>
> >> +       ttm_resource_init(bo, place, reg->mm_node);
> >> +
> > What happened here? I assume this needs to be nouveau_mem.base not the mm_node?
>
> Same like the other backends I'm first changing the allocation so that
> we allocate ttm_resource and the private housekeeping together and then
> flip the switch in the last patch.
>
> So reg->mm_node is temporary pointing to the ttm_resource object until
> it is removed in the last patch.

Ok, makes sense,
Reviewed-by: Matthew Auld <matthew.auld@intel.com>

>
> Christian.
>
> >
> >>          ret = nouveau_mem_vram(reg, nvbo->contig, nvbo->page);
> >>          if (ret) {
> >>                  nouveau_mem_del(reg);
> >> @@ -87,6 +89,7 @@ nouveau_gart_manager_new(struct ttm_resource_manager *man,
> >>          if (ret)
> >>                  return ret;
> >>
> >> +       ttm_resource_init(bo, place, reg->mm_node);
> >>          reg->start = 0;
> >>          return 0;
> >>   }
> >> @@ -112,6 +115,7 @@ nv04_gart_manager_new(struct ttm_resource_manager *man,
> >>          if (ret)
> >>                  return ret;
> >>
> >> +       ttm_resource_init(bo, place, reg->mm_node);
> >>          ret = nvif_vmm_get(&mem->cli->vmm.vmm, PTES, false, 12, 0,
> >>                             (long)reg->num_pages << PAGE_SHIFT, &mem->vma[0]);
> >>          if (ret) {
> >> --
> >> 2.25.1
> >>
>
diff mbox series

Patch

diff --git a/drivers/gpu/drm/nouveau/nouveau_mem.h b/drivers/gpu/drm/nouveau/nouveau_mem.h
index 7df3848e85aa..3a6a1be2ed52 100644
--- a/drivers/gpu/drm/nouveau/nouveau_mem.h
+++ b/drivers/gpu/drm/nouveau/nouveau_mem.h
@@ -13,6 +13,7 @@  nouveau_mem(struct ttm_resource *reg)
 }
 
 struct nouveau_mem {
+	struct ttm_resource base;
 	struct nouveau_cli *cli;
 	u8 kind;
 	u8 comp;
diff --git a/drivers/gpu/drm/nouveau/nouveau_ttm.c b/drivers/gpu/drm/nouveau/nouveau_ttm.c
index 15c7627f8f58..5e5ce2ec89f0 100644
--- a/drivers/gpu/drm/nouveau/nouveau_ttm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_ttm.c
@@ -59,6 +59,8 @@  nouveau_vram_manager_new(struct ttm_resource_manager *man,
 	if (ret)
 		return ret;
 
+	ttm_resource_init(bo, place, reg->mm_node);
+
 	ret = nouveau_mem_vram(reg, nvbo->contig, nvbo->page);
 	if (ret) {
 		nouveau_mem_del(reg);
@@ -87,6 +89,7 @@  nouveau_gart_manager_new(struct ttm_resource_manager *man,
 	if (ret)
 		return ret;
 
+	ttm_resource_init(bo, place, reg->mm_node);
 	reg->start = 0;
 	return 0;
 }
@@ -112,6 +115,7 @@  nv04_gart_manager_new(struct ttm_resource_manager *man,
 	if (ret)
 		return ret;
 
+	ttm_resource_init(bo, place, reg->mm_node);
 	ret = nvif_vmm_get(&mem->cli->vmm.vmm, PTES, false, 12, 0,
 			   (long)reg->num_pages << PAGE_SHIFT, &mem->vma[0]);
 	if (ret) {