From: Christian König <[email protected]>

This is quite controversial because it adds another lock which is held during
page table updates, but I don't see much other option.

Signed-off-by: Christian König <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c
index 651a746..a5a560b 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c
@@ -196,6 +196,24 @@ static void amdgpu_mn_invalidate_range_start(struct 
mmu_notifier *mn,
 
                amdgpu_mn_invalidate_node(node, start, end);
        }
+}
+
+/**
+ * amdgpu_mn_invalidate_range_end - callback to notify about mm change
+ *
+ * @mn: our notifier
+ * @mn: the mm this callback is about
+ * @start: start of updated range
+ * @end: end of updated range
+ *
+ * Release the lock again to allow new command submissions.
+ */
+static void amdgpu_mn_invalidate_range_end(struct mmu_notifier *mn,
+                                          struct mm_struct *mm,
+                                          unsigned long start,
+                                          unsigned long end)
+{
+       struct amdgpu_mn *rmn = container_of(mn, struct amdgpu_mn, mn);
 
        up_read(&rmn->lock);
 }
@@ -204,6 +222,7 @@ static const struct mmu_notifier_ops amdgpu_mn_ops = {
        .release = amdgpu_mn_release,
        .invalidate_page = amdgpu_mn_invalidate_page,
        .invalidate_range_start = amdgpu_mn_invalidate_range_start,
+       .invalidate_range_end = amdgpu_mn_invalidate_range_end,
 };
 
 /**
-- 
2.7.4

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to