Commit c60f91bb authored by Matthew Auld's avatar Matthew Auld
Browse files

drm/xe: covert sysfs over to devm

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: default avatarMatthew Auld <matthew.auld@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: default avatarAndrzej Hajda <andrzej.hajda@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240522102143.128069-20-matthew.auld@intel.com
parent 4465b8c6
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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);
}
+2 −2
Original line number Diff line number Diff line
@@ -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);
}
+2 −2
Original line number Diff line number Diff line
@@ -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;

+2 −2
Original line number Diff line number Diff line
@@ -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)
+2 −2
Original line number Diff line number Diff line
@@ -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);
}
Loading