From: Jason Gunthorpe <jgg-uk2M96/98Pc@public.gmane.org> To: Jerome Glisse <jglisse-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>, Ralph Campbell <rcampbell-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>, John Hubbard <jhubbard-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>, Felix.Kuehling-5C7GfCeVMHo@public.gmane.org Cc: Andrea Arcangeli <aarcange-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>, linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org, Jason Gunthorpe <jgg-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Subject: [PATCH v2 hmm 04/11] mm/hmm: Simplify hmm_get_or_create and make it reliable Date: Thu, 6 Jun 2019 15:44:31 -0300 [thread overview] Message-ID: <20190606184438.31646-5-jgg@ziepe.ca> (raw) In-Reply-To: <20190606184438.31646-1-jgg-uk2M96/98Pc@public.gmane.org> From: Jason Gunthorpe <jgg@mellanox.com> As coded this function can false-fail in various racy situations. Make it reliable by running only under the write side of the mmap_sem and avoiding the false-failing compare/exchange pattern. Also make the locking very easy to understand by only ever reading or writing mm->hmm while holding the write side of the mmap_sem. Signed-off-by: Jason Gunthorpe <jgg@mellanox.com> --- v2: - Fix error unwind of mmgrab (Jerome) - Use hmm local instead of 2nd container_of (Jerome) --- mm/hmm.c | 80 ++++++++++++++++++++------------------------------------ 1 file changed, 29 insertions(+), 51 deletions(-) diff --git a/mm/hmm.c b/mm/hmm.c index cc7c26fda3300e..dc30edad9a8a02 100644 --- a/mm/hmm.c +++ b/mm/hmm.c @@ -40,16 +40,6 @@ #if IS_ENABLED(CONFIG_HMM_MIRROR) static const struct mmu_notifier_ops hmm_mmu_notifier_ops; -static inline struct hmm *mm_get_hmm(struct mm_struct *mm) -{ - struct hmm *hmm = READ_ONCE(mm->hmm); - - if (hmm && kref_get_unless_zero(&hmm->kref)) - return hmm; - - return NULL; -} - /** * hmm_get_or_create - register HMM against an mm (HMM internal) * @@ -64,11 +54,20 @@ static inline struct hmm *mm_get_hmm(struct mm_struct *mm) */ static struct hmm *hmm_get_or_create(struct mm_struct *mm) { - struct hmm *hmm = mm_get_hmm(mm); - bool cleanup = false; + struct hmm *hmm; - if (hmm) - return hmm; + lockdep_assert_held_exclusive(&mm->mmap_sem); + + if (mm->hmm) { + if (kref_get_unless_zero(&mm->hmm->kref)) + return mm->hmm; + /* + * The hmm is being freed by some other CPU and is pending a + * RCU grace period, but this CPU can NULL now it since we + * have the mmap_sem. + */ + mm->hmm = NULL; + } hmm = kmalloc(sizeof(*hmm), GFP_KERNEL); if (!hmm) @@ -83,57 +82,36 @@ static struct hmm *hmm_get_or_create(struct mm_struct *mm) hmm->notifiers = 0; hmm->dead = false; hmm->mm = mm; - mmgrab(hmm->mm); - - spin_lock(&mm->page_table_lock); - if (!mm->hmm) - mm->hmm = hmm; - else - cleanup = true; - spin_unlock(&mm->page_table_lock); - if (cleanup) - goto error; - - /* - * We should only get here if hold the mmap_sem in write mode ie on - * registration of first mirror through hmm_mirror_register() - */ hmm->mmu_notifier.ops = &hmm_mmu_notifier_ops; - if (__mmu_notifier_register(&hmm->mmu_notifier, mm)) - goto error_mm; + if (__mmu_notifier_register(&hmm->mmu_notifier, mm)) { + kfree(hmm); + return NULL; + } + mmgrab(hmm->mm); + mm->hmm = hmm; return hmm; - -error_mm: - spin_lock(&mm->page_table_lock); - if (mm->hmm == hmm) - mm->hmm = NULL; - spin_unlock(&mm->page_table_lock); -error: - mmdrop(hmm->mm); - kfree(hmm); - return NULL; } static void hmm_free_rcu(struct rcu_head *rcu) { - kfree(container_of(rcu, struct hmm, rcu)); + struct hmm *hmm = container_of(rcu, struct hmm, rcu); + + down_write(&hmm->mm->mmap_sem); + if (hmm->mm->hmm == hmm) + hmm->mm->hmm = NULL; + up_write(&hmm->mm->mmap_sem); + mmdrop(hmm->mm); + + kfree(hmm); } static void hmm_free(struct kref *kref) { struct hmm *hmm = container_of(kref, struct hmm, kref); - struct mm_struct *mm = hmm->mm; - - mmu_notifier_unregister_no_release(&hmm->mmu_notifier, mm); - spin_lock(&mm->page_table_lock); - if (mm->hmm == hmm) - mm->hmm = NULL; - spin_unlock(&mm->page_table_lock); - - mmdrop(hmm->mm); + mmu_notifier_unregister_no_release(&hmm->mmu_notifier, hmm->mm); mmu_notifier_call_srcu(&hmm->rcu, hmm_free_rcu); } -- 2.21.0 _______________________________________________ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
WARNING: multiple messages have this Message-ID (diff)
From: Jason Gunthorpe <jgg@ziepe.ca> To: Jerome Glisse <jglisse@redhat.com>, Ralph Campbell <rcampbell@nvidia.com>, John Hubbard <jhubbard@nvidia.com>, Felix.Kuehling@amd.com Cc: linux-rdma@vger.kernel.org, linux-mm@kvack.org, Andrea Arcangeli <aarcange@redhat.com>, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, Jason Gunthorpe <jgg@mellanox.com> Subject: [PATCH v2 hmm 04/11] mm/hmm: Simplify hmm_get_or_create and make it reliable Date: Thu, 6 Jun 2019 15:44:31 -0300 [thread overview] Message-ID: <20190606184438.31646-5-jgg@ziepe.ca> (raw) In-Reply-To: <20190606184438.31646-1-jgg@ziepe.ca> From: Jason Gunthorpe <jgg@mellanox.com> As coded this function can false-fail in various racy situations. Make it reliable by running only under the write side of the mmap_sem and avoiding the false-failing compare/exchange pattern. Also make the locking very easy to understand by only ever reading or writing mm->hmm while holding the write side of the mmap_sem. Signed-off-by: Jason Gunthorpe <jgg@mellanox.com> --- v2: - Fix error unwind of mmgrab (Jerome) - Use hmm local instead of 2nd container_of (Jerome) --- mm/hmm.c | 80 ++++++++++++++++++++------------------------------------ 1 file changed, 29 insertions(+), 51 deletions(-) diff --git a/mm/hmm.c b/mm/hmm.c index cc7c26fda3300e..dc30edad9a8a02 100644 --- a/mm/hmm.c +++ b/mm/hmm.c @@ -40,16 +40,6 @@ #if IS_ENABLED(CONFIG_HMM_MIRROR) static const struct mmu_notifier_ops hmm_mmu_notifier_ops; -static inline struct hmm *mm_get_hmm(struct mm_struct *mm) -{ - struct hmm *hmm = READ_ONCE(mm->hmm); - - if (hmm && kref_get_unless_zero(&hmm->kref)) - return hmm; - - return NULL; -} - /** * hmm_get_or_create - register HMM against an mm (HMM internal) * @@ -64,11 +54,20 @@ static inline struct hmm *mm_get_hmm(struct mm_struct *mm) */ static struct hmm *hmm_get_or_create(struct mm_struct *mm) { - struct hmm *hmm = mm_get_hmm(mm); - bool cleanup = false; + struct hmm *hmm; - if (hmm) - return hmm; + lockdep_assert_held_exclusive(&mm->mmap_sem); + + if (mm->hmm) { + if (kref_get_unless_zero(&mm->hmm->kref)) + return mm->hmm; + /* + * The hmm is being freed by some other CPU and is pending a + * RCU grace period, but this CPU can NULL now it since we + * have the mmap_sem. + */ + mm->hmm = NULL; + } hmm = kmalloc(sizeof(*hmm), GFP_KERNEL); if (!hmm) @@ -83,57 +82,36 @@ static struct hmm *hmm_get_or_create(struct mm_struct *mm) hmm->notifiers = 0; hmm->dead = false; hmm->mm = mm; - mmgrab(hmm->mm); - - spin_lock(&mm->page_table_lock); - if (!mm->hmm) - mm->hmm = hmm; - else - cleanup = true; - spin_unlock(&mm->page_table_lock); - if (cleanup) - goto error; - - /* - * We should only get here if hold the mmap_sem in write mode ie on - * registration of first mirror through hmm_mirror_register() - */ hmm->mmu_notifier.ops = &hmm_mmu_notifier_ops; - if (__mmu_notifier_register(&hmm->mmu_notifier, mm)) - goto error_mm; + if (__mmu_notifier_register(&hmm->mmu_notifier, mm)) { + kfree(hmm); + return NULL; + } + mmgrab(hmm->mm); + mm->hmm = hmm; return hmm; - -error_mm: - spin_lock(&mm->page_table_lock); - if (mm->hmm == hmm) - mm->hmm = NULL; - spin_unlock(&mm->page_table_lock); -error: - mmdrop(hmm->mm); - kfree(hmm); - return NULL; } static void hmm_free_rcu(struct rcu_head *rcu) { - kfree(container_of(rcu, struct hmm, rcu)); + struct hmm *hmm = container_of(rcu, struct hmm, rcu); + + down_write(&hmm->mm->mmap_sem); + if (hmm->mm->hmm == hmm) + hmm->mm->hmm = NULL; + up_write(&hmm->mm->mmap_sem); + mmdrop(hmm->mm); + + kfree(hmm); } static void hmm_free(struct kref *kref) { struct hmm *hmm = container_of(kref, struct hmm, kref); - struct mm_struct *mm = hmm->mm; - - mmu_notifier_unregister_no_release(&hmm->mmu_notifier, mm); - spin_lock(&mm->page_table_lock); - if (mm->hmm == hmm) - mm->hmm = NULL; - spin_unlock(&mm->page_table_lock); - - mmdrop(hmm->mm); + mmu_notifier_unregister_no_release(&hmm->mmu_notifier, hmm->mm); mmu_notifier_call_srcu(&hmm->rcu, hmm_free_rcu); } -- 2.21.0
next prev parent reply other threads:[~2019-06-06 18:44 UTC|newest] Thread overview: 158+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-06-06 18:44 [PATCH v2 hmm 00/11] Various revisions from a locking/code review Jason Gunthorpe 2019-06-06 18:44 ` Jason Gunthorpe [not found] ` <20190606184438.31646-1-jgg-uk2M96/98Pc@public.gmane.org> 2019-06-06 18:44 ` [PATCH v2 hmm 01/11] mm/hmm: fix use after free with struct hmm in the mmu notifiers Jason Gunthorpe 2019-06-06 18:44 ` Jason Gunthorpe [not found] ` <20190606184438.31646-2-jgg-uk2M96/98Pc@public.gmane.org> 2019-06-07 2:29 ` John Hubbard 2019-06-07 2:29 ` John Hubbard [not found] ` <9c72d18d-2924-cb90-ea44-7cd4b10b5bc2-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2019-06-07 12:34 ` Jason Gunthorpe 2019-06-07 12:34 ` Jason Gunthorpe [not found] ` <20190607123432.GB14802-uk2M96/98Pc@public.gmane.org> 2019-06-07 13:42 ` Jason Gunthorpe 2019-06-07 13:42 ` Jason Gunthorpe 2019-06-08 1:13 ` John Hubbard 2019-06-08 1:13 ` John Hubbard 2019-06-08 1:37 ` John Hubbard 2019-06-08 1:37 ` John Hubbard 2019-06-07 18:12 ` Ralph Campbell 2019-06-07 18:12 ` Ralph Campbell 2019-06-08 8:49 ` Christoph Hellwig 2019-06-08 8:49 ` Christoph Hellwig 2019-06-08 11:33 ` Jason Gunthorpe 2019-06-08 11:33 ` Jason Gunthorpe 2019-06-06 18:44 ` [PATCH v2 hmm 02/11] mm/hmm: Use hmm_mirror not mm as an argument for hmm_range_register Jason Gunthorpe 2019-06-06 18:44 ` Jason Gunthorpe 2019-06-07 22:33 ` Ira Weiny 2019-06-07 22:33 ` Ira Weiny [not found] ` <20190606184438.31646-3-jgg-uk2M96/98Pc@public.gmane.org> 2019-06-07 2:36 ` John Hubbard 2019-06-07 2:36 ` John Hubbard 2019-06-07 18:24 ` Ralph Campbell 2019-06-07 18:24 ` Ralph Campbell 2019-06-07 22:39 ` Ralph Campbell 2019-06-07 22:39 ` Ralph Campbell [not found] ` <e460ddf5-9ed3-7f3b-98ce-526c12fdb8b1-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2019-06-10 13:09 ` Jason Gunthorpe 2019-06-10 13:09 ` Jason Gunthorpe 2019-06-08 8:54 ` Christoph Hellwig 2019-06-08 8:54 ` Christoph Hellwig [not found] ` <20190608085425.GB32185-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org> 2019-06-11 19:44 ` Jason Gunthorpe 2019-06-11 19:44 ` Jason Gunthorpe [not found] ` <20190611194431.GC29375-uk2M96/98Pc@public.gmane.org> 2019-06-12 7:12 ` Christoph Hellwig 2019-06-12 7:12 ` Christoph Hellwig [not found] ` <20190612071234.GA20306-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org> 2019-06-12 11:41 ` Jason Gunthorpe 2019-06-12 11:41 ` Jason Gunthorpe [not found] ` <20190612114125.GA3876-uk2M96/98Pc@public.gmane.org> 2019-06-12 12:11 ` Christoph Hellwig 2019-06-12 12:11 ` Christoph Hellwig 2019-06-06 18:44 ` [PATCH v2 hmm 03/11] mm/hmm: Hold a mmgrab from hmm to mm Jason Gunthorpe 2019-06-06 18:44 ` Jason Gunthorpe [not found] ` <20190606184438.31646-4-jgg-uk2M96/98Pc@public.gmane.org> 2019-06-07 2:44 ` John Hubbard 2019-06-07 2:44 ` John Hubbard [not found] ` <48fcaa19-6ac3-59d0-cd51-455abeca7cdb-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2019-06-07 12:36 ` Jason Gunthorpe 2019-06-07 12:36 ` Jason Gunthorpe 2019-06-07 18:41 ` Ralph Campbell 2019-06-07 18:41 ` Ralph Campbell [not found] ` <605172dc-5c66-123f-61a3-8e6880678aef-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2019-06-07 18:51 ` Jason Gunthorpe 2019-06-07 18:51 ` Jason Gunthorpe 2019-06-07 22:38 ` Ira Weiny 2019-06-07 22:38 ` Ira Weiny 2019-06-06 18:44 ` Jason Gunthorpe [this message] 2019-06-06 18:44 ` [PATCH v2 hmm 04/11] mm/hmm: Simplify hmm_get_or_create and make it reliable Jason Gunthorpe 2019-06-07 2:54 ` John Hubbard 2019-06-07 2:54 ` John Hubbard [not found] ` <20190606184438.31646-5-jgg-uk2M96/98Pc@public.gmane.org> 2019-06-07 18:52 ` Ralph Campbell 2019-06-07 18:52 ` Ralph Campbell 2019-06-07 22:44 ` Ira Weiny 2019-06-07 22:44 ` Ira Weiny 2019-06-06 18:44 ` [PATCH v2 hmm 05/11] mm/hmm: Remove duplicate condition test before wait_event_timeout Jason Gunthorpe 2019-06-06 18:44 ` Jason Gunthorpe 2019-06-07 3:06 ` John Hubbard 2019-06-07 3:06 ` John Hubbard [not found] ` <86962e22-88b1-c1bf-d704-d5a5053fa100-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2019-06-07 12:47 ` Jason Gunthorpe 2019-06-07 12:47 ` Jason Gunthorpe 2019-06-07 13:31 ` [PATCH v3 " Jason Gunthorpe 2019-06-07 13:31 ` Jason Gunthorpe 2019-06-07 22:55 ` Ira Weiny 2019-06-07 22:55 ` Ira Weiny 2019-06-08 1:32 ` John Hubbard 2019-06-08 1:32 ` John Hubbard [not found] ` <20190606184438.31646-6-jgg-uk2M96/98Pc@public.gmane.org> 2019-06-07 19:01 ` [PATCH v2 " Ralph Campbell 2019-06-07 19:01 ` Ralph Campbell [not found] ` <6833be96-12a3-1a1c-1514-c148ba2dd87b-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2019-06-07 19:13 ` Jason Gunthorpe 2019-06-07 19:13 ` Jason Gunthorpe [not found] ` <20190607191302.GR14802-uk2M96/98Pc@public.gmane.org> 2019-06-07 20:21 ` Ralph Campbell 2019-06-07 20:21 ` Ralph Campbell 2019-06-07 20:44 ` Jason Gunthorpe 2019-06-07 20:44 ` Jason Gunthorpe 2019-06-07 22:13 ` Ralph Campbell 2019-06-07 22:13 ` Ralph Campbell 2019-06-08 1:47 ` Jason Gunthorpe 2019-06-08 1:47 ` Jason Gunthorpe 2019-06-06 18:44 ` [PATCH v2 hmm 06/11] mm/hmm: Hold on to the mmget for the lifetime of the range Jason Gunthorpe 2019-06-06 18:44 ` Jason Gunthorpe 2019-06-07 3:15 ` John Hubbard 2019-06-07 3:15 ` John Hubbard [not found] ` <20190606184438.31646-7-jgg-uk2M96/98Pc@public.gmane.org> 2019-06-07 20:29 ` Ralph Campbell 2019-06-07 20:29 ` Ralph Campbell 2019-06-06 18:44 ` [PATCH v2 hmm 07/11] mm/hmm: Use lockdep instead of comments Jason Gunthorpe 2019-06-06 18:44 ` Jason Gunthorpe 2019-06-07 3:19 ` John Hubbard 2019-06-07 3:19 ` John Hubbard [not found] ` <20190606184438.31646-8-jgg-uk2M96/98Pc@public.gmane.org> 2019-06-07 20:31 ` Ralph Campbell 2019-06-07 20:31 ` Ralph Campbell 2019-06-07 22:16 ` Souptick Joarder 2019-06-07 22:16 ` Souptick Joarder 2019-06-06 18:44 ` [PATCH v2 hmm 08/11] mm/hmm: Remove racy protection against double-unregistration Jason Gunthorpe 2019-06-06 18:44 ` Jason Gunthorpe 2019-06-07 3:29 ` John Hubbard 2019-06-07 3:29 ` John Hubbard [not found] ` <88400de9-e1ae-509b-718f-c6b0f726b14c-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2019-06-07 13:57 ` Jason Gunthorpe 2019-06-07 13:57 ` Jason Gunthorpe [not found] ` <20190606184438.31646-9-jgg-uk2M96/98Pc@public.gmane.org> 2019-06-07 20:33 ` Ralph Campbell 2019-06-07 20:33 ` Ralph Campbell 2019-06-06 18:44 ` [PATCH v2 hmm 09/11] mm/hmm: Poison hmm_range during unregister Jason Gunthorpe 2019-06-06 18:44 ` Jason Gunthorpe 2019-06-07 3:37 ` John Hubbard 2019-06-07 3:37 ` John Hubbard [not found] ` <c00da0f2-b4b8-813b-0441-a50d4de9d8be-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2019-06-07 14:03 ` Jason Gunthorpe 2019-06-07 14:03 ` Jason Gunthorpe 2019-06-07 20:46 ` Ralph Campbell 2019-06-07 20:46 ` Ralph Campbell 2019-06-07 20:49 ` Jason Gunthorpe 2019-06-07 20:49 ` Jason Gunthorpe 2019-06-07 23:01 ` Ira Weiny 2019-06-07 23:01 ` Ira Weiny 2019-06-06 18:44 ` [PATCH v2 hmm 10/11] mm/hmm: Do not use list*_rcu() for hmm->ranges Jason Gunthorpe 2019-06-06 18:44 ` Jason Gunthorpe 2019-06-07 3:40 ` John Hubbard 2019-06-07 3:40 ` John Hubbard 2019-06-07 20:49 ` Ralph Campbell 2019-06-07 20:49 ` Ralph Campbell 2019-06-07 22:11 ` Souptick Joarder 2019-06-07 22:11 ` Souptick Joarder 2019-06-07 23:02 ` Ira Weiny 2019-06-07 23:02 ` Ira Weiny 2019-06-06 18:44 ` [PATCH v2 hmm 11/11] mm/hmm: Remove confusing comment and logic from hmm_release Jason Gunthorpe 2019-06-06 18:44 ` Jason Gunthorpe 2019-06-07 3:47 ` John Hubbard 2019-06-07 3:47 ` John Hubbard [not found] ` <3edc47bd-e8f6-0e65-5844-d16901890637-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2019-06-07 12:58 ` Jason Gunthorpe 2019-06-07 12:58 ` Jason Gunthorpe 2019-06-07 21:37 ` Ralph Campbell 2019-06-07 21:37 ` Ralph Campbell 2019-06-08 2:12 ` Jason Gunthorpe 2019-06-08 2:12 ` Jason Gunthorpe [not found] ` <61ea869d-43d2-d1e5-dc00-cf5e3e139169-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2019-06-10 16:02 ` Jason Gunthorpe 2019-06-10 16:02 ` Jason Gunthorpe 2019-06-10 22:03 ` Ralph Campbell 2019-06-10 22:03 ` Ralph Campbell 2019-06-07 16:05 ` [PATCH v2 12/11] mm/hmm: Fix error flows in hmm_invalidate_range_start Jason Gunthorpe 2019-06-07 16:05 ` Jason Gunthorpe 2019-06-07 23:52 ` Ralph Campbell 2019-06-07 23:52 ` Ralph Campbell 2019-06-08 1:35 ` Jason Gunthorpe 2019-06-08 1:35 ` Jason Gunthorpe 2019-06-11 19:48 ` [PATCH v2 hmm 00/11] Various revisions from a locking/code review Jason Gunthorpe 2019-06-11 19:48 ` Jason Gunthorpe 2019-06-12 17:54 ` Kuehling, Felix 2019-06-12 17:54 ` Kuehling, Felix [not found] ` <5d3b0ae2-3662-cab2-5e6c-82912f32356a-5C7GfCeVMHo@public.gmane.org> 2019-06-12 21:49 ` Yang, Philip 2019-06-12 21:49 ` Yang, Philip 2019-06-13 17:50 ` Jason Gunthorpe 2019-06-13 17:50 ` Jason Gunthorpe
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20190606184438.31646-5-jgg@ziepe.ca \ --to=jgg-uk2m96/98pc@public.gmane.org \ --cc=Felix.Kuehling-5C7GfCeVMHo@public.gmane.org \ --cc=aarcange-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \ --cc=amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \ --cc=dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \ --cc=jgg-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \ --cc=jglisse-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \ --cc=jhubbard-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \ --cc=linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org \ --cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \ --cc=rcampbell-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.