Re: [PATCH] drm/amdgpu: use HMM mirror callback to replace mmu notifier v3

2018-09-14 Thread Christian König

Am 13.09.2018 um 22:45 schrieb Philip Yang:

On 2018-09-13 02:24 PM, Christian König wrote:

Am 13.09.2018 um 20:00 schrieb Philip Yang:

Replace our MMU notifier with hmm_mirror_ops.sync_cpu_device_pagetables
callback. Enable CONFIG_HMM and CONFIG_HMM_MIRROR as a dependency in
DRM_AMDGPU_USERPTR Kconfig.

It supports both KFD userptr and gfx userptr paths.

This depends on several HMM patchset from Jérôme Glisse queued for
upstream. See
http://172.27.226.38/root/kernel_amd/commits/hmm-dev-v01 (for AMD 
intranet)


Change-Id: Ie62c3c5e3c5b8521ab3b438d1eff2aa2a003835e
Signed-off-by: Philip Yang 
---
  drivers/gpu/drm/amd/amdgpu/Kconfig |  6 +--
  drivers/gpu/drm/amd/amdgpu/Makefile    |  2 +-
  drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c | 88 
+++---

  3 files changed, 75 insertions(+), 21 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/Kconfig 
b/drivers/gpu/drm/amd/amdgpu/Kconfig

index 9221e54..960a633 100644
--- a/drivers/gpu/drm/amd/amdgpu/Kconfig
+++ b/drivers/gpu/drm/amd/amdgpu/Kconfig
@@ -26,10 +26,10 @@ config DRM_AMDGPU_CIK
  config DRM_AMDGPU_USERPTR
  bool "Always enable userptr write support"
  depends on DRM_AMDGPU
-    select MMU_NOTIFIER
+    select HMM_MIRROR
  help
-  This option selects CONFIG_MMU_NOTIFIER if it isn't already
-  selected to enabled full userptr support.
+  This option selects CONFIG_HMM and CONFIG_HMM_MIRROR if it
+  isn't already selected to enabled full userptr support.
    config DRM_AMDGPU_GART_DEBUGFS
  bool "Allow GART access through debugfs"
diff --git a/drivers/gpu/drm/amd/amdgpu/Makefile 
b/drivers/gpu/drm/amd/amdgpu/Makefile

index 138cb78..c1e5d43 100644
--- a/drivers/gpu/drm/amd/amdgpu/Makefile
+++ b/drivers/gpu/drm/amd/amdgpu/Makefile
@@ -171,7 +171,7 @@ endif
  amdgpu-$(CONFIG_COMPAT) += amdgpu_ioc32.o
  amdgpu-$(CONFIG_VGA_SWITCHEROO) += amdgpu_atpx_handler.o
  amdgpu-$(CONFIG_ACPI) += amdgpu_acpi.o
-amdgpu-$(CONFIG_MMU_NOTIFIER) += amdgpu_mn.o
+amdgpu-$(CONFIG_HMM) += amdgpu_mn.o
    include $(FULL_AMD_PATH)/powerplay/Makefile
  diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c

index e55508b..ea8671f6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c
@@ -46,6 +46,7 @@
  #include 
  #include 
  #include 
+#include 


Can we now drop including linux/mmu_notifier.h?

Yes, will use hmm_mirror_ops to replace gfx and kfd mmu_notifier_ops


Please drop that and implement the gfx and kfd operations directly.

Thanks,
Christian.


  #include 
  #include 
  #include 
@@ -66,6 +67,7 @@
   * @objects: interval tree containing amdgpu_mn_nodes
   * @read_lock: mutex for recursive locking of @lock
   * @recursion: depth of recursion
+ * @mirror: HMM mirror function support
   *
   * Data for each amdgpu device and process address space.
   */
