Commit 74a6c643 authored by Brian Welty's avatar Brian Welty Committed by Rodrigo Vivi
Browse files

drm/xe: Fix dequeue of access counter work item



The access counters worker function is fixed to advance the head pointer
when dequeuing from the acc_queue.  This now matches the similar logic in
get_pagefault().

Signed-off-by: default avatarBruce Chang <yu.bruce.chang@intel.com>
Signed-off-by: default avatarBrian Welty <brian.welty@intel.com>
Reviewed-by: default avatarStuart Summers <stuart.summers@intel.com>
Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
parent 81d11b9d
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -542,6 +542,8 @@ static int handle_acc(struct xe_gt *gt, struct acc *acc)

#define make_u64(hi__, low__)  ((u64)(hi__) << 32 | (u64)(low__))

#define ACC_MSG_LEN_DW        4

static int get_acc(struct acc_queue *acc_queue, struct acc *acc)
{
	const struct xe_guc_acc_desc *desc;
@@ -562,6 +564,9 @@ static int get_acc(struct acc_queue *acc_queue, struct acc *acc)
		acc->access_type = FIELD_GET(ACC_TYPE, desc->dw0);
		acc->va_range_base = make_u64(desc->dw3 & ACC_VIRTUAL_ADDR_RANGE_HI,
					      desc->dw2 & ACC_VIRTUAL_ADDR_RANGE_LO);

		acc_queue->head = (acc_queue->head + ACC_MSG_LEN_DW) %
				  ACC_QUEUE_NUM_DW;
	} else {
		ret = -1;
	}
@@ -589,8 +594,6 @@ static void acc_queue_work_func(struct work_struct *w)
	}
}

#define ACC_MSG_LEN_DW	4

static bool acc_queue_full(struct acc_queue *acc_queue)
{
	lockdep_assert_held(&acc_queue->lock);