[PATCH 3/3] drm/amdgpu: Use ttm_pages_limit to override vram reporting

Rajneesh Bhardwaj rajneesh.bhardwaj at amd.com
Fri Sep 29 18:18:56 UTC 2023


On GFXIP9.4.3 APU, allow the memory reporting as per the ttm pages
limit in NPS1 mode.

Signed-off-by: Rajneesh Bhardwaj <rajneesh.bhardwaj at amd.com>
---
 drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 23 +++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
index 005ea719d2fd..fadc4d2ed071 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
@@ -25,6 +25,7 @@
 #include <linux/pci.h>
 
 #include <drm/drm_cache.h>
+#include <drm/ttm/ttm_tt.h>
 
 #include "amdgpu.h"
 #include "gmc_v9_0.h"
@@ -1896,7 +1897,8 @@ static void
 gmc_v9_0_init_acpi_mem_ranges(struct amdgpu_device *adev,
 			      struct amdgpu_mem_partition_info *mem_ranges)
 {
-	int num_ranges = 0, ret, mem_groups;
+	int num_ranges = 0, ret, num_nodes;
+	uint64_t node_size_ttm_override = 0;
 	struct amdgpu_numa_info numa_info;
 	int node_ids[MAX_MEM_RANGES];
 	int num_xcc, xcc_id;
@@ -1904,7 +1906,8 @@ gmc_v9_0_init_acpi_mem_ranges(struct amdgpu_device *adev,
 
 	num_xcc = NUM_XCC(adev->gfx.xcc_mask);
 	xcc_mask = (1U << num_xcc) - 1;
-	mem_groups = hweight32(adev->aid_mask);
+	num_nodes = num_online_nodes();
+	node_size_ttm_override = (ttm_tt_pages_limit() << PAGE_SHIFT) / num_nodes;
 
 	for_each_inst(xcc_id, xcc_mask)	{
 		ret = amdgpu_acpi_get_mem_info(adev, xcc_id, &numa_info);
@@ -1912,7 +1915,6 @@ gmc_v9_0_init_acpi_mem_ranges(struct amdgpu_device *adev,
 			continue;
 
 		if (numa_info.nid == NUMA_NO_NODE) {
-			mem_ranges[0].size = numa_info.size;
 			mem_ranges[0].numa.node = numa_info.nid;
 			num_ranges = 1;
 			break;
@@ -1930,11 +1932,16 @@ gmc_v9_0_init_acpi_mem_ranges(struct amdgpu_device *adev,
 
 	adev->gmc.num_mem_partitions = num_ranges;
 
-	/* If there is only partition, don't use entire size */
-	if (adev->gmc.num_mem_partitions == 1) {
-		mem_ranges[0].size = mem_ranges[0].size * (mem_groups - 1);
-		do_div(mem_ranges[0].size, mem_groups);
-	}
+	/* In NPS1 mode, we should restrict the vram reporting
+	 * tied to the ttm_pages_limit which is 1/2 of the
+	 * system memory. For other partition modes, the HBM is
+	 * uniformly divided already per numa node reported. If
+	 * user wants to go beyond the default ttm limit and
+	 * maximize the ROCm allocations, they can go up to max
+	 * ttm and sysmem limits.
+	 */
+	if (adev->gmc.num_mem_partitions == 1)
+		mem_ranges[0].size = node_size_ttm_override;
 }
 
 static void
-- 
2.34.1



More information about the amd-gfx mailing list