]> www.infradead.org Git - users/hch/configfs.git/commitdiff
drm/xe: Add xe_gt_tlb_invalidation_fence_init helper
authorMatthew Brost <matthew.brost@intel.com>
Fri, 19 Jul 2024 17:29:02 +0000 (10:29 -0700)
committerMatthew Brost <matthew.brost@intel.com>
Sat, 20 Jul 2024 02:45:29 +0000 (19:45 -0700)
Other layers should not be touching struct xe_gt_tlb_invalidation_fence
directly, add helper for initialization.

v2:
 - Add dma_fence_get and list init to xe_gt_tlb_invalidation_fence_init

Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Nirmoy Das <nirmoy.das@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240719172905.1527927-2-matthew.brost@intel.com
drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
drivers/gpu/drm/xe/xe_pt.c

index d9359976ab8bb6cf6ef25035663036a2fcb37c19..92a18a0e4acd19172b5170c7aaa4c067c1f714a7 100644 (file)
@@ -508,3 +508,39 @@ int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len)
 
        return 0;
 }
+
+static const char *
+invalidation_fence_get_driver_name(struct dma_fence *dma_fence)
+{
+       return "xe";
+}
+
+static const char *
+invalidation_fence_get_timeline_name(struct dma_fence *dma_fence)
+{
+       return "invalidation_fence";
+}
+
+static const struct dma_fence_ops invalidation_fence_ops = {
+       .get_driver_name = invalidation_fence_get_driver_name,
+       .get_timeline_name = invalidation_fence_get_timeline_name,
+};
+
+/**
+ * xe_gt_tlb_invalidation_fence_init - Initialize TLB invalidation fence
+ * @gt: GT
+ * @fence: TLB invalidation fence to initialize
+ *
+ * Initialize TLB invalidation fence for use
+ */
+void xe_gt_tlb_invalidation_fence_init(struct xe_gt *gt,
+                                      struct xe_gt_tlb_invalidation_fence *fence)
+{
+       spin_lock_irq(&gt->tlb_invalidation.lock);
+       dma_fence_init(&fence->base, &invalidation_fence_ops,
+                      &gt->tlb_invalidation.lock,
+                      dma_fence_context_alloc(1), 1);
+       spin_unlock_irq(&gt->tlb_invalidation.lock);
+       INIT_LIST_HEAD(&fence->link);
+       dma_fence_get(&fence->base);
+}
index bf3bebd9f985ba6b04fe73d67611e295de665c65..948f4a2f52144e06c3cfdeef59ef14718592c7ef 100644 (file)
@@ -26,4 +26,7 @@ int xe_gt_tlb_invalidation_range(struct xe_gt *gt,
 int xe_gt_tlb_invalidation_wait(struct xe_gt *gt, int seqno);
 int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len);
 
+void xe_gt_tlb_invalidation_fence_init(struct xe_gt *gt,
+                                      struct xe_gt_tlb_invalidation_fence *fence);
+
 #endif /* _XE_GT_TLB_INVALIDATION_ */
index f391de9080330a09b9295f31e11bb2619dfef2ae..1caa99b22c73093bd6e2438dcf3b2570b733ab51 100644 (file)
@@ -1317,23 +1317,6 @@ struct invalidation_fence {
        u32 asid;
 };
 
-static const char *
-invalidation_fence_get_driver_name(struct dma_fence *dma_fence)
-{
-       return "xe";
-}
-
-static const char *
-invalidation_fence_get_timeline_name(struct dma_fence *dma_fence)
-{
-       return "invalidation_fence";
-}
-
-static const struct dma_fence_ops invalidation_fence_ops = {
-       .get_driver_name = invalidation_fence_get_driver_name,
-       .get_timeline_name = invalidation_fence_get_timeline_name,
-};
-
 static void invalidation_fence_cb(struct dma_fence *fence,
                                  struct dma_fence_cb *cb)
 {
@@ -1372,15 +1355,8 @@ static void invalidation_fence_init(struct xe_gt *gt,
 
        trace_xe_gt_tlb_invalidation_fence_create(gt_to_xe(gt), &ifence->base);
 
-       spin_lock_irq(&gt->tlb_invalidation.lock);
-       dma_fence_init(&ifence->base.base, &invalidation_fence_ops,
-                      &gt->tlb_invalidation.lock,
-                      dma_fence_context_alloc(1), 1);
-       spin_unlock_irq(&gt->tlb_invalidation.lock);
-
-       INIT_LIST_HEAD(&ifence->base.link);
+       xe_gt_tlb_invalidation_fence_init(gt, &ifence->base);
 
-       dma_fence_get(&ifence->base.base);      /* Ref for caller */
        ifence->fence = fence;
        ifence->gt = gt;
        ifence->start = start;