]> git.dujemihanovic.xyz Git - linux.git/commitdiff
drm/amdkfd: Update KFD TTM mem limit
authorMukul Joshi <mukul.joshi@amd.com>
Tue, 25 Apr 2023 18:19:05 +0000 (14:19 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 9 Jun 2023 13:24:52 +0000 (09:24 -0400)
Use the helper function in TTM to get TTM memory
limit and set KFD's internal mem limit. This ensures
that KFD's TTM mem limit and actual TTM mem limit are
exactly same.

Signed-off-by: Mukul Joshi <mukul.joshi@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c

index fed8bb9a721f763fb647f68847d2ec9177704af8..a46285841d175e236cf33f77cd1168f399834192 100644 (file)
@@ -53,7 +53,6 @@ int amdgpu_amdkfd_init(void)
        amdgpu_amdkfd_total_mem_size *= si.mem_unit;
 
        ret = kgd2kfd_init();
-       amdgpu_amdkfd_gpuvm_init_mem_limits();
        kfd_initialized = !ret;
 
        return ret;
@@ -143,6 +142,8 @@ void amdgpu_amdkfd_device_init(struct amdgpu_device *adev)
        int i;
        int last_valid_bit;
 
+       amdgpu_amdkfd_gpuvm_init_mem_limits();
+
        if (adev->kfd.dev) {
                struct kgd2kfd_shared_resources gpu_resources = {
                        .compute_vmid_bitmap =
index 4432e169fae8f776ef796f86f68b79a6c4e0bff7..c3990a5eb7c698cd04ffbc5a45e2ca1b28d0df51 100644 (file)
@@ -36,6 +36,7 @@
 #include <uapi/linux/kfd_ioctl.h>
 #include "amdgpu_xgmi.h"
 #include "kfd_smi_events.h"
+#include <drm/ttm/ttm_tt.h>
 
 /* Userptr restore delay, just long enough to allow consecutive VM
  * changes to accumulate
@@ -110,13 +111,16 @@ void amdgpu_amdkfd_gpuvm_init_mem_limits(void)
        struct sysinfo si;
        uint64_t mem;
 
+       if (kfd_mem_limit.max_system_mem_limit)
+               return;
+
        si_meminfo(&si);
        mem = si.freeram - si.freehigh;
        mem *= si.mem_unit;
 
        spin_lock_init(&kfd_mem_limit.mem_limit_lock);
        kfd_mem_limit.max_system_mem_limit = mem - (mem >> 4);
-       kfd_mem_limit.max_ttm_mem_limit = (mem >> 1) - (mem >> 3);
+       kfd_mem_limit.max_ttm_mem_limit = ttm_tt_pages_limit() << PAGE_SHIFT;
        pr_debug("Kernel memory limit %lluM, TTM limit %lluM\n",
                (kfd_mem_limit.max_system_mem_limit >> 20),
                (kfd_mem_limit.max_ttm_mem_limit >> 20));