Commit 2054d38c authored by Lucas De Marchi's avatar Lucas De Marchi
Browse files

drm/xe: Use q->xef for accessing xe file



No need to traverse through the vm object as each exec queue maintains a
reference to xe_file. Also improve/simplify the comment on why xef is
checked.

Reviewed-by: default avatarUmesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20241218053122.2730195-2-lucas.demarchi@intel.com


Signed-off-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
parent 4ca1fd41
Loading
Loading
Loading
Loading
+4 −8
Original line number Diff line number Diff line
@@ -770,25 +770,21 @@ bool xe_exec_queue_is_idle(struct xe_exec_queue *q)
void xe_exec_queue_update_run_ticks(struct xe_exec_queue *q)
{
	struct xe_device *xe = gt_to_xe(q->gt);
	struct xe_file *xef;
	struct xe_lrc *lrc;
	u32 old_ts, new_ts;
	int idx;

	/*
	 * Jobs that are run during driver load may use an exec_queue, but are
	 * not associated with a user xe file, so avoid accumulating busyness
	 * for kernel specific work.
	 * Jobs that are executed by kernel doesn't have a corresponding xe_file
	 * and thus are not accounted.
	 */
	if (!q->vm || !q->vm->xef)
	if (!q->xef)
		return;

	/* Synchronize with unbind while holding the xe file open */
	if (!drm_dev_enter(&xe->drm, &idx))
		return;

	xef = q->vm->xef;

	/*
	 * Only sample the first LRC. For parallel submission, all of them are
	 * scheduled together and we compensate that below by multiplying by
@@ -799,7 +795,7 @@ void xe_exec_queue_update_run_ticks(struct xe_exec_queue *q)
	 */
	lrc = q->lrc[0];
	new_ts = xe_lrc_update_timestamp(lrc, &old_ts);
	xef->run_ticks[q->class] += (new_ts - old_ts) * q->width;
	q->xef->run_ticks[q->class] += (new_ts - old_ts) * q->width;

	drm_dev_exit(idx);
}