#include "xe_gt_tlb_invalidation.h"
 
+#include "xe_device.h"
 #include "xe_gt.h"
 #include "xe_guc.h"
 #include "xe_guc_ct.h"
         * in order which they currently are, if that changes the algorithm will
         * need to be updated.
         */
+
+       xe_device_mem_access_get(gt->xe);
        mutex_lock(&guc->ct.lock);
        seqno = gt->tlb_invalidation.seqno;
        if (fence) {
        if (ret < 0 && fence)
                invalidation_fence_signal(fence);
        mutex_unlock(&guc->ct.lock);
+       xe_device_mem_access_put(gt->xe);
 
        return ret;
 }
 
                }
        }
 
-       xe_device_mem_access_get(ct_to_xe(ct));
 retry:
        ret = has_room(ct, len + GUC_CTB_HDR_LEN, g2h_len);
        if (unlikely(ret))
-               goto put_wa;
+               goto out;
 
        ret = h2g_write(ct, action, len, g2h_fence ? g2h_fence->seqno : 0,
                        !!g2h_fence);
        if (unlikely(ret)) {
                if (ret == -EAGAIN)
                        goto retry;
-               goto put_wa;
+               goto out;
        }
 
        g2h_reserve_space(ct, g2h_len, num_g2h);
        xe_guc_notify(ct_to_guc(ct));
-put_wa:
-       xe_device_mem_access_put(ct_to_xe(ct));
 out:
-
        return ret;
 }
 
 
        XE_BUG_ON(g2h_len && g2h_fence);
        lockdep_assert_held(&ct->lock);
+       xe_device_assert_mem_access(ct_to_xe(ct));
 
 try_again:
        ret = __guc_ct_send_locked(ct, action, len, g2h_len, num_g2h,
 
        XE_BUG_ON(g2h_len && g2h_fence);
 
+       xe_device_mem_access_get(ct_to_xe(ct));
+
        mutex_lock(&ct->lock);
        ret = guc_ct_send_locked(ct, action, len, g2h_len, num_g2h, g2h_fence);
        mutex_unlock(&ct->lock);
 
+       xe_device_mem_access_put(ct_to_xe(ct));
+
        return ret;
 }