static bool force_contiguous(u32 bo_flags)
 {
+       if (bo_flags & XE_BO_FLAG_STOLEN)
+               return true; /* users expect this */
+       else if (bo_flags & XE_BO_FLAG_PINNED &&
+                !(bo_flags & XE_BO_FLAG_PINNED_LATE_RESTORE))
+               return true; /* needs vmap */
+
        /*
         * For eviction / restore on suspend / resume objects pinned in VRAM
         * must be contiguous, also only contiguous BOs support xe_bo_vmap.
         */
-       return bo_flags & (XE_BO_FLAG_PINNED | XE_BO_FLAG_GGTT);
+       return bo_flags & XE_BO_FLAG_NEEDS_CPU_ACCESS &&
+              bo_flags & XE_BO_FLAG_PINNED;
 }
 
 static void add_vram(struct xe_device *xe, struct xe_bo *bo,