Re: [PATCH v3] drm/amdgpu: Fix VRAM BO swap issue

2022-09-26 Thread Christian König

Am 26.09.22 um 17:04 schrieb Arunpravin Paneer Selvam:



On 9/26/2022 12:01 PM, Christian König wrote:

Am 26.09.22 um 07:25 schrieb Arunpravin Paneer Selvam:

DRM buddy manager allocates the contiguous memory requests in
a single block or multiple blocks. So for the ttm move operation
(incase of low vram memory) we should consider all the blocks to
compute the total memory size which compared with the struct
ttm_resource num_pages in order to verify that the blocks are
contiguous for the eviction process.

v2: Added a Fixes tag
v3: Rewrite the code to save a bit of calculations and
 variables (Christian)

Fixes: c9cad937c0c5 ("drm/amdgpu: add drm buddy support to amdgpu")
Signed-off-by: Arunpravin Paneer Selvam 



Reviewed-by: Christian König 


Shall I push this patch into amd-staging-drm-next?


If it applies cleanly then I think so, yes.

Another possibility would be through drm-misc-fixes, but since it is a 
pure amdgpu fix we should try to avoid that.


Christian.



Thanks,
Arun.



---
  drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 17 -
  1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c

index b1c455329023..dc262d2c2925 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -424,8 +424,9 @@ static int amdgpu_move_blit(struct 
ttm_buffer_object *bo,

  static bool amdgpu_mem_visible(struct amdgpu_device *adev,
 struct ttm_resource *mem)
  {
-    uint64_t mem_size = (u64)mem->num_pages << PAGE_SHIFT;
+    u64 mem_size = (u64)mem->num_pages << PAGE_SHIFT;
  struct amdgpu_res_cursor cursor;
+    u64 end;
    if (mem->mem_type == TTM_PL_SYSTEM ||
  mem->mem_type == TTM_PL_TT)
@@ -434,12 +435,18 @@ static bool amdgpu_mem_visible(struct 
amdgpu_device *adev,

  return false;
    amdgpu_res_first(mem, 0, mem_size, &cursor);
+    end = cursor.start + cursor.size;
+    while (cursor.remaining) {
+    amdgpu_res_next(&cursor, cursor.size);
  -    /* ttm_resource_ioremap only supports contiguous memory */
-    if (cursor.size != mem_size)
-    return false;
+    /* ttm_resource_ioremap only supports contiguous memory */
+    if (end != cursor.start)
+    return false;
+
+    end = cursor.start + cursor.size;
+    }
  -    return cursor.start + cursor.size <= 
adev->gmc.visible_vram_size;

+    return end <= adev->gmc.visible_vram_size;
  }
    /*








Re: [PATCH v3] drm/amdgpu: Fix VRAM BO swap issue

2022-09-26 Thread Arunpravin Paneer Selvam




On 9/26/2022 12:01 PM, Christian König wrote:

Am 26.09.22 um 07:25 schrieb Arunpravin Paneer Selvam:

DRM buddy manager allocates the contiguous memory requests in
a single block or multiple blocks. So for the ttm move operation
(incase of low vram memory) we should consider all the blocks to
compute the total memory size which compared with the struct
ttm_resource num_pages in order to verify that the blocks are
contiguous for the eviction process.

v2: Added a Fixes tag
v3: Rewrite the code to save a bit of calculations and
 variables (Christian)

Fixes: c9cad937c0c5 ("drm/amdgpu: add drm buddy support to amdgpu")
Signed-off-by: Arunpravin Paneer Selvam 



Reviewed-by: Christian König 


Shall I push this patch into amd-staging-drm-next?

Thanks,
Arun.



---
  drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 17 -
  1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c

index b1c455329023..dc262d2c2925 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -424,8 +424,9 @@ static int amdgpu_move_blit(struct 
ttm_buffer_object *bo,

  static bool amdgpu_mem_visible(struct amdgpu_device *adev,
 struct ttm_resource *mem)
  {
-    uint64_t mem_size = (u64)mem->num_pages << PAGE_SHIFT;
+    u64 mem_size = (u64)mem->num_pages << PAGE_SHIFT;
  struct amdgpu_res_cursor cursor;
+    u64 end;
    if (mem->mem_type == TTM_PL_SYSTEM ||
  mem->mem_type == TTM_PL_TT)
@@ -434,12 +435,18 @@ static bool amdgpu_mem_visible(struct 
amdgpu_device *adev,

  return false;
    amdgpu_res_first(mem, 0, mem_size, &cursor);
+    end = cursor.start + cursor.size;
+    while (cursor.remaining) {
+    amdgpu_res_next(&cursor, cursor.size);
  -    /* ttm_resource_ioremap only supports contiguous memory */
-    if (cursor.size != mem_size)
-    return false;
+    /* ttm_resource_ioremap only supports contiguous memory */
+    if (end != cursor.start)
+    return false;
+
+    end = cursor.start + cursor.size;
+    }
  -    return cursor.start + cursor.size <= adev->gmc.visible_vram_size;
+    return end <= adev->gmc.visible_vram_size;
  }
    /*






Re: [PATCH v3] drm/amdgpu: Fix VRAM BO swap issue

2022-09-25 Thread Christian König

Am 26.09.22 um 07:25 schrieb Arunpravin Paneer Selvam:

DRM buddy manager allocates the contiguous memory requests in
a single block or multiple blocks. So for the ttm move operation
(incase of low vram memory) we should consider all the blocks to
compute the total memory size which compared with the struct
ttm_resource num_pages in order to verify that the blocks are
contiguous for the eviction process.

v2: Added a Fixes tag
v3: Rewrite the code to save a bit of calculations and
 variables (Christian)

Fixes: c9cad937c0c5 ("drm/amdgpu: add drm buddy support to amdgpu")
Signed-off-by: Arunpravin Paneer Selvam 


Reviewed-by: Christian König 


---
  drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 17 -
  1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index b1c455329023..dc262d2c2925 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -424,8 +424,9 @@ static int amdgpu_move_blit(struct ttm_buffer_object *bo,
  static bool amdgpu_mem_visible(struct amdgpu_device *adev,
   struct ttm_resource *mem)
  {
-   uint64_t mem_size = (u64)mem->num_pages << PAGE_SHIFT;
+   u64 mem_size = (u64)mem->num_pages << PAGE_SHIFT;
struct amdgpu_res_cursor cursor;
+   u64 end;
  
  	if (mem->mem_type == TTM_PL_SYSTEM ||

mem->mem_type == TTM_PL_TT)
@@ -434,12 +435,18 @@ static bool amdgpu_mem_visible(struct amdgpu_device *adev,
return false;
  
  	amdgpu_res_first(mem, 0, mem_size, &cursor);

+   end = cursor.start + cursor.size;
+   while (cursor.remaining) {
+   amdgpu_res_next(&cursor, cursor.size);
  
-	/* ttm_resource_ioremap only supports contiguous memory */

-   if (cursor.size != mem_size)
-   return false;
+   /* ttm_resource_ioremap only supports contiguous memory */
+   if (end != cursor.start)
+   return false;
+
+   end = cursor.start + cursor.size;
+   }
  
-	return cursor.start + cursor.size <= adev->gmc.visible_vram_size;

+   return end <= adev->gmc.visible_vram_size;
  }
  
  /*