Dynamically initialize IP instance attributes. This eliminates bugs
stemming from adding new attributes to an IP instance.
Cc: Alex Deucher <Alexander.Deucher@amd.com>
Reported-by: Tom StDenis <tom.stdenis@amd.com>
Fixes: 4d7ba312dd1f ("drm/amdgpu: Add "harvest" to IP discovery sysfs")
Signed-off-by: Luben Tuikov <luben.tuikov@amd.com>
Acked-by: Alex Deucher <Alexander.Deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
        __ATTR_RO(base_addr),
 };
 
-static struct attribute *ip_hw_instance_attrs[] = {
-       &ip_hw_attr[0].attr,
-       &ip_hw_attr[1].attr,
-       &ip_hw_attr[2].attr,
-       &ip_hw_attr[3].attr,
-       &ip_hw_attr[4].attr,
-       &ip_hw_attr[5].attr,
-       &ip_hw_attr[6].attr,
-       NULL,
-};
+static struct attribute *ip_hw_instance_attrs[ARRAY_SIZE(ip_hw_attr) + 1];
 ATTRIBUTE_GROUPS(ip_hw_instance);
 
 #define to_ip_hw_instance(x) container_of(x, struct ip_hw_instance, kobj)
 static int amdgpu_discovery_sysfs_init(struct amdgpu_device *adev)
 {
        struct kset *die_kset;
-       int res;
+       int res, ii;
 
        adev->ip_top = kzalloc(sizeof(*adev->ip_top), GFP_KERNEL);
        if (!adev->ip_top)
                goto Err;
        }
 
+       for (ii = 0; ii < ARRAY_SIZE(ip_hw_attr); ii++)
+               ip_hw_instance_attrs[ii] = &ip_hw_attr[ii].attr;
+       ip_hw_instance_attrs[ii] = NULL;
+
        res = amdgpu_discovery_sysfs_recurse(adev);
 
        return res;