]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
drm/xe: covert sysfs over to devm
authorMatthew Auld <matthew.auld@intel.com>
Wed, 22 May 2024 10:21:45 +0000 (11:21 +0100)
committerMatthew Auld <matthew.auld@intel.com>
Wed, 22 May 2024 12:22:38 +0000 (13:22 +0100)
Hotunplugging the device seems to result in stuff like:

kobject_add_internal failed for tile0 with -EEXIST, don't try to
register things with the same name in the same directory.

We only remove the sysfs as part of drmm, however that is tied to the
lifetime of the driver instance and not the device underneath. Attempt
to fix by using devm for all of the remaining sysfs stuff related to the
device.

Closes: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/1667
Closes: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/1432
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Andrzej Hajda <andrzej.hajda@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240522102143.128069-20-matthew.auld@intel.com
drivers/gpu/drm/xe/xe_device_sysfs.c
drivers/gpu/drm/xe/xe_gt_ccs_mode.c
drivers/gpu/drm/xe/xe_gt_freq.c
drivers/gpu/drm/xe/xe_gt_idle.c
drivers/gpu/drm/xe/xe_gt_sysfs.c
drivers/gpu/drm/xe/xe_gt_throttle_sysfs.c
drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.c
drivers/gpu/drm/xe/xe_tile_sysfs.c
drivers/gpu/drm/xe/xe_vram_freq.c

