On Thu, Jul 17, 2014 at 04:57:58PM +0300, Oded Gabbay wrote:Yes, I followed that email thread and you can see that in the commit message I referred to it (saying that in v3 of the patchset I'm also going to use mmu_notifier). I will take your patch once you publish it and use it to change amdkfd behavior.
Forgot to add mm mailing list. Sorry.
This patch enables the amdkfd driver to retrieve the kfd_process
object from the process's mm_struct. This is needed because kfd_process
lifespan is bound to the process's mm_struct lifespan.
When amdkfd is notified about an mm_struct tear-down, it checks if the
kfd_process pointer is valid. If so, it releases the kfd_process object
and all relevant resources.
In v3 of the patchset I will update the binding to match the final discussions
on [PATCH 1/8] mmput: use notifier chain to call subsystem exit handler.
In the meantime, I'm going to try and see if I can drop the kfd_process
in mm_struct and remove the use of the new notification chain in mmput.
Instead, I will try to use the mmu release notifier.
So the mmput notifier chain will not happen. I did a patch with call_srcu
and adding couple more helper to mmu_notifier. I will send that today for
review.
That being said, adding a device driver specific to mm_struct will most
likely be a big no. I am myself gonna remove hmm from mm_struct as people
are reluctant to see such change.
Cheers,
Jérôme
Signed-off-by: Oded Gabbay <oded.gabbay@xxxxxxx>
---
include/linux/mm_types.h | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
index 678097c..ff71496 100644
--- a/include/linux/mm_types.h
+++ b/include/linux/mm_types.h
@@ -20,6 +20,10 @@
struct hmm;
#endif
+#if defined(CONFIG_HSA_RADEON) || defined(CONFIG_HSA_RADEON_MODULE)
+struct kfd_process;
+#endif
+
#ifndef AT_VECTOR_SIZE_ARCH
#define AT_VECTOR_SIZE_ARCH 0
#endif
@@ -439,6 +443,16 @@ struct mm_struct {
*/
struct hmm *hmm;
#endif
+#if defined(CONFIG_HSA_RADEON) || defined(CONFIG_HSA_RADEON_MODULE)
+ /*
+ * kfd always register an mmu_notifier we rely on mmu notifier to keep
+ * refcount on mm struct as well as forbiding registering kfd on a
+ * dying mm
+ *
+ * This field is set with mmap_sem old in write mode.
+ */
+ struct kfd_process *kfd_process;
+#endif
#if defined(CONFIG_TRANSPARENT_HUGEPAGE) && !USE_SPLIT_PMD_PTLOCKS
pgtable_t pmd_huge_pte; /* protected by page_table_lock */
#endif
--
1.9.1