• Matthew Auld's avatar
    drm/xe: fix tlb_invalidation_seqno_past() · a2db3192
    Matthew Auld authored
    Checking seqno_recv >= seqno looks like it will incorrectly report true
    when the seqno has wrapped (not unlikely given
    TLB_INVALIDATION_SEQNO_MAX). Calling xe_gt_tlb_invalidation_wait() might
    then return before the flush has been completed by the GuC.
    
    Fix this by treating a large negative delta as an indication that the
    seqno has wrapped around. Similar to how we treat a large positive delta
    as an indication that the seqno_recv must have wrapped around, but in
    that case the seqno has likely also signalled.
    
    It looks like we could also potentially make the seqno use the full
    32bits as supported by the GuC.
    Signed-off-by: default avatarMatthew Auld <matthew.auld@intel.com>
    Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
    Cc: Matthew Brost <matthew.brost@intel.com>
    Reviewed-by: default avatarMatthew Brost <matthew.brost@intel.com>
    Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
    a2db3192
xe_gt_tlb_invalidation.c 9.84 KB