Unverified Commit 16b57c90 authored by Rodrigo Vivi's avatar Rodrigo Vivi
Browse files

drm/xe: Convert mem_access_if_ongoing to direct xe_pm_runtime_get_if_active



Now that assert_mem_access is relying directly on the pm_runtime state
instead of the counters, there's no reason why we cannot use
the pm_runtime functions directly.

Reviewed-by: default avatarMatthew Auld <matthew.auld@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240417203952.25503-8-rodrigo.vivi@intel.com


Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
parent a3822910
Loading
Loading
Loading
Loading
+0 −17
Original line number Diff line number Diff line
@@ -733,23 +733,6 @@ void xe_device_assert_mem_access(struct xe_device *xe)
	xe_assert(xe, !xe_pm_runtime_suspended(xe));
}

bool xe_device_mem_access_get_if_ongoing(struct xe_device *xe)
{
	bool active;

	if (xe_pm_read_callback_task(xe) == current)
		return true;

	active = xe_pm_runtime_get_if_active(xe);
	if (active) {
		int ref = atomic_inc_return(&xe->mem_access.ref);

		xe_assert(xe, ref != S32_MAX);
	}

	return active;
}

void xe_device_mem_access_get(struct xe_device *xe)
{
	int ref;
+0 −1
Original line number Diff line number Diff line
@@ -134,7 +134,6 @@ static inline struct xe_force_wake *gt_to_fw(struct xe_gt *gt)
}

void xe_device_mem_access_get(struct xe_device *xe);
bool xe_device_mem_access_get_if_ongoing(struct xe_device *xe);
void xe_device_mem_access_put(struct xe_device *xe);

void xe_device_assert_mem_access(struct xe_device *xe);
+4 −4
Original line number Diff line number Diff line
@@ -1210,7 +1210,7 @@ void xe_guc_ct_fast_path(struct xe_guc_ct *ct)
	bool ongoing;
	int len;

	ongoing = xe_device_mem_access_get_if_ongoing(ct_to_xe(ct));
	ongoing = xe_pm_runtime_get_if_active(ct_to_xe(ct));
	if (!ongoing && xe_pm_read_callback_task(ct_to_xe(ct)) == NULL)
		return;

@@ -1223,7 +1223,7 @@ void xe_guc_ct_fast_path(struct xe_guc_ct *ct)
	spin_unlock(&ct->fast_lock);

	if (ongoing)
		xe_device_mem_access_put(xe);
		xe_pm_runtime_put(xe);
}

/* Returns less than zero on error, 0 on done, 1 on more available */
@@ -1281,7 +1281,7 @@ static void g2h_worker_func(struct work_struct *w)
	 * responses, if the worker here is blocked on those callbacks
	 * completing, creating a deadlock.
	 */
	ongoing = xe_device_mem_access_get_if_ongoing(ct_to_xe(ct));
	ongoing = xe_pm_runtime_get_if_active(ct_to_xe(ct));
	if (!ongoing && xe_pm_read_callback_task(ct_to_xe(ct)) == NULL)
		return;

@@ -1299,7 +1299,7 @@ static void g2h_worker_func(struct work_struct *w)
	} while (ret == 1);

	if (ongoing)
		xe_device_mem_access_put(ct_to_xe(ct));
		xe_pm_runtime_put(ct_to_xe(ct));
}

static void guc_ctb_snapshot_capture(struct xe_device *xe, struct guc_ctb *ctb,