Commit aec208ee authored by Daniel Phillips's avatar Daniel Phillips Committed by Alex Deucher

drm/amdgpu: Remove rounding from vram allocation path

Rounding up allocations in the allocation path caused test regressions,
so now just round in the availability path.
Signed-off-by: default avatarDaniel Phillips <daniel.phillips@amd.com>
Reviewed-by: default avatarFelix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent f5996677
...@@ -40,10 +40,10 @@ ...@@ -40,10 +40,10 @@
#define AMDGPU_USERPTR_RESTORE_DELAY_MS 1 #define AMDGPU_USERPTR_RESTORE_DELAY_MS 1
/* /*
* Align VRAM allocations to 2MB to avoid fragmentation caused by 4K allocations in the tail 2MB * Align VRAM availability to 2MB to avoid fragmentation caused by 4K allocations in the tail 2MB
* BO chunk * BO chunk
*/ */
#define VRAM_ALLOCATION_ALIGN (1 << 21) #define VRAM_AVAILABLITY_ALIGN (1 << 21)
/* Impose limit on how much memory KFD can use */ /* Impose limit on how much memory KFD can use */
static struct { static struct {
...@@ -149,7 +149,7 @@ int amdgpu_amdkfd_reserve_mem_limit(struct amdgpu_device *adev, ...@@ -149,7 +149,7 @@ int amdgpu_amdkfd_reserve_mem_limit(struct amdgpu_device *adev,
* to avoid fragmentation caused by 4K allocations in the tail * to avoid fragmentation caused by 4K allocations in the tail
* 2M BO chunk. * 2M BO chunk.
*/ */
vram_needed = ALIGN(size, VRAM_ALLOCATION_ALIGN); vram_needed = size;
} else if (alloc_flag & KFD_IOC_ALLOC_MEM_FLAGS_USERPTR) { } else if (alloc_flag & KFD_IOC_ALLOC_MEM_FLAGS_USERPTR) {
system_mem_needed = size; system_mem_needed = size;
} else if (!(alloc_flag & } else if (!(alloc_flag &
...@@ -204,7 +204,7 @@ void amdgpu_amdkfd_unreserve_mem_limit(struct amdgpu_device *adev, ...@@ -204,7 +204,7 @@ void amdgpu_amdkfd_unreserve_mem_limit(struct amdgpu_device *adev,
WARN_ONCE(!adev, WARN_ONCE(!adev,
"adev reference can't be null when alloc mem flags vram is set"); "adev reference can't be null when alloc mem flags vram is set");
if (adev) if (adev)
adev->kfd.vram_used -= ALIGN(size, VRAM_ALLOCATION_ALIGN); adev->kfd.vram_used -= size;
} else if (alloc_flag & KFD_IOC_ALLOC_MEM_FLAGS_USERPTR) { } else if (alloc_flag & KFD_IOC_ALLOC_MEM_FLAGS_USERPTR) {
kfd_mem_limit.system_mem_used -= size; kfd_mem_limit.system_mem_used -= size;
} else if (!(alloc_flag & } else if (!(alloc_flag &
...@@ -1608,7 +1608,6 @@ size_t amdgpu_amdkfd_get_available_memory(struct amdgpu_device *adev) ...@@ -1608,7 +1608,6 @@ size_t amdgpu_amdkfd_get_available_memory(struct amdgpu_device *adev)
uint64_t reserved_for_pt = uint64_t reserved_for_pt =
ESTIMATE_PT_SIZE(amdgpu_amdkfd_total_mem_size); ESTIMATE_PT_SIZE(amdgpu_amdkfd_total_mem_size);
size_t available; size_t available;
spin_lock(&kfd_mem_limit.mem_limit_lock); spin_lock(&kfd_mem_limit.mem_limit_lock);
available = adev->gmc.real_vram_size available = adev->gmc.real_vram_size
- adev->kfd.vram_used - adev->kfd.vram_used
...@@ -1616,7 +1615,7 @@ size_t amdgpu_amdkfd_get_available_memory(struct amdgpu_device *adev) ...@@ -1616,7 +1615,7 @@ size_t amdgpu_amdkfd_get_available_memory(struct amdgpu_device *adev)
- reserved_for_pt; - reserved_for_pt;
spin_unlock(&kfd_mem_limit.mem_limit_lock); spin_unlock(&kfd_mem_limit.mem_limit_lock);
return ALIGN_DOWN(available, VRAM_ALLOCATION_ALIGN); return ALIGN_DOWN(available, VRAM_AVAILABLITY_ALIGN);
} }
int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu( int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment