Re: [PATCH 2/2] drm/amdgpu: Pessimistic availability based on rounded up allocations

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Your patches are missing Signed-off-by lines. If you use "git commit -s", git should add those automatically for your convenience. Other than that, the patches look good to me. With Signed-off-by added, the series is

Reviewed-by: Felix Kuehling <Felix.Kuehling@xxxxxxx>


Am 2022-07-28 um 23:16 schrieb Daniel Phillips:
Seperately accumulate a statistic of rounded up allocations to use
to report availability, with a view to increasing the likelihood a
buffer object can be successfully allocated at exactly the size
reported by the availability API.
---
  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h       | 1 +
  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 4 +++-
  2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
index 73bf8b5f2aa9..781274be5f27 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
@@ -96,6 +96,7 @@ struct amdgpu_amdkfd_fence {
  struct amdgpu_kfd_dev {
  	struct kfd_dev *dev;
  	uint64_t vram_used;
+	uint64_t vram_used_aligned;
  	bool init_complete;
  	struct work_struct reset_work;
  };
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
index 014a594899fb..e5ea897f56bc 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
@@ -181,6 +181,7 @@ static int amdgpu_amdkfd_reserve_mem_limit(struct amdgpu_device *adev,
  	 * memory, TTM memory and GPU memory as computed above
  	 */
  	adev->kfd.vram_used += vram_needed;
+	adev->kfd.vram_used_aligned += ALIGN(vram_needed, VRAM_AVAILABLITY_ALIGN);
  	kfd_mem_limit.system_mem_used += system_mem_needed;
  	kfd_mem_limit.ttm_mem_used += ttm_mem_needed;
@@ -199,6 +200,7 @@ static void unreserve_mem_limit(struct amdgpu_device *adev,
  		kfd_mem_limit.ttm_mem_used -= size;
  	} else if (alloc_flag & KFD_IOC_ALLOC_MEM_FLAGS_VRAM) {
  		adev->kfd.vram_used -= size;
+		adev->kfd.vram_used_aligned -= ALIGN(size, VRAM_AVAILABLITY_ALIGN);
  	} else if (alloc_flag & KFD_IOC_ALLOC_MEM_FLAGS_USERPTR) {
  		kfd_mem_limit.system_mem_used -= size;
  	} else if (!(alloc_flag &
@@ -1644,7 +1646,7 @@ size_t amdgpu_amdkfd_get_available_memory(struct amdgpu_device *adev)
  	size_t available;
  	spin_lock(&kfd_mem_limit.mem_limit_lock);
  	available = adev->gmc.real_vram_size
-		- adev->kfd.vram_used
+		- adev->kfd.vram_used_aligned
  		- atomic64_read(&adev->vram_pin_size)
  		- reserved_for_pt;
  	spin_unlock(&kfd_mem_limit.mem_limit_lock);



[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux