aboutsummaryrefslogtreecommitdiff
path: root/drivers/gpu
diff options
context:
space:
mode:
authorMatthew Auld <[email protected]>2023-04-18 13:41:47 +0100
committerRodrigo Vivi <[email protected]>2023-12-19 18:31:41 -0500
commitfa4fe0db0885b089200cc336207e40f6902ebbb2 (patch)
tree247509c9681937b2fed99fbf2aab10a49316b69f /drivers/gpu
parenta8a39c15b011b8ed986f55c6e52e015b0d81da8a (diff)
drm/xe/tlb: fix expected_seqno calculation
It looks like when tlb_invalidation.seqno overflows TLB_INVALIDATION_SEQNO_MAX, we start counting again from one, as per send_tlb_invalidation(). This is also inline with initial value we give it in xe_gt_tlb_invalidation_init(). When calculating the expected_seqno we should also take this into account. While we are here also print out the values if we ever trigger the warning. v2 (José): - drm_WARN_ON() is preferred over plain WARN_ON(), since it gives information on the originating device. Closes: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/248 Signed-off-by: Matthew Auld <[email protected]> Cc: José Roberto de Souza <[email protected]> Reviewed-by: José Roberto de Souza <[email protected]> Signed-off-by: Rodrigo Vivi <[email protected]>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
index f279e21300aa..604f189dbd70 100644
--- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
+++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
@@ -319,7 +319,12 @@ int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len)
/* Sanity check on seqno */
expected_seqno = (gt->tlb_invalidation.seqno_recv + 1) %
TLB_INVALIDATION_SEQNO_MAX;
- XE_WARN_ON(expected_seqno != msg[0]);
+ if (!expected_seqno)
+ expected_seqno = 1;
+ if (drm_WARN_ON(&gt->xe->drm, expected_seqno != msg[0])) {
+ drm_err(&gt->xe->drm, "TLB expected_seqno(%d) != msg(%u)\n",
+ expected_seqno, msg[0]);
+ }
gt->tlb_invalidation.seqno_recv = msg[0];
smp_wmb();