@@ -87,6 +89,9 @@ struct amdgpu_mn {
  struct rb_root_cached    objects;
  struct mutex    read_lock;
  atomic_t    recursion;
+
+    /* HMM mirror */
+    struct hmm_mirror    mirror;
  };
    /**
@@ -103,7 +108,7 @@ struct amdgpu_mn_node {
  };
    /**
- * amdgpu_mn_destroy - destroy the MMU notifier
+ * amdgpu_mn_destroy - destroy the HMM mirror
   *
   * @work: previously sheduled work item
   *
@@ -129,28 +134,27 @@ static void amdgpu_mn_destroy(struct 
work_struct *work)

  }
  up_write(>lock);
  mutex_unlock(>mn_lock);
-    mmu_notifier_unregister_no_release(>mn, amn->mm);
+
+    hmm_mirror_unregister(>mirror);
+
  kfree(amn);
  }
    /**
   * amdgpu_mn_release - callback to notify about mm destruction
   *
- * @mn: our notifier
- * @mm: the mm this callback is about
+ * @mirror: the HMM mirror (mm) this callback is about
   *
- * Shedule a work item to lazy destroy our notifier.
+ * Shedule a work item to lazy destroy HMM mirror.
   */
-static void amdgpu_mn_release(struct mmu_notifier *mn,
-  struct mm_struct *mm)
+static void amdgpu_hmm_mirror_release(struct hmm_mirror *mirror)
  {
-    struct amdgpu_mn *amn = container_of(mn, struct amdgpu_mn, mn);
+    struct amdgpu_mn *amn = container_of(mirror, struct amdgpu_mn, 
mirror);

    INIT_WORK(>work, amdgpu_mn_destroy);
  schedule_work(>work);
  }
  -
  /**
   * amdgpu_mn_lock - take the write side lock for this notifier
   *
@@ -355,12 +359,10 @@ static void 
amdgpu_mn_invalidate_range_end(struct mmu_notifier *mn,

    static const struct mmu_notifier_ops amdgpu_mn_ops[] = {
  [AMDGPU_MN_TYPE_GFX] = {
-    .release = amdgpu_mn_release,
  .invalidate_range_start = 
amdgpu_mn_invalidate_range_start_gfx,

  .invalidate_range_end = amdgpu_mn_invalidate_range_end,
  },
  [AMDGPU_MN_TYPE_HSA] = {
-    .release = amdgpu_mn_release,
  .invalidate_range_start = 
amdgpu_mn_invalidate_range_start_hsa,

  .invalidate_range_end = amdgpu_mn_invalidate_range_end,
  },
@@ -373,12 +375,63 @@ static const struct 

Re: [PATCH] drm/amdgpu: use HMM mirror callback to replace mmu notifier v3

2018-09-13 Thread Philip Yang

On 2018-09-13 02:24 PM, Christian König wrote:

Am 13.09.2018 um 20:00 schrieb Philip Yang:

Replace our MMU notifier with hmm_mirror_ops.sync_cpu_device_pagetables
callback. Enable CONFIG_HMM and CONFIG_HMM_MIRROR as a dependency in
DRM_AMDGPU_USERPTR Kconfig.

It supports both KFD userptr and gfx userptr paths.

This depends on several HMM patchset from Jérôme Glisse queued for
upstream. See
http://172.27.226.38/root/kernel_amd/commits/hmm-dev-v01 (for AMD 
intranet)


Change-Id: Ie62c3c5e3c5b8521ab3b438d1eff2aa2a003835e
Signed-off-by: Philip Yang 
---
  drivers/gpu/drm/amd/amdgpu/Kconfig |  6 +--
  drivers/gpu/drm/amd/amdgpu/Makefile    |  2 +-
  drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c | 88 
+++---

  3 files changed, 75 insertions(+), 21 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/Kconfig 
b/drivers/gpu/drm/amd/amdgpu/Kconfig

index 9221e54..960a633 100644
--- a/drivers/gpu/drm/amd/amdgpu/Kconfig
+++ b/drivers/gpu/drm/amd/amdgpu/Kconfig
@@ -26,10 +26,10 @@ config DRM_AMDGPU_CIK
  config DRM_AMDGPU_USERPTR
  bool "Always enable userptr write support"
  depends on DRM_AMDGPU
-    select MMU_NOTIFIER
+    select HMM_MIRROR
  help
-  This option selects CONFIG_MMU_NOTIFIER if it isn't already
-  selected to enabled full userptr support.
+  This option selects CONFIG_HMM and CONFIG_HMM_MIRROR if it
+  isn't already selected to enabled full userptr support.
    config DRM_AMDGPU_GART_DEBUGFS
  bool "Allow GART access through debugfs"
diff --git a/drivers/gpu/drm/amd/amdgpu/Makefile 
b/drivers/gpu/drm/amd/amdgpu/Makefile

index 138cb78..c1e5d43 100644
--- a/drivers/gpu/drm/amd/amdgpu/Makefile
+++ b/drivers/gpu/drm/amd/amdgpu/Makefile
@@ -171,7 +171,7 @@ endif
  amdgpu-$(CONFIG_COMPAT) += amdgpu_ioc32.o
  amdgpu-$(CONFIG_VGA_SWITCHEROO) += amdgpu_atpx_handler.o
  amdgpu-$(CONFIG_ACPI) += amdgpu_acpi.o
-amdgpu-$(CONFIG_MMU_NOTIFIER) += amdgpu_mn.o
+amdgpu-$(CONFIG_HMM) += amdgpu_mn.o
    include $(FULL_AMD_PATH)/powerplay/Makefile
  diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c

index e55508b..ea8671f6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c
@@ -46,6 +46,7 @@
  #include 
  #include 
  #include 
+#include 


Can we now drop including linux/mmu_notifier.h?

Yes, will use hmm_mirror_ops to replace gfx and kfd mmu_notifier_ops

  #include 
  #include 
  #include 
@@ -66,6 +67,7 @@
   * @objects: interval tree containing amdgpu_mn_nodes
   * @read_lock: mutex for recursive locking of @lock
   * @recursion: depth of recursion
+ * @mirror: HMM mirror function support
   *
   * Data for each amdgpu device and process address space.
   */
