Commit 062a6b83 authored by Matt Roper's avatar Matt Roper
Browse files

drm/xe/drm_client: Use scope-based cleanup



Use scope-based cleanup for forcewake and runtime PM.

v2:
 - Use xe_force_wake_release_only rather than a custom one-off class for
   "any engine" forcewake.  (Gustavo)

Reviewed-by: default avatarGustavo Sousa <gustavo.sousa@intel.com>
Link: https://patch.msgid.link/20251118164338.3572146-44-matthew.d.roper@intel.com


Signed-off-by: default avatarMatt Roper <matthew.d.roper@intel.com>
parent 1fe7ea32
Loading
Loading
Loading
Loading
+16 −21
Original line number Diff line number Diff line
@@ -321,7 +321,6 @@ static void show_run_ticks(struct drm_printer *p, struct drm_file *file)
	struct xe_hw_engine *hwe;
	struct xe_exec_queue *q;
	u64 gpu_timestamp;
	struct xe_force_wake_ref fw_ref;

	/*
	 * RING_TIMESTAMP registers are inaccessible in VF mode.
@@ -338,12 +337,10 @@ static void show_run_ticks(struct drm_printer *p, struct drm_file *file)
	wait_var_event(&xef->exec_queue.pending_removal,
		       !atomic_read(&xef->exec_queue.pending_removal));

	xe_pm_runtime_get(xe);
	fw_ref = force_wake_get_any_engine(xe, &hwe);
	if (!hwe) {
		xe_pm_runtime_put(xe);
	scoped_guard(xe_pm_runtime, xe) {
		CLASS(xe_force_wake_release_only, fw_ref)(force_wake_get_any_engine(xe, &hwe));
		if (!hwe)
			return;
	}

		/* Accumulate all the exec queues from this client */
		mutex_lock(&xef->exec_queue.lock);
@@ -359,9 +356,7 @@ static void show_run_ticks(struct drm_printer *p, struct drm_file *file)
		mutex_unlock(&xef->exec_queue.lock);

		gpu_timestamp = xe_hw_engine_read_timestamp(hwe);

	xe_force_wake_put(gt_to_fw(hwe->gt), fw_ref.domains);
	xe_pm_runtime_put(xe);
	}

	for (class = 0; class < XE_ENGINE_CLASS_MAX; class++) {
		const char *class_name;