summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/xe/xe_userptr.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/xe/xe_userptr.h')
-rw-r--r--drivers/gpu/drm/xe/xe_userptr.h31
1 files changed, 30 insertions, 1 deletions
diff --git a/drivers/gpu/drm/xe/xe_userptr.h b/drivers/gpu/drm/xe/xe_userptr.h
index ef801234991e..2a3cd1b5efbb 100644
--- a/drivers/gpu/drm/xe/xe_userptr.h
+++ b/drivers/gpu/drm/xe/xe_userptr.h
@@ -14,6 +14,8 @@
#include <drm/drm_gpusvm.h>
+#include "xe_tlb_inval_types.h"
+
struct xe_vm;
struct xe_vma;
struct xe_userptr_vma;
@@ -56,7 +58,34 @@ struct xe_userptr {
* @notifier: MMU notifier for user pointer (invalidation call back)
*/
struct mmu_interval_notifier notifier;
-
+ /**
+ * @finish: MMU notifier finish structure for two-pass invalidation.
+ * Embedded here to avoid allocation in the notifier callback.
+ * Protected by struct xe_vm::svm.gpusvm.notifier_lock in write mode
+ * alternatively by the same lock in read mode *and* the vm resv held.
+ */
+ struct mmu_interval_notifier_finish finish;
+ /**
+ * @inval_batch: TLB invalidation batch for deferred completion.
+ * Stores an in-flight TLB invalidation submitted during a two-pass
+ * notifier so the wait can be deferred to a subsequent pass, allowing
+ * multiple GPUs to be signalled before any of them are waited on.
+ * Protected using the same locking as @finish.
+ */
+ struct xe_tlb_inval_batch inval_batch;
+ /**
+ * @finish_inuse: Whether @finish is currently in use by an in-progress
+ * two-pass invalidation.
+ * Protected using the same locking as @finish.
+ */
+ bool finish_inuse;
+ /**
+ * @tlb_inval_submitted: Whether a TLB invalidation has been submitted
+ * via @inval_batch and is pending completion. When set, the next pass
+ * must call xe_tlb_inval_batch_wait() before reusing @inval_batch.
+ * Protected using the same locking as @finish.
+ */
+ bool tlb_inval_submitted;
/**
* @initial_bind: user pointer has been bound at least once.
* write: vm->svm.gpusvm.notifier_lock in read mode and vm->resv held.