@@ -87,6 +89,9 @@ struct amdgpu_mn {
  struct rb_root_cached    objects;
  struct mutex    read_lock;
  atomic_t    recursion;
+
+    /* HMM mirror */
+    struct hmm_mirror    mirror;
  };
    /**
@@ -103,7 +108,7 @@ struct amdgpu_mn_node {
  };
    /**
- * amdgpu_mn_destroy - destroy the MMU notifier
+ * amdgpu_mn_destroy - destroy the HMM mirror
   *
   * @work: previously sheduled work item
   *
@@ -129,28 +134,27 @@ static void amdgpu_mn_destroy(struct 
work_struct *work)

  }
  up_write(>lock);
  mutex_unlock(>mn_lock);
-    mmu_notifier_unregister_no_release(>mn, amn->mm);
+
+    hmm_mirror_unregister(>mirror);
+
  kfree(amn);
  }
    /**
   * amdgpu_mn_release - callback to notify about mm destruction
   *
- * @mn: our notifier
- * @mm: the mm this callback is about
+ * @mirror: the HMM mirror (mm) this callback is about
   *
- * Shedule a work item to lazy destroy our notifier.
+ * Shedule a work item to lazy destroy HMM mirror.
   */
-static void amdgpu_mn_release(struct mmu_notifier *mn,
-  struct mm_struct *mm)
+static void amdgpu_hmm_mirror_release(struct hmm_mirror *mirror)
  {
-    struct amdgpu_mn *amn = container_of(mn, struct amdgpu_mn, mn);
+    struct amdgpu_mn *amn = container_of(mirror, struct amdgpu_mn, 
mirror);

    INIT_WORK(>work, amdgpu_mn_destroy);
  schedule_work(>work);
  }
  -
  /**
   * amdgpu_mn_lock - take the write side lock for this notifier
   *
@@ -355,12 +359,10 @@ static void 
amdgpu_mn_invalidate_range_end(struct mmu_notifier *mn,

    static const struct mmu_notifier_ops amdgpu_mn_ops[] = {
  [AMDGPU_MN_TYPE_GFX] = {
-    .release = amdgpu_mn_release,
  .invalidate_range_start = 
amdgpu_mn_invalidate_range_start_gfx,

  .invalidate_range_end = amdgpu_mn_invalidate_range_end,
  },
  [AMDGPU_MN_TYPE_HSA] = {
-    .release = amdgpu_mn_release,
  .invalidate_range_start = 
amdgpu_mn_invalidate_range_start_hsa,

  .invalidate_range_end = amdgpu_mn_invalidate_range_end,
  },
@@ -373,12 +375,63 @@ static const struct mmu_notifier_ops 
amdgpu_mn_ops[] = {

  #define AMDGPU_MN_KEY(mm, type) ((unsigned long)(mm) + (type))
    /**
- * amdgpu_mn_get - create 

Re: [PATCH] drm/amdgpu: use HMM mirror callback to replace mmu notifier v3

2018-09-13 Thread Christian König

Am 13.09.2018 um 20:00 schrieb Philip Yang:

Replace our MMU notifier with hmm_mirror_ops.sync_cpu_device_pagetables
callback. Enable CONFIG_HMM and CONFIG_HMM_MIRROR as a dependency in
DRM_AMDGPU_USERPTR Kconfig.

It supports both KFD userptr and gfx userptr paths.

This depends on several HMM patchset from Jérôme Glisse queued for
upstream. See
http://172.27.226.38/root/kernel_amd/commits/hmm-dev-v01 (for AMD intranet)

Change-Id: Ie62c3c5e3c5b8521ab3b438d1eff2aa2a003835e
Signed-off-by: Philip Yang 
---
  drivers/gpu/drm/amd/amdgpu/Kconfig |  6 +--
  drivers/gpu/drm/amd/amdgpu/Makefile|  2 +-
  drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c | 88 +++---
  3 files changed, 75 insertions(+), 21 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/Kconfig 
b/drivers/gpu/drm/amd/amdgpu/Kconfig
index 9221e54..960a633 100644
--- a/drivers/gpu/drm/amd/amdgpu/Kconfig
+++ b/drivers/gpu/drm/amd/amdgpu/Kconfig
@@ -26,10 +26,10 @@ config DRM_AMDGPU_CIK
  config DRM_AMDGPU_USERPTR
bool "Always enable userptr write support"
depends on DRM_AMDGPU
-   select MMU_NOTIFIER
+   select HMM_MIRROR
help
- This option selects CONFIG_MMU_NOTIFIER if it isn't already
- selected to enabled full userptr support.
+ This option selects CONFIG_HMM and CONFIG_HMM_MIRROR if it
+ isn't already selected to enabled full userptr support.
  
  config DRM_AMDGPU_GART_DEBUGFS

bool "Allow GART access through debugfs"
diff --git a/drivers/gpu/drm/amd/amdgpu/Makefile 
b/drivers/gpu/drm/amd/amdgpu/Makefile
index 138cb78..c1e5d43 100644
--- a/drivers/gpu/drm/amd/amdgpu/Makefile
+++ b/drivers/gpu/drm/amd/amdgpu/Makefile
@@ -171,7 +171,7 @@ endif
  amdgpu-$(CONFIG_COMPAT) += amdgpu_ioc32.o
  amdgpu-$(CONFIG_VGA_SWITCHEROO) += amdgpu_atpx_handler.o
  amdgpu-$(CONFIG_ACPI) += amdgpu_acpi.o
-amdgpu-$(CONFIG_MMU_NOTIFIER) += amdgpu_mn.o
+amdgpu-$(CONFIG_HMM) += amdgpu_mn.o
  
  include $(FULL_AMD_PATH)/powerplay/Makefile
  
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c

index e55508b..ea8671f6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c
@@ -46,6 +46,7 @@
  #include 
  #include 
  #include 
+#include 


Can we now drop including linux/mmu_notifier.h?


  #include 
  #include 
  #include 
@@ -66,6 +67,7 @@
   * @objects: interval tree containing amdgpu_mn_nodes
   * @read_lock: mutex for recursive locking of @lock
   * @recursion: depth of recursion
+ * @mirror: HMM mirror function support
   *
   * Data for each amdgpu device and process address space.
   */
