drm/amdgpu: Use drm_calloc_large for VM page_tables array
diff mbox

Message ID 1453193986-1792-1-git-send-email-michel@daenzer.net
State New
Headers show

Commit Message

Michel Dänzer Jan. 19, 2016, 8:59 a.m. UTC
From: Michel Dänzer <michel.daenzer@amd.com>

It can be big, depending on the VM address space size, which is tunable
via the vm_size module parameter.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93721
Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

Comments

Christian König Jan. 19, 2016, 1:03 p.m. UTC | #1
Am 19.01.2016 um 09:59 schrieb Michel Dänzer:
> From: Michel Dänzer <michel.daenzer@amd.com>
>
> It can be big, depending on the VM address space size, which is tunable
> via the vm_size module parameter.
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93721
> Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>

I actually wanted to address this by reducing sizeof(struct 
amdgpu_vm_pt), but once more never got the time to do so.

Patch is Reviewed-by: Christian König <christian.koenig@amd.com>

> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 7 +++----
>   1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> index aefc668..9599f75 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> @@ -1282,7 +1282,7 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm)
>   {
>   	const unsigned align = min(AMDGPU_VM_PTB_ALIGN_SIZE,
>   		AMDGPU_VM_PTE_COUNT * 8);
> -	unsigned pd_size, pd_entries, pts_size;
> +	unsigned pd_size, pd_entries;
>   	int i, r;
>   
>   	for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
> @@ -1300,8 +1300,7 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm)
>   	pd_entries = amdgpu_vm_num_pdes(adev);
>   
>   	/* allocate page table array */
> -	pts_size = pd_entries * sizeof(struct amdgpu_vm_pt);
> -	vm->page_tables = kzalloc(pts_size, GFP_KERNEL);
> +	vm->page_tables = drm_calloc_large(pd_entries, sizeof(struct amdgpu_vm_pt));
>   	if (vm->page_tables == NULL) {
>   		DRM_ERROR("Cannot allocate memory for page table array\n");
>   		return -ENOMEM;
> @@ -1361,7 +1360,7 @@ void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm)
>   
>   	for (i = 0; i < amdgpu_vm_num_pdes(adev); i++)
>   		amdgpu_bo_unref(&vm->page_tables[i].entry.robj);
> -	kfree(vm->page_tables);
> +	drm_free_large(vm->page_tables);
>   
>   	amdgpu_bo_unref(&vm->page_directory);
>   	fence_put(vm->page_directory_fence);
Alex Deucher Jan. 19, 2016, 5:05 p.m. UTC | #2
On Tue, Jan 19, 2016 at 8:03 AM, Christian König
<deathsimple@vodafone.de> wrote:
> Am 19.01.2016 um 09:59 schrieb Michel Dänzer:
>>
>> From: Michel Dänzer <michel.daenzer@amd.com>
>>
>> It can be big, depending on the VM address space size, which is tunable
>> via the vm_size module parameter.
>>
>> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93721
>> Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
>
>
> I actually wanted to address this by reducing sizeof(struct amdgpu_vm_pt),
> but once more never got the time to do so.
>
> Patch is Reviewed-by: Christian König <christian.koenig@amd.com>
>

Applied.  Thanks,

Alex


>
>> ---
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 7 +++----
>>   1 file changed, 3 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
>> index aefc668..9599f75 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
>> @@ -1282,7 +1282,7 @@ int amdgpu_vm_init(struct amdgpu_device *adev,
>> struct amdgpu_vm *vm)
>>   {
>>         const unsigned align = min(AMDGPU_VM_PTB_ALIGN_SIZE,
>>                 AMDGPU_VM_PTE_COUNT * 8);
>> -       unsigned pd_size, pd_entries, pts_size;
>> +       unsigned pd_size, pd_entries;
>>         int i, r;
>>         for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
>> @@ -1300,8 +1300,7 @@ int amdgpu_vm_init(struct amdgpu_device *adev,
>> struct amdgpu_vm *vm)
>>         pd_entries = amdgpu_vm_num_pdes(adev);
>>         /* allocate page table array */
>> -       pts_size = pd_entries * sizeof(struct amdgpu_vm_pt);
>> -       vm->page_tables = kzalloc(pts_size, GFP_KERNEL);
>> +       vm->page_tables = drm_calloc_large(pd_entries, sizeof(struct
>> amdgpu_vm_pt));
>>         if (vm->page_tables == NULL) {
>>                 DRM_ERROR("Cannot allocate memory for page table
>> array\n");
>>                 return -ENOMEM;
>> @@ -1361,7 +1360,7 @@ void amdgpu_vm_fini(struct amdgpu_device *adev,
>> struct amdgpu_vm *vm)
>>         for (i = 0; i < amdgpu_vm_num_pdes(adev); i++)
>>                 amdgpu_bo_unref(&vm->page_tables[i].entry.robj);
>> -       kfree(vm->page_tables);
>> +       drm_free_large(vm->page_tables);
>>         amdgpu_bo_unref(&vm->page_directory);
>>         fence_put(vm->page_directory_fence);
>
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel

Patch
diff mbox

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index aefc668..9599f75 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -1282,7 +1282,7 @@  int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm)
 {
 	const unsigned align = min(AMDGPU_VM_PTB_ALIGN_SIZE,
 		AMDGPU_VM_PTE_COUNT * 8);
-	unsigned pd_size, pd_entries, pts_size;
+	unsigned pd_size, pd_entries;
 	int i, r;
 
 	for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
@@ -1300,8 +1300,7 @@  int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm)
 	pd_entries = amdgpu_vm_num_pdes(adev);
 
 	/* allocate page table array */
-	pts_size = pd_entries * sizeof(struct amdgpu_vm_pt);
-	vm->page_tables = kzalloc(pts_size, GFP_KERNEL);
+	vm->page_tables = drm_calloc_large(pd_entries, sizeof(struct amdgpu_vm_pt));
 	if (vm->page_tables == NULL) {
 		DRM_ERROR("Cannot allocate memory for page table array\n");
 		return -ENOMEM;
@@ -1361,7 +1360,7 @@  void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm)
 
 	for (i = 0; i < amdgpu_vm_num_pdes(adev); i++)
 		amdgpu_bo_unref(&vm->page_tables[i].entry.robj);
-	kfree(vm->page_tables);
+	drm_free_large(vm->page_tables);
 
 	amdgpu_bo_unref(&vm->page_directory);
 	fence_put(vm->page_directory_fence);