From 74a6c6438ee7b53e7711fc0b7000ed42edd7dad5 Mon Sep 17 00:00:00 2001 From: Brian Welty Date: Tue, 31 Oct 2023 14:12:16 -0700 Subject: 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: Bruce Chang Signed-off-by: Brian Welty Reviewed-by: Stuart Summers Signed-off-by: Rodrigo Vivi --- drivers/gpu/drm/xe/xe_gt_pagefault.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'drivers/gpu/drm/xe/xe_gt_pagefault.c') diff --git a/drivers/gpu/drm/xe/xe_gt_pagefault.c b/drivers/gpu/drm/xe/xe_gt_pagefault.c index 4e33ef8c9d6a..018edf731ae5 100644 --- a/drivers/gpu/drm/xe/xe_gt_pagefault.c +++ b/drivers/gpu/drm/xe/xe_gt_pagefault.c @@ -542,6 +542,8 @@ unlock_vm: #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); -- cgit