Commit aa7d26c3 authored by Jeff Layton's avatar Jeff Layton Committed by Jakub Kicinski
Browse files

ref_tracker: add a static classname string to each ref_tracker_dir



A later patch in the series will be adding debugfs files for each
ref_tracker that get created in ref_tracker_dir_init(). The format will
be "class@%px". The current "name" string can vary between
ref_tracker_dir objects of the same type, so it's not suitable for this
purpose.

Add a new "class" string to the ref_tracker dir that describes the
the type of object (sans any individual info for that object).

Also, in the i915 driver, gate the creation of debugfs files on whether
the dentry pointer is still set to NULL. CI has shown that the
ref_tracker_dir can be initialized more than once.

Signed-off-by: default avatarJeff Layton <jlayton@kernel.org>
Link: https://patch.msgid.link/20250618-reftrack-dbgfs-v15-4-24fc37ead144@kernel.org


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 49c94af0
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1920,7 +1920,7 @@ drm_dp_tunnel_mgr_create(struct drm_device *dev, int max_group_count)
	}

#ifdef CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG
	ref_tracker_dir_init(&mgr->ref_tracker, 16, "dptun");
	ref_tracker_dir_init(&mgr->ref_tracker, 16, "drm_dptun", "dptun");
#endif

	for (i = 0; i < max_group_count; i++) {
+3 −1
Original line number Diff line number Diff line
@@ -59,7 +59,9 @@ static struct drm_i915_private *rpm_to_i915(struct intel_runtime_pm *rpm)

static void init_intel_runtime_pm_wakeref(struct intel_runtime_pm *rpm)
{
	ref_tracker_dir_init(&rpm->debug, INTEL_REFTRACK_DEAD_COUNT, dev_name(rpm->kdev));
	if (!rpm->debug.class)
		ref_tracker_dir_init(&rpm->debug, INTEL_REFTRACK_DEAD_COUNT,
				     "intel_runtime_pm", dev_name(rpm->kdev));
}

static intel_wakeref_t
+2 −1
Original line number Diff line number Diff line
@@ -114,7 +114,8 @@ void __intel_wakeref_init(struct intel_wakeref *wf,
			 "wakeref.work", &key->work, 0);

#if IS_ENABLED(CONFIG_DRM_I915_DEBUG_WAKEREF)
	ref_tracker_dir_init(&wf->debug, INTEL_REFTRACK_DEAD_COUNT, name);
	if (!wf->debug.class)
		ref_tracker_dir_init(&wf->debug, INTEL_REFTRACK_DEAD_COUNT, "intel_wakeref", name);
#endif
}

+4 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ struct ref_tracker_dir {
	bool			dead;
	struct list_head	list; /* List of active trackers */
	struct list_head	quarantine; /* List of dead trackers */
	const char		*class; /* object classname */
	char			name[32];
#endif
};
@@ -27,6 +28,7 @@ struct ref_tracker_dir {

static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir,
					unsigned int quarantine_count,
					const char *class,
					const char *name)
{
	INIT_LIST_HEAD(&dir->list);
@@ -36,6 +38,7 @@ static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir,
	dir->dead = false;
	refcount_set(&dir->untracked, 1);
	refcount_set(&dir->no_tracker, 1);
	dir->class = class;
	strscpy(dir->name, name, sizeof(dir->name));
	stack_depot_init();
}
@@ -60,6 +63,7 @@ int ref_tracker_free(struct ref_tracker_dir *dir,

static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir,
					unsigned int quarantine_count,
					const char *class,
					const char *name)
{
}
+1 −1
Original line number Diff line number Diff line
@@ -64,7 +64,7 @@ static int __init test_ref_tracker_init(void)
{
	int i;

	ref_tracker_dir_init(&ref_dir, 100, "selftest");
	ref_tracker_dir_init(&ref_dir, 100, "selftest", "selftest");

	timer_setup(&test_ref_tracker_timer, test_ref_tracker_timer_func, 0);
	mod_timer(&test_ref_tracker_timer, jiffies + 1);
Loading