index 21677b8cd9771c93164b76634253755079988a2f..7375937934fae2f70c0e9c49919e88ef4a91ad95 100644 (file)
@@ -69,7 +69,7 @@ vram_d3cold_threshold_store(struct device *dev, struct device_attribute *attr,
 
 static DEVICE_ATTR_RW(vram_d3cold_threshold);
 
-static void xe_device_sysfs_fini(struct drm_device *drm, void *arg)
+static void xe_device_sysfs_fini(void *arg)
 {
        struct xe_device *xe = arg;
 
@@ -85,5 +85,5 @@ int xe_device_sysfs_init(struct xe_device *xe)
        if (ret)
                return ret;
 
-       return drmm_add_action_or_reset(&xe->drm, xe_device_sysfs_fini, xe);
+       return devm_add_action_or_reset(dev, xe_device_sysfs_fini, xe);
 }
index 167e041e51d236e31db95d044278ea629bafeae1..5d4cdbd69bc3a43f373a62e4376c2181caccc2ba 100644 (file)
@@ -152,7 +152,7 @@ static const struct attribute *gt_ccs_mode_attrs[] = {
        NULL,
 };
 
-static void xe_gt_ccs_mode_sysfs_fini(struct drm_device *drm, void *arg)
+static void xe_gt_ccs_mode_sysfs_fini(void *arg)
 {
        struct xe_gt *gt = arg;
 
@@ -184,5 +184,5 @@ int xe_gt_ccs_mode_sysfs_init(struct xe_gt *gt)
        if (err)
                return err;
 
-       return drmm_add_action_or_reset(&xe->drm, xe_gt_ccs_mode_sysfs_fini, gt);
+       return devm_add_action_or_reset(xe->drm.dev, xe_gt_ccs_mode_sysfs_fini, gt);
 }
index 855de40e40ea23f603aa8c633db45fe908cb6b86..e0305942644c6e520b94ef540c8c2ee935e81d26 100644 (file)
@@ -209,7 +209,7 @@ static const struct attribute *freq_attrs[] = {
        NULL
 };
 
-static void freq_fini(struct drm_device *drm, void *arg)
+static void freq_fini(void *arg)
 {
        struct kobject *kobj = arg;
 
@@ -237,7 +237,7 @@ int xe_gt_freq_init(struct xe_gt *gt)
        if (!gt->freq)
                return -ENOMEM;
 
-       err = drmm_add_action_or_reset(&xe->drm, freq_fini, gt->freq);
+       err = devm_add_action(xe->drm.dev, freq_fini, gt->freq);
        if (err)
                return err;
 
index a4f6f0a96d05ce57c026a8cd1c0622635c9e3e2f..749b7f4b688faac2d8909772a677867eadb86620 100644 (file)
@@ -145,7 +145,7 @@ static const struct attribute *gt_idle_attrs[] = {
        NULL,
 };
 
-static void gt_idle_sysfs_fini(struct drm_device *drm, void *arg)
+static void gt_idle_sysfs_fini(void *arg)
 {
        struct kobject *kobj = arg;
 
@@ -182,7 +182,7 @@ int xe_gt_idle_sysfs_init(struct xe_gt_idle *gtidle)
                return err;
        }
 
-       return drmm_add_action_or_reset(&xe->drm, gt_idle_sysfs_fini, kobj);
+       return devm_add_action_or_reset(xe->drm.dev, gt_idle_sysfs_fini, kobj);
 }
 
 void xe_gt_idle_enable_c6(struct xe_gt *gt)
index 1e5971072bc8c3d85e557eb71287280604b9ed2f..a05c3699e8b9149d9caa8683d832c8f8cb1244ac 100644 (file)
@@ -22,7 +22,7 @@ static const struct kobj_type xe_gt_sysfs_kobj_type = {
        .sysfs_ops = &kobj_sysfs_ops,
 };
 
-static void gt_sysfs_fini(struct drm_device *drm, void *arg)
+static void gt_sysfs_fini(void *arg)
 {
        struct xe_gt *gt = arg;
 
@@ -51,5 +51,5 @@ int xe_gt_sysfs_init(struct xe_gt *gt)
 
        gt->sysfs = &kg->base;
 
-       return drmm_add_action_or_reset(&xe->drm, gt_sysfs_fini, gt);
+       return devm_add_action(xe->drm.dev, gt_sysfs_fini, gt);
 }
index fbe21a8599ca41eead83877d4b615924711e0bf1..c9e04151286d7cb3f1a1dec6c71274fc778a14b6 100644 (file)
@@ -229,7 +229,7 @@ static const struct attribute_group throttle_group_attrs = {
        .attrs = throttle_attrs,
 };
 
-static void gt_throttle_sysfs_fini(struct drm_device *drm, void *arg)
+static void gt_throttle_sysfs_fini(void *arg)
 {
        struct xe_gt *gt = arg;
 
@@ -245,5 +245,5 @@ int xe_gt_throttle_sysfs_init(struct xe_gt *gt)
        if (err)
                return err;
 
-       return drmm_add_action_or_reset(&xe->drm, gt_throttle_sysfs_fini, gt);
+       return devm_add_action_or_reset(xe->drm.dev, gt_throttle_sysfs_fini, gt);
 }
index efce6c7dd2a282772d6f747c0faa1fc950c33f20..b53e8d2accdbd735e21531fa380a7a87f7bdeeb5 100644 (file)
@@ -492,7 +492,7 @@ static const struct attribute * const files[] = {
        NULL
 };
 
-static void kobj_xe_hw_engine_class_fini(struct drm_device *drm, void *arg)
+static void kobj_xe_hw_engine_class_fini(void *arg)
 {
        struct kobject *kobj = arg;
 
@@ -517,7 +517,7 @@ kobj_xe_hw_engine_class(struct xe_device *xe, struct kobject *parent, const char
        }
        keclass->xe = xe;
 
-       err = drmm_add_action_or_reset(&xe->drm, kobj_xe_hw_engine_class_fini,
+       err = devm_add_action_or_reset(xe->drm.dev, kobj_xe_hw_engine_class_fini,
                                       &keclass->base);
        if (err)
                return NULL;
@@ -525,7 +525,7 @@ kobj_xe_hw_engine_class(struct xe_device *xe, struct kobject *parent, const char
        return keclass;
 }
 
-static void hw_engine_class_defaults_fini(struct drm_device *drm, void *arg)
+static void hw_engine_class_defaults_fini(void *arg)
 {
        struct kobject *kobj = arg;
 
@@ -552,7 +552,7 @@ static int xe_add_hw_engine_class_defaults(struct xe_device *xe,
        if (err)
                goto err_object;
 
-       return drmm_add_action_or_reset(&xe->drm, hw_engine_class_defaults_fini, kobj);
+       return devm_add_action_or_reset(xe->drm.dev, hw_engine_class_defaults_fini, kobj);
 
 err_object:
        kobject_put(kobj);
@@ -611,7 +611,7 @@ static const struct kobj_type xe_hw_engine_sysfs_kobj_type = {
        .sysfs_ops = &xe_hw_engine_class_sysfs_ops,
 };
 
-static void hw_engine_class_sysfs_fini(struct drm_device *drm, void *arg)
+static void hw_engine_class_sysfs_fini(void *arg)
 {
        struct kobject *kobj = arg;
 
@@ -680,7 +680,7 @@ int xe_hw_engine_class_sysfs_init(struct xe_gt *gt)
                        goto err_object;
        }
 
-       return drmm_add_action_or_reset(&xe->drm, hw_engine_class_sysfs_fini, kobj);
+       return devm_add_action_or_reset(xe->drm.dev, hw_engine_class_sysfs_fini, kobj);
 
 err_object:
        kobject_put(kobj);
index 64661403afcd0d3b3ed5e3bcfec4d8622a0dcc0c..b804234a655160cbad1fe0d59a11f44b18c41428 100644 (file)
@@ -22,7 +22,7 @@ static const struct kobj_type xe_tile_sysfs_kobj_type = {
        .sysfs_ops = &kobj_sysfs_ops,
 };
 
-static void tile_sysfs_fini(struct drm_device *drm, void *arg)
+static void tile_sysfs_fini(void *arg)
 {
        struct xe_tile *tile = arg;
 
@@ -55,5 +55,5 @@ int xe_tile_sysfs_init(struct xe_tile *tile)
        if (err)
                return err;
 
-       return drmm_add_action_or_reset(&xe->drm, tile_sysfs_fini, tile);
+       return devm_add_action_or_reset(xe->drm.dev, tile_sysfs_fini, tile);
 }
index 3e21ddc6e60c13916f75921b68fc0e76f7d276a5..99ff95e408e00548325b1475e817bd4acf205bae 100644 (file)
@@ -87,7 +87,7 @@ static const struct attribute_group freq_group_attrs = {
        .attrs = freq_attrs,
 };
 
-static void vram_freq_sysfs_fini(struct drm_device *drm, void *arg)
+static void vram_freq_sysfs_fini(void *arg)
 {
        struct kobject *kobj = arg;
 
@@ -122,5 +122,5 @@ int xe_vram_freq_sysfs_init(struct xe_tile *tile)
                return err;
        }
 
-       return drmm_add_action_or_reset(&xe->drm, vram_freq_sysfs_fini, kobj);
+       return devm_add_action_or_reset(xe->drm.dev, vram_freq_sysfs_fini, kobj);
 }