@@ -87,6 +89,9 @@ struct amdgpu_mn {
struct rb_root_cached   objects;
struct mutexread_lock;
atomic_trecursion;
+
+   /* HMM mirror */
+   struct hmm_mirror   mirror;
  };
  
  /**

@@ -103,7 +108,7 @@ struct amdgpu_mn_node {
  };
  
  /**

- * amdgpu_mn_destroy - destroy the MMU notifier
+ * amdgpu_mn_destroy - destroy the HMM mirror
   *
   * @work: previously sheduled work item
   *
@@ -129,28 +134,27 @@ static void amdgpu_mn_destroy(struct work_struct *work)
}
up_write(>lock);
mutex_unlock(>mn_lock);
-   mmu_notifier_unregister_no_release(>mn, amn->mm);
+
+   hmm_mirror_unregister(>mirror);
+
kfree(amn);
  }
  
  /**

   * amdgpu_mn_release - callback to notify about mm destruction
   *
- * @mn: our notifier
- * @mm: the mm this callback is about
+ * @mirror: the HMM mirror (mm) this callback is about
   *
- * Shedule a work item to lazy destroy our notifier.
+ * Shedule a work item to lazy destroy HMM mirror.
   */
-static void amdgpu_mn_release(struct mmu_notifier *mn,
- struct mm_struct *mm)
+static void amdgpu_hmm_mirror_release(struct hmm_mirror *mirror)
  {
-   struct amdgpu_mn *amn = container_of(mn, struct amdgpu_mn, mn);
+   struct amdgpu_mn *amn = container_of(mirror, struct amdgpu_mn, mirror);
  
  	INIT_WORK(>work, amdgpu_mn_destroy);

schedule_work(>work);
  }
  
