Skip to content

Commit

Permalink
drm/xe: covert sysfs over to devm
Browse files Browse the repository at this point in the history
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 <[email protected]>
Cc: Rodrigo Vivi <[email protected]>
Reviewed-by: Andrzej Hajda <[email protected]>
Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
  • Loading branch information
matt-auld committed May 22, 2024
1 parent 4465b8c commit c60f91b
Show file tree
Hide file tree
Showing 9 changed files with 22 additions and 22 deletions.
4 changes: 2 additions & 2 deletions drivers/gpu/drm/xe/xe_device_sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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);
}
4 changes: 2 additions & 2 deletions drivers/gpu/drm/xe/xe_gt_ccs_mode.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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);
}
4 changes: 2 additions & 2 deletions drivers/gpu/drm/xe/xe_gt_freq.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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;

Expand Down
4 changes: 2 additions & 2 deletions drivers/gpu/drm/xe/xe_gt_idle.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions drivers/gpu/drm/xe/xe_gt_sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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);
}
4 changes: 2 additions & 2 deletions drivers/gpu/drm/xe/xe_gt_throttle_sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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);
}
12 changes: 6 additions & 6 deletions drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -517,15 +517,15 @@ 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;

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;

Expand All @@ -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);
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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);
Expand Down
4 changes: 2 additions & 2 deletions drivers/gpu/drm/xe/xe_tile_sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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);
}
4 changes: 2 additions & 2 deletions drivers/gpu/drm/xe/xe_vram_freq.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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);
}

0 comments on commit c60f91b

Please sign in to comment.