diff mbox series

[2/2] mm/hmm: Only set FAULT_FLAG_ALLOW_RETRY for non-blocking

Message ID 20190510195258.9930-3-Felix.Kuehling@amd.com (mailing list archive)
State New, archived
Headers show
Series Two bug-fixes for HMM | expand

Commit Message

Felix Kuehling May 10, 2019, 7:53 p.m. UTC
Don't set this flag by default in hmm_vma_do_fault. It is set
conditionally just a few lines below. Setting it unconditionally
can lead to handle_mm_fault doing a non-blocking fault, returning
-EBUSY and unlocking mmap_sem unexpectedly.

Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
---
 mm/hmm.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Jerome Glisse May 10, 2019, 8:14 p.m. UTC | #1
On Fri, May 10, 2019 at 07:53:24PM +0000, Kuehling, Felix wrote:
> Don't set this flag by default in hmm_vma_do_fault. It is set
> conditionally just a few lines below. Setting it unconditionally
> can lead to handle_mm_fault doing a non-blocking fault, returning
> -EBUSY and unlocking mmap_sem unexpectedly.
> 
> Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>

Reviewed-by: Jérôme Glisse <jglisse@redhat.com>

> ---
>  mm/hmm.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/mm/hmm.c b/mm/hmm.c
> index b65c27d5c119..3c4f1d62202f 100644
> --- a/mm/hmm.c
> +++ b/mm/hmm.c
> @@ -339,7 +339,7 @@ struct hmm_vma_walk {
>  static int hmm_vma_do_fault(struct mm_walk *walk, unsigned long addr,
>  			    bool write_fault, uint64_t *pfn)
>  {
> -	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_REMOTE;
> +	unsigned int flags = FAULT_FLAG_REMOTE;
>  	struct hmm_vma_walk *hmm_vma_walk = walk->private;
>  	struct hmm_range *range = hmm_vma_walk->range;
>  	struct vm_area_struct *vma = walk->vma;
> -- 
> 2.17.1
>
Felix Kuehling May 13, 2019, 7:36 p.m. UTC | #2
Hi Jerome,

Do you want me to push the patches to your branch? Or are you going to 
apply them yourself?

Is your hmm-5.2-v3 branch going to make it into Linux 5.2? If so, do you 
know when? I'd like to coordinate with Dave Airlie so that we can also 
get that update into a drm-next branch soon.

I see that Linus merged Dave's pull request for Linux 5.2, which 
includes the first changes in amdgpu using HMM. They're currently broken 
without these two patches.

Thanks,
   Felix

On 2019-05-10 4:14 p.m., Jerome Glisse wrote:
> [CAUTION: External Email]
>
> On Fri, May 10, 2019 at 07:53:24PM +0000, Kuehling, Felix wrote:
>> Don't set this flag by default in hmm_vma_do_fault. It is set
>> conditionally just a few lines below. Setting it unconditionally
>> can lead to handle_mm_fault doing a non-blocking fault, returning
>> -EBUSY and unlocking mmap_sem unexpectedly.
>>
>> Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
> Reviewed-by: Jérôme Glisse <jglisse@redhat.com>
>
>> ---
>>   mm/hmm.c | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/mm/hmm.c b/mm/hmm.c
>> index b65c27d5c119..3c4f1d62202f 100644
>> --- a/mm/hmm.c
>> +++ b/mm/hmm.c
>> @@ -339,7 +339,7 @@ struct hmm_vma_walk {
>>   static int hmm_vma_do_fault(struct mm_walk *walk, unsigned long addr,
>>                            bool write_fault, uint64_t *pfn)
>>   {
>> -     unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_REMOTE;
>> +     unsigned int flags = FAULT_FLAG_REMOTE;
>>        struct hmm_vma_walk *hmm_vma_walk = walk->private;
>>        struct hmm_range *range = hmm_vma_walk->range;
>>        struct vm_area_struct *vma = walk->vma;
>> --
>> 2.17.1
>>
Jerome Glisse May 13, 2019, 7:49 p.m. UTC | #3
Andrew can we get this 2 fixes line up for 5.2 ?

On Mon, May 13, 2019 at 07:36:44PM +0000, Kuehling, Felix wrote:
> Hi Jerome,
> 
> Do you want me to push the patches to your branch? Or are you going to 
> apply them yourself?
> 
> Is your hmm-5.2-v3 branch going to make it into Linux 5.2? If so, do you 
> know when? I'd like to coordinate with Dave Airlie so that we can also 
> get that update into a drm-next branch soon.
> 
> I see that Linus merged Dave's pull request for Linux 5.2, which 
> includes the first changes in amdgpu using HMM. They're currently broken 
> without these two patches.

HMM patch do not go through any git branch they go through the mmotm
collection. So it is not something you can easily coordinate with drm
branch.

By broken i expect you mean that if numabalance happens it breaks ?
Or it might sleep when you are not expecting it too ?

Cheers,
Jérôme

> 
> Thanks,
>    Felix
> 
> On 2019-05-10 4:14 p.m., Jerome Glisse wrote:
> > [CAUTION: External Email]
> >
> > On Fri, May 10, 2019 at 07:53:24PM +0000, Kuehling, Felix wrote:
> >> Don't set this flag by default in hmm_vma_do_fault. It is set
> >> conditionally just a few lines below. Setting it unconditionally
> >> can lead to handle_mm_fault doing a non-blocking fault, returning
> >> -EBUSY and unlocking mmap_sem unexpectedly.
> >>
> >> Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
> > Reviewed-by: Jérôme Glisse <jglisse@redhat.com>
> >
> >> ---
> >>   mm/hmm.c | 2 +-
> >>   1 file changed, 1 insertion(+), 1 deletion(-)
> >>
> >> diff --git a/mm/hmm.c b/mm/hmm.c
> >> index b65c27d5c119..3c4f1d62202f 100644
> >> --- a/mm/hmm.c
> >> +++ b/mm/hmm.c
> >> @@ -339,7 +339,7 @@ struct hmm_vma_walk {
> >>   static int hmm_vma_do_fault(struct mm_walk *walk, unsigned long addr,
> >>                            bool write_fault, uint64_t *pfn)
> >>   {
> >> -     unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_REMOTE;
> >> +     unsigned int flags = FAULT_FLAG_REMOTE;
> >>        struct hmm_vma_walk *hmm_vma_walk = walk->private;
> >>        struct hmm_range *range = hmm_vma_walk->range;
> >>        struct vm_area_struct *vma = walk->vma;
> >> --
> >> 2.17.1
> >>
Alex Deucher May 13, 2019, 8:21 p.m. UTC | #4
I reverted all the amdgpu HMM patches for 5.2 because they also depended on this patch:
https://cgit.freedesktop.org/~agd5f/linux/commit/?h=drm-next-5.2-wip&id=ce05ef71564f7cbe270cd4337c36ee720ea534db
which did not have a clear line of sight for 5.2 either.

Alex
Felix Kuehling May 13, 2019, 8:31 p.m. UTC | #5
[Fixed Alex's email address, sorry for getting it wrong first]

On 2019-05-13 3:49 p.m., Jerome Glisse wrote:
> [CAUTION: External Email]
>
> Andrew can we get this 2 fixes line up for 5.2 ?
>
> On Mon, May 13, 2019 at 07:36:44PM +0000, Kuehling, Felix wrote:
>> Hi Jerome,
>>
>> Do you want me to push the patches to your branch? Or are you going to
>> apply them yourself?
>>
>> Is your hmm-5.2-v3 branch going to make it into Linux 5.2? If so, do you
>> know when? I'd like to coordinate with Dave Airlie so that we can also
>> get that update into a drm-next branch soon.
>>
>> I see that Linus merged Dave's pull request for Linux 5.2, which
>> includes the first changes in amdgpu using HMM. They're currently broken
>> without these two patches.
> HMM patch do not go through any git branch they go through the mmotm
> collection. So it is not something you can easily coordinate with drm
> branch.
>
> By broken i expect you mean that if numabalance happens it breaks ?
> Or it might sleep when you are not expecting it too ?

Without the NUMA fix we'd end up using an outdated physical address in 
the GPU page table. The problem was caught by a test that got incorrect 
computation results using OpenCL on a NUMA system.

Without the FAULT_FLAG_ALLOW_RETRY patch, there can be kernel oopses due 
to incorrect locking/unlocking of mmap_sem. It breaks the promise that 
hmm_range_fault should not unlock the mmap_sem if block==true. It takes 
some memory pressure to trigger this.

Regards,
   Felix


>
> Cheers,
> Jérôme
>
>> Thanks,
>>     Felix
>>
>> On 2019-05-10 4:14 p.m., Jerome Glisse wrote:
>>> [CAUTION: External Email]
>>>
>>> On Fri, May 10, 2019 at 07:53:24PM +0000, Kuehling, Felix wrote:
>>>> Don't set this flag by default in hmm_vma_do_fault. It is set
>>>> conditionally just a few lines below. Setting it unconditionally
>>>> can lead to handle_mm_fault doing a non-blocking fault, returning
>>>> -EBUSY and unlocking mmap_sem unexpectedly.
>>>>
>>>> Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
>>> Reviewed-by: Jérôme Glisse <jglisse@redhat.com>
>>>
>>>> ---
>>>>    mm/hmm.c | 2 +-
>>>>    1 file changed, 1 insertion(+), 1 deletion(-)
>>>>
>>>> diff --git a/mm/hmm.c b/mm/hmm.c
>>>> index b65c27d5c119..3c4f1d62202f 100644
>>>> --- a/mm/hmm.c
>>>> +++ b/mm/hmm.c
>>>> @@ -339,7 +339,7 @@ struct hmm_vma_walk {
>>>>    static int hmm_vma_do_fault(struct mm_walk *walk, unsigned long addr,
>>>>                             bool write_fault, uint64_t *pfn)
>>>>    {
>>>> -     unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_REMOTE;
>>>> +     unsigned int flags = FAULT_FLAG_REMOTE;
>>>>         struct hmm_vma_walk *hmm_vma_walk = walk->private;
>>>>         struct hmm_range *range = hmm_vma_walk->range;
>>>>         struct vm_area_struct *vma = walk->vma;
>>>> --
>>>> 2.17.1
>>>>
Felix Kuehling May 14, 2019, 9:12 p.m. UTC | #6
On 2019-05-13 4:21 p.m., Deucher, Alexander wrote:
> [CAUTION: External Email]
> I reverted all the amdgpu HMM patches for 5.2 because they also 
> depended on this patch:
> https://cgit.freedesktop.org/~agd5f/linux/commit/?h=drm-next-5.2-wip&id=ce05ef71564f7cbe270cd4337c36ee720ea534db
> which did not have a clear line of sight for 5.2 either.

When was that? I saw "Use HMM for userptr" in Dave's 5.2-rc1 pull 
request to Linus.


Regards,
   Felix


>
> Alex
> ------------------------------------------------------------------------
> *From:* amd-gfx <amd-gfx-bounces@lists.freedesktop.org> on behalf of 
> Kuehling, Felix <Felix.Kuehling@amd.com>
> *Sent:* Monday, May 13, 2019 3:36 PM
> *To:* Jerome Glisse
> *Cc:* linux-mm@kvack.org; airlied@gmail.com; 
> amd-gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org; 
> alex.deucher@amd.com
> *Subject:* Re: [PATCH 2/2] mm/hmm: Only set FAULT_FLAG_ALLOW_RETRY for 
> non-blocking
> [CAUTION: External Email]
>
> Hi Jerome,
>
> Do you want me to push the patches to your branch? Or are you going to
> apply them yourself?
>
> Is your hmm-5.2-v3 branch going to make it into Linux 5.2? If so, do you
> know when? I'd like to coordinate with Dave Airlie so that we can also
> get that update into a drm-next branch soon.
>
> I see that Linus merged Dave's pull request for Linux 5.2, which
> includes the first changes in amdgpu using HMM. They're currently broken
> without these two patches.
>
> Thanks,
>    Felix
>
> On 2019-05-10 4:14 p.m., Jerome Glisse wrote:
> > [CAUTION: External Email]
> >
> > On Fri, May 10, 2019 at 07:53:24PM +0000, Kuehling, Felix wrote:
> >> Don't set this flag by default in hmm_vma_do_fault. It is set
> >> conditionally just a few lines below. Setting it unconditionally
> >> can lead to handle_mm_fault doing a non-blocking fault, returning
> >> -EBUSY and unlocking mmap_sem unexpectedly.
> >>
> >> Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
> > Reviewed-by: Jérôme Glisse <jglisse@redhat.com>
> >
> >> ---
> >>   mm/hmm.c | 2 +-
> >>   1 file changed, 1 insertion(+), 1 deletion(-)
> >>
> >> diff --git a/mm/hmm.c b/mm/hmm.c
> >> index b65c27d5c119..3c4f1d62202f 100644
> >> --- a/mm/hmm.c
> >> +++ b/mm/hmm.c
> >> @@ -339,7 +339,7 @@ struct hmm_vma_walk {
> >>   static int hmm_vma_do_fault(struct mm_walk *walk, unsigned long addr,
> >>                            bool write_fault, uint64_t *pfn)
> >>   {
> >> -     unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_REMOTE;
> >> +     unsigned int flags = FAULT_FLAG_REMOTE;
> >>        struct hmm_vma_walk *hmm_vma_walk = walk->private;
> >>        struct hmm_range *range = hmm_vma_walk->range;
> >>        struct vm_area_struct *vma = walk->vma;
> >> --
> >> 2.17.1
> >>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
Alex Deucher May 14, 2019, 9:58 p.m. UTC | #7
On Tue, May 14, 2019 at 5:12 PM Kuehling, Felix <Felix.Kuehling@amd.com> wrote:
>
>
> On 2019-05-13 4:21 p.m., Deucher, Alexander wrote:
> > [CAUTION: External Email]
> > I reverted all the amdgpu HMM patches for 5.2 because they also
> > depended on this patch:
> > https://cgit.freedesktop.org/~agd5f/linux/commit/?h=drm-next-5.2-wip&id=ce05ef71564f7cbe270cd4337c36ee720ea534db
> > which did not have a clear line of sight for 5.2 either.
>
> When was that? I saw "Use HMM for userptr" in Dave's 5.2-rc1 pull
> request to Linus.

https://patchwork.kernel.org/patch/10875587/

Alex



>
>
> Regards,
>    Felix
>
>
> >
> > Alex
> > ------------------------------------------------------------------------
> > *From:* amd-gfx <amd-gfx-bounces@lists.freedesktop.org> on behalf of
> > Kuehling, Felix <Felix.Kuehling@amd.com>
> > *Sent:* Monday, May 13, 2019 3:36 PM
> > *To:* Jerome Glisse
> > *Cc:* linux-mm@kvack.org; airlied@gmail.com;
> > amd-gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org;
> > alex.deucher@amd.com
> > *Subject:* Re: [PATCH 2/2] mm/hmm: Only set FAULT_FLAG_ALLOW_RETRY for
> > non-blocking
> > [CAUTION: External Email]
> >
> > Hi Jerome,
> >
> > Do you want me to push the patches to your branch? Or are you going to
> > apply them yourself?
> >
> > Is your hmm-5.2-v3 branch going to make it into Linux 5.2? If so, do you
> > know when? I'd like to coordinate with Dave Airlie so that we can also
> > get that update into a drm-next branch soon.
> >
> > I see that Linus merged Dave's pull request for Linux 5.2, which
> > includes the first changes in amdgpu using HMM. They're currently broken
> > without these two patches.
> >
> > Thanks,
> >    Felix
> >
> > On 2019-05-10 4:14 p.m., Jerome Glisse wrote:
> > > [CAUTION: External Email]
> > >
> > > On Fri, May 10, 2019 at 07:53:24PM +0000, Kuehling, Felix wrote:
> > >> Don't set this flag by default in hmm_vma_do_fault. It is set
> > >> conditionally just a few lines below. Setting it unconditionally
> > >> can lead to handle_mm_fault doing a non-blocking fault, returning
> > >> -EBUSY and unlocking mmap_sem unexpectedly.
> > >>
> > >> Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
> > > Reviewed-by: Jérôme Glisse <jglisse@redhat.com>
> > >
> > >> ---
> > >>   mm/hmm.c | 2 +-
> > >>   1 file changed, 1 insertion(+), 1 deletion(-)
> > >>
> > >> diff --git a/mm/hmm.c b/mm/hmm.c
> > >> index b65c27d5c119..3c4f1d62202f 100644
> > >> --- a/mm/hmm.c
> > >> +++ b/mm/hmm.c
> > >> @@ -339,7 +339,7 @@ struct hmm_vma_walk {
> > >>   static int hmm_vma_do_fault(struct mm_walk *walk, unsigned long addr,
> > >>                            bool write_fault, uint64_t *pfn)
> > >>   {
> > >> -     unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_REMOTE;
> > >> +     unsigned int flags = FAULT_FLAG_REMOTE;
> > >>        struct hmm_vma_walk *hmm_vma_walk = walk->private;
> > >>        struct hmm_range *range = hmm_vma_walk->range;
> > >>        struct vm_area_struct *vma = walk->vma;
> > >> --
> > >> 2.17.1
> > >>
> > _______________________________________________
> > amd-gfx mailing list
> > amd-gfx@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/amd-gfx
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
diff mbox series

Patch

diff --git a/mm/hmm.c b/mm/hmm.c
index b65c27d5c119..3c4f1d62202f 100644
--- a/mm/hmm.c
+++ b/mm/hmm.c
@@ -339,7 +339,7 @@  struct hmm_vma_walk {
 static int hmm_vma_do_fault(struct mm_walk *walk, unsigned long addr,
 			    bool write_fault, uint64_t *pfn)
 {
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_REMOTE;
+	unsigned int flags = FAULT_FLAG_REMOTE;
 	struct hmm_vma_walk *hmm_vma_walk = walk->private;
 	struct hmm_range *range = hmm_vma_walk->range;
 	struct vm_area_struct *vma = walk->vma;