In some configuration, there is CPU-only (no memory) numa node. Don't
create crat memory sub-table for such node.

Signed-off-by: Oak Zeng <oak.z...@amd.com>
---
 drivers/gpu/drm/amd/amdkfd/kfd_crat.c | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_crat.c 
b/drivers/gpu/drm/amd/amdkfd/kfd_crat.c
index 56e6dff..420a312 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_crat.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_crat.c
@@ -1583,7 +1583,9 @@ static int kfd_fill_cu_for_cpu(int numa_node_id, int 
*avail_size,
  *     @avail_size: Available size in the memory
  *     @sub_type_hdr: Memory into which compute info will be filled in
  *
- *     Return 0 if successful else return -ve value
+ *     Return 0 if successful
+ *     Return -ENOMEM if not enough space in caller allocated crat table
+ *     Return -1 if this numa node has no memory
  */
 static int kfd_fill_mem_info_for_cpu(int numa_node_id, int *avail_size,
                        int proximity_domain,
@@ -1615,6 +1617,9 @@ static int kfd_fill_mem_info_for_cpu(int numa_node_id, 
int *avail_size,
                mem_in_bytes += 
zone_managed_pages(&pgdat->node_zones[zone_type]);
        mem_in_bytes <<= PAGE_SHIFT;
 
+       if (mem_in_bytes == 0)
+               return -1;
+
        sub_type_hdr->length_low = lower_32_bits(mem_in_bytes);
        sub_type_hdr->length_high = upper_32_bits(mem_in_bytes);
        sub_type_hdr->proximity_domain = proximity_domain;
@@ -1742,15 +1747,19 @@ static int kfd_create_vcrat_image_cpu(void 
*pcrat_image, size_t *size)
                ret = kfd_fill_mem_info_for_cpu(numa_node_id, &avail_size,
                        crat_table->num_domains,
                        (struct crat_subtype_memory *)sub_type_hdr);
-               if (ret < 0) {
+               if (ret == -ENOMEM) {
                        pr_err("fill mem for cpu failed\n");
                        return ret;
                }
-               crat_table->length += sub_type_hdr->length;
-               crat_table->total_entries++;
 
-               sub_type_hdr = (typeof(sub_type_hdr))((char *)sub_type_hdr +
-                       sub_type_hdr->length);
+               /* ret == -1: this node has no memory */
+               if (ret == 0) {
+                       crat_table->length += sub_type_hdr->length;
+                       crat_table->total_entries++;
+
+                       sub_type_hdr = (typeof(sub_type_hdr))((char 
*)sub_type_hdr +
+                                       sub_type_hdr->length);
+               }
 
                if (kfd_numa_node_to_apic_id(numa_node_id) != -1) {
                        /* Fill in Subtype: IO Link */
-- 
2.7.4

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to