-

  /**
   * amdgpu_mn_lock - take the write side lock for this notifier
   *
@@ -355,12 +359,10 @@ static void amdgpu_mn_invalidate_range_end(struct 
mmu_notifier *mn,
  
  static const struct mmu_notifier_ops amdgpu_mn_ops[] = {

[AMDGPU_MN_TYPE_GFX] = {
-   .release = amdgpu_mn_release,
.invalidate_range_start = amdgpu_mn_invalidate_range_start_gfx,
.invalidate_range_end = amdgpu_mn_invalidate_range_end,
},
[AMDGPU_MN_TYPE_HSA] = {
-   .release = amdgpu_mn_release,
.invalidate_range_start = amdgpu_mn_invalidate_range_start_hsa,
.invalidate_range_end = amdgpu_mn_invalidate_range_end,
},
@@ -373,12 +375,63 @@ static const struct mmu_notifier_ops amdgpu_mn_ops[] = {
  #define AMDGPU_MN_KEY(mm, type) ((unsigned long)(mm) + (type))
  
  /**

- * amdgpu_mn_get - 

[PATCH] drm/amdgpu: use HMM mirror callback to replace mmu notifier v3

2018-09-13 Thread Philip Yang
Replace our MMU notifier with hmm_mirror_ops.sync_cpu_device_pagetables
callback. Enable CONFIG_HMM and CONFIG_HMM_MIRROR as a dependency in
DRM_AMDGPU_USERPTR Kconfig.

It supports both KFD userptr and gfx userptr paths.

This depends on several HMM patchset from Jérôme Glisse queued for
upstream. See
http://172.27.226.38/root/kernel_amd/commits/hmm-dev-v01 (for AMD intranet)

Change-Id: Ie62c3c5e3c5b8521ab3b438d1eff2aa2a003835e
Signed-off-by: Philip Yang 
---
 drivers/gpu/drm/amd/amdgpu/Kconfig |  6 +--
 drivers/gpu/drm/amd/amdgpu/Makefile|  2 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c | 88 +++---
 3 files changed, 75 insertions(+), 21 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/Kconfig 
b/drivers/gpu/drm/amd/amdgpu/Kconfig
index 9221e54..960a633 100644
--- a/drivers/gpu/drm/amd/amdgpu/Kconfig
+++ b/drivers/gpu/drm/amd/amdgpu/Kconfig
@@ -26,10 +26,10 @@ config DRM_AMDGPU_CIK
 config DRM_AMDGPU_USERPTR
bool "Always enable userptr write support"
depends on DRM_AMDGPU
-   select MMU_NOTIFIER
+   select HMM_MIRROR
help
- This option selects CONFIG_MMU_NOTIFIER if it isn't already
- selected to enabled full userptr support.
+ This option selects CONFIG_HMM and CONFIG_HMM_MIRROR if it
+ isn't already selected to enabled full userptr support.
 
 config DRM_AMDGPU_GART_DEBUGFS
bool "Allow GART access through debugfs"
diff --git a/drivers/gpu/drm/amd/amdgpu/Makefile 
b/drivers/gpu/drm/amd/amdgpu/Makefile
index 138cb78..c1e5d43 100644
--- a/drivers/gpu/drm/amd/amdgpu/Makefile
+++ b/drivers/gpu/drm/amd/amdgpu/Makefile
@@ -171,7 +171,7 @@ endif
 amdgpu-$(CONFIG_COMPAT) += amdgpu_ioc32.o
 amdgpu-$(CONFIG_VGA_SWITCHEROO) += amdgpu_atpx_handler.o
 amdgpu-$(CONFIG_ACPI) += amdgpu_acpi.o
-amdgpu-$(CONFIG_MMU_NOTIFIER) += amdgpu_mn.o
+amdgpu-$(CONFIG_HMM) += amdgpu_mn.o
 
 include $(FULL_AMD_PATH)/powerplay/Makefile
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c
index e55508b..ea8671f6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c
@@ -46,6 +46,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -66,6 +67,7 @@
  * @objects: interval tree containing amdgpu_mn_nodes
  * @read_lock: mutex for recursive locking of @lock
  * @recursion: depth of recursion
+ * @mirror: HMM mirror function support
  *
  * Data for each amdgpu device and process address space.
  */
@@ -87,6 +89,9 @@ struct amdgpu_mn {
struct rb_root_cached   objects;
struct mutexread_lock;
atomic_trecursion;
+
+   /* HMM mirror */
+   struct hmm_mirror   mirror;
 };
 
 /**
@@ -103,7 +108,7 @@ struct amdgpu_mn_node {
 };
 
 /**
- * amdgpu_mn_destroy - destroy the MMU notifier
+ * amdgpu_mn_destroy - destroy the HMM mirror
  *
  * @work: previously sheduled work item
  *
@@ -129,28 +134,27 @@ static void amdgpu_mn_destroy(struct work_struct *work)
}
up_write(>lock);
mutex_unlock(>mn_lock);
-   mmu_notifier_unregister_no_release(>mn, amn->mm);
+
+   hmm_mirror_unregister(>mirror);
+
kfree(amn);
 }
 
 /**
  * amdgpu_mn_release - callback to notify about mm destruction
  *
- * @mn: our notifier
- * @mm: the mm this callback is about
+ * @mirror: the HMM mirror (mm) this callback is about
  *
- * Shedule a work item to lazy destroy our notifier.
+ * Shedule a work item to lazy destroy HMM mirror.
  */
-static void amdgpu_mn_release(struct mmu_notifier *mn,
- struct mm_struct *mm)
+static void amdgpu_hmm_mirror_release(struct hmm_mirror *mirror)
 {
-   struct amdgpu_mn *amn = container_of(mn, struct amdgpu_mn, mn);
+   struct amdgpu_mn *amn = container_of(mirror, struct amdgpu_mn, mirror);
 
INIT_WORK(>work, amdgpu_mn_destroy);
schedule_work(>work);
 }
 
-
 /**
  * amdgpu_mn_lock - take the write side lock for this notifier
  *
@@ -355,12 +359,10 @@ static void amdgpu_mn_invalidate_range_end(struct 
mmu_notifier *mn,
 
 static const struct mmu_notifier_ops amdgpu_mn_ops[] = {
[AMDGPU_MN_TYPE_GFX] = {
-   .release = amdgpu_mn_release,
.invalidate_range_start = amdgpu_mn_invalidate_range_start_gfx,
.invalidate_range_end = amdgpu_mn_invalidate_range_end,
},
[AMDGPU_MN_TYPE_HSA] = {
-   .release = amdgpu_mn_release,
.invalidate_range_start = amdgpu_mn_invalidate_range_start_hsa,
.invalidate_range_end = amdgpu_mn_invalidate_range_end,
},
@@ -373,12 +375,63 @@ static const struct mmu_notifier_ops amdgpu_mn_ops[] = {
 #define AMDGPU_MN_KEY(mm, type) ((unsigned long)(mm) + (type))
 
 /**
- * amdgpu_mn_get - create notifier context
+ * amdgpu_hmm_sync_cpu_device_pagetables - synchronize CPU/GPU page tables
+ *
+ * @mirror: the hmm_mirror (mm) is about to update