drm/amdkfd: Fix sibling_map[] size
authorHarish Kasiviswanathan <Harish.Kasiviswanathan@amd.com>
Sat, 9 Dec 2017 04:08:57 +0000 (23:08 -0500)
committerOded Gabbay <oded.gabbay@gmail.com>
Sat, 9 Dec 2017 04:08:57 +0000 (23:08 -0500)
Change kfd_cache_properties.sibling_map[256] to
kfd_cache_properties.sibling_map[32]. Since, CRAT uses bitmap for
sibling_map, it is more efficient to use bitmap in the kfd structure
also.

Signed-off-by: Harish Kasiviswanathan <Harish.Kasiviswanathan@amd.com>
Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
Reviewed-by: Oded Gabbay <oded.gabbay@gmail.com>
Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
drivers/gpu/drm/amd/amdkfd/kfd_topology.c
drivers/gpu/drm/amd/amdkfd/kfd_topology.h

index 17e8daf..622feda 100644 (file)
@@ -263,7 +263,7 @@ static ssize_t kfd_cache_show(struct kobject *kobj, struct attribute *attr,
                char *buffer)
 {
        ssize_t ret;
-       uint32_t i;
+       uint32_t i, j;
        struct kfd_cache_properties *cache;
 
        /* Making sure that the buffer is an empty string */
@@ -281,12 +281,18 @@ static ssize_t kfd_cache_show(struct kobject *kobj, struct attribute *attr,
        sysfs_show_32bit_prop(buffer, "latency", cache->cache_latency);
        sysfs_show_32bit_prop(buffer, "type", cache->cache_type);
        snprintf(buffer, PAGE_SIZE, "%ssibling_map ", buffer);
-       for (i = 0; i < KFD_TOPOLOGY_CPU_SIBLINGS; i++)
-               ret = snprintf(buffer, PAGE_SIZE, "%s%d%s",
-                               buffer, cache->sibling_map[i],
-                               (i == KFD_TOPOLOGY_CPU_SIBLINGS-1) ?
-                                               "\n" : ",");
-
+       for (i = 0; i < CRAT_SIBLINGMAP_SIZE; i++)
+               for (j = 0; j < sizeof(cache->sibling_map[0])*8; j++) {
+                       /* Check each bit */
+                       if (cache->sibling_map[i] & (1 << j))
+                               ret = snprintf(buffer, PAGE_SIZE,
+                                        "%s%d%s", buffer, 1, ",");
+                       else
+                               ret = snprintf(buffer, PAGE_SIZE,
+                                        "%s%d%s", buffer, 0, ",");
+               }
+       /* Replace the last "," with end of line */
+       *(buffer + strlen(buffer) - 1) = 0xA;
        return ret;
 }
 
index 17b2d43..50a741b 100644 (file)
@@ -91,8 +91,6 @@ struct kfd_mem_properties {
        struct attribute        attr;
 };
 
-#define KFD_TOPOLOGY_CPU_SIBLINGS 256
-
 #define HSA_CACHE_TYPE_DATA            0x00000001
 #define HSA_CACHE_TYPE_INSTRUCTION     0x00000002
 #define HSA_CACHE_TYPE_CPU             0x00000004
@@ -109,7 +107,7 @@ struct kfd_cache_properties {
        uint32_t                cache_assoc;
        uint32_t                cache_latency;
        uint32_t                cache_type;
-       uint8_t                 sibling_map[KFD_TOPOLOGY_CPU_SIBLINGS];
+       uint8_t                 sibling_map[CRAT_SIBLINGMAP_SIZE];
        struct kobject          *kobj;
        struct attribute        attr;
 };