]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
drm/xe/tlb: fix expected_seqno calculation
authorMatthew Auld <matthew.auld@intel.com>
Tue, 18 Apr 2023 12:41:47 +0000 (13:41 +0100)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Tue, 19 Dec 2023 23:31:41 +0000 (18:31 -0500)
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 <matthew.auld@intel.com>
Cc: José Roberto de Souza <jose.souza@intel.com>
Reviewed-by: José Roberto de Souza <jose.souza@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c

index f279e21300aa9f6a6d48b28890834cd73a86b61d..604f189dbd703047ce65a46711eb85953d6b1732 100644 (file)
@@ -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();