Re: [PATCH] drm/amdkfd: Use kvmalloc instead of kmalloc for VCRAT

2020-09-21 Thread Deucher, Alexander
[AMD Public Use]

Reviewed-by: Alex Deucher 

From: amd-gfx  on behalf of Kent Russell 

Sent: Monday, September 21, 2020 10:27 AM
To: amd-gfx@lists.freedesktop.org 
Cc: Russell, Kent 
Subject: [PATCH] drm/amdkfd: Use kvmalloc instead of kmalloc for VCRAT

Since we're dynamically allocating the CPU VCRAT, use kvmalloc in case
the allocation size is huge.

Signed-off-by: Kent Russell 
---
 drivers/gpu/drm/amd/amdkfd/kfd_crat.c | 9 +
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_crat.c 
b/drivers/gpu/drm/amd/amdkfd/kfd_crat.c
index 99182b8e9152..c50e9f634d6c 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_crat.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_crat.c
@@ -797,7 +797,8 @@ int kfd_create_crat_image_acpi(void **crat_image, size_t 
*size)
 return -ENODATA;
 }

-   pcrat_image = kmemdup(crat_table, crat_table->length, GFP_KERNEL);
+   pcrat_image = kvmalloc(crat_table->length, GFP_KERNEL);
+   memcpy(pcrat_image, crat_table, crat_table->length);
 if (!pcrat_image)
 return -ENOMEM;

@@ -1383,7 +1384,7 @@ int kfd_create_crat_image_virtual(void **crat_image, 
size_t *size,
 num_nodes * (sizeof(struct crat_subtype_computeunit) +
 sizeof(struct crat_subtype_memory) +
 (num_nodes - 1) * sizeof(struct crat_subtype_iolink));
-   pcrat_image = kmalloc(dyn_size, GFP_KERNEL);
+   pcrat_image = kvmalloc(dyn_size, GFP_KERNEL);
 if (!pcrat_image)
 return -ENOMEM;
 *size = dyn_size;
@@ -1393,7 +1394,7 @@ int kfd_create_crat_image_virtual(void **crat_image, 
size_t *size,
 case COMPUTE_UNIT_GPU:
 if (!kdev)
 return -EINVAL;
-   pcrat_image = kmalloc(VCRAT_SIZE_FOR_GPU, GFP_KERNEL);
+   pcrat_image = kvmalloc(VCRAT_SIZE_FOR_GPU, GFP_KERNEL);
 if (!pcrat_image)
 return -ENOMEM;
 *size = VCRAT_SIZE_FOR_GPU;
@@ -1412,7 +1413,7 @@ int kfd_create_crat_image_virtual(void **crat_image, 
size_t *size,
 if (!ret)
 *crat_image = pcrat_image;
 else
-   kfree(pcrat_image);
+   kvfree(pcrat_image);

 return ret;
 }
--
2.17.1

___
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.freedesktop.org%2Fmailman%2Flistinfo%2Famd-gfx&data=02%7C01%7Calexander.deucher%40amd.com%7C2c0550686c55482e784108d85e3a79b9%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637362952855598708&sdata=juwKVfB3gvGU5TkLKf9KYPdy90sgT80810dh91hpZSw%3D&reserved=0
___
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx


[PATCH] drm/amdkfd: Use kvmalloc instead of kmalloc for VCRAT

2020-09-21 Thread Kent Russell
Since we're dynamically allocating the CPU VCRAT, use kvmalloc in case
the allocation size is huge.

Signed-off-by: Kent Russell 
---
 drivers/gpu/drm/amd/amdkfd/kfd_crat.c | 9 +
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_crat.c 
b/drivers/gpu/drm/amd/amdkfd/kfd_crat.c
index 99182b8e9152..c50e9f634d6c 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_crat.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_crat.c
@@ -797,7 +797,8 @@ int kfd_create_crat_image_acpi(void **crat_image, size_t 
*size)
return -ENODATA;
}
 
-   pcrat_image = kmemdup(crat_table, crat_table->length, GFP_KERNEL);
+   pcrat_image = kvmalloc(crat_table->length, GFP_KERNEL);
+   memcpy(pcrat_image, crat_table, crat_table->length);
if (!pcrat_image)
return -ENOMEM;
 
@@ -1383,7 +1384,7 @@ int kfd_create_crat_image_virtual(void **crat_image, 
size_t *size,
num_nodes * (sizeof(struct crat_subtype_computeunit) +
sizeof(struct crat_subtype_memory) +
(num_nodes - 1) * sizeof(struct crat_subtype_iolink));
-   pcrat_image = kmalloc(dyn_size, GFP_KERNEL);
+   pcrat_image = kvmalloc(dyn_size, GFP_KERNEL);
if (!pcrat_image)
return -ENOMEM;
*size = dyn_size;
@@ -1393,7 +1394,7 @@ int kfd_create_crat_image_virtual(void **crat_image, 
size_t *size,
case COMPUTE_UNIT_GPU:
if (!kdev)
return -EINVAL;
-   pcrat_image = kmalloc(VCRAT_SIZE_FOR_GPU, GFP_KERNEL);
+   pcrat_image = kvmalloc(VCRAT_SIZE_FOR_GPU, GFP_KERNEL);
if (!pcrat_image)
return -ENOMEM;
*size = VCRAT_SIZE_FOR_GPU;
@@ -1412,7 +1413,7 @@ int kfd_create_crat_image_virtual(void **crat_image, 
size_t *size,
if (!ret)
*crat_image = pcrat_image;
else
-   kfree(pcrat_image);
+   kvfree(pcrat_image);
 
return ret;
 }
-- 
2.17.1

___
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx