From: Gerald Schaefer <gerald.schaefer@linux.ibm.com>
To: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>,
Jason Gunthorpe <jgg@ziepe.ca>,
John Hubbard <jhubbard@nvidia.com>,
Peter Zijlstra <peterz@infradead.org>,
Dave Hansen <dave.hansen@linux.intel.com>,
linux-mm <linux-mm@kvack.org>, Paul Mackerras <paulus@samba.org>,
linux-sparc <sparclinux@vger.kernel.org>,
Alexander Gordeev <agordeev@linux.ibm.com>,
Claudio Imbrenda <imbrenda@linux.ibm.com>,
Will Deacon <will@kernel.org>,
linux-arch <linux-arch@vger.kernel.org>,
linux-s390 <linux-s390@vger.kernel.org>,
Vasily Gorbik <gor@linux.ibm.com>,
Richard Weinberger <richard@nod.at>, linux-x86 <x86@kernel.org>,
Russell King <linux@armlinux.org.uk>,
Ingo Molnar <mingo@redhat.com>,
Catalin Marinas <catalin.marinas@arm.com>,
Andrey Ryabinin <aryabinin@virtuozzo.com>,
Heiko Carstens <hca@linux.ibm.com>, Arnd Bergmann <arnd@arndb.de>,
Jeff Dike <jdike@addtoit.com>,
linux-um <linux-um@lists.infradead.org>,
Borislav Petkov <bp@alien8.de>, Andy Lutomirski <luto@kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
linux-arm <linux-arm-kernel@lists.infradead.org>,
linux-power <linuxppc-dev@lists.ozlabs.org>,
LKML <linux-kernel@vger.kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
Mike Rapoport <rppt@kernel.org>
Subject: Re: [RFC PATCH v2 1/3] mm/gup: fix gup_fast with dynamic page table folding
Date: Tue, 8 Sep 2020 15:38:57 +0200 [thread overview]
Message-ID: <20200908153857.08d09581@thinkpad> (raw)
In-Reply-To: <96b80926-cf5b-1afa-9b7a-949a2188e61f@csgroup.eu>
On Tue, 8 Sep 2020 14:40:10 +0200
Christophe Leroy <christophe.leroy@csgroup.eu> wrote:
>
>
> Le 08/09/2020 à 14:09, Christian Borntraeger a écrit :
> >
> >
> > On 08.09.20 07:06, Christophe Leroy wrote:
> >>
> >>
> >> Le 07/09/2020 à 20:00, Gerald Schaefer a écrit :
> >>> From: Alexander Gordeev <agordeev@linux.ibm.com>
> >>>
> >>> Commit 1a42010cdc26 ("s390/mm: convert to the generic get_user_pages_fast
> >>> code") introduced a subtle but severe bug on s390 with gup_fast, due to
> >>> dynamic page table folding.
> >>>
> >>> The question "What would it require for the generic code to work for s390"
> >>> has already been discussed here
> >>> https://lkml.kernel.org/r/20190418100218.0a4afd51@mschwideX1
> >>> and ended with a promising approach here
> >>> https://lkml.kernel.org/r/20190419153307.4f2911b5@mschwideX1
> >>> which in the end unfortunately didn't quite work completely.
> >>>
> >>> We tried to mimic static level folding by changing pgd_offset to always
> >>> calculate top level page table offset, and do nothing in folded pXd_offset.
> >>> What has been overlooked is that PxD_SIZE/MASK and thus pXd_addr_end do
> >>> not reflect this dynamic behaviour, and still act like static 5-level
> >>> page tables.
> >>>
> >>
> >> [...]
> >>
> >>>
> >>> Fix this by introducing new pXd_addr_end_folded helpers, which take an
> >>> additional pXd entry value parameter, that can be used on s390
> >>> to determine the correct page table level and return corresponding
> >>> end / boundary. With that, the pointer iteration will always
> >>> happen in gup_pgd_range for s390. No change for other architectures
> >>> introduced.
> >>
> >> Not sure pXd_addr_end_folded() is the best understandable name, allthough I don't have any alternative suggestion at the moment.
> >> Maybe could be something like pXd_addr_end_fixup() as it will disappear in the next patch, or pXd_addr_end_gup() ?
> >>
> >> Also, if it happens to be acceptable to get patch 2 in stable, I think you should switch patch 1 and patch 2 to avoid the step through pXd_addr_end_folded()
> >
> > given that this fixes a data corruption issue, wouldnt it be the best to go forward
> > with this patch ASAP and then handle the other patches on top with all the time that
> > we need?
>
> I have no strong opinion on this, but I feel rather tricky to have to
> change generic part of GUP to use a new fonction then revert that change
> in the following patch, just because you want the first patch in stable
> and not the second one.
>
> Regardless, I was wondering, why do we need a reference to the pXd at
> all when calling pXd_addr_end() ?
>
> Couldn't S390 retrieve the pXd by using the pXd_offset() dance with the
> passed addr ?
Apart from performance impact when re-doing that what has already been
done by the caller, I think we would also break the READ_ONCE semantics.
After all, the pXd_offset() would also require some pXd pointer input,
which we don't have. So we would need to start over again from mm->pgd.
Also, it seems to be more in line with other primitives that take
a pXd value or pointer.
WARNING: multiple messages have this Message-ID (diff)
From: Gerald Schaefer <gerald.schaefer@linux.ibm.com>
To: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: Peter Zijlstra <peterz@infradead.org>,
Catalin Marinas <catalin.marinas@arm.com>,
Dave Hansen <dave.hansen@linux.intel.com>,
linux-mm <linux-mm@kvack.org>, Paul Mackerras <paulus@samba.org>,
linux-sparc <sparclinux@vger.kernel.org>,
Alexander Gordeev <agordeev@linux.ibm.com>,
Claudio Imbrenda <imbrenda@linux.ibm.com>,
Will Deacon <will@kernel.org>,
linux-arch <linux-arch@vger.kernel.org>,
linux-s390 <linux-s390@vger.kernel.org>,
Vasily Gorbik <gor@linux.ibm.com>,
Christian Borntraeger <borntraeger@de.ibm.com>,
Richard Weinberger <richard@nod.at>, linux-x86 <x86@kernel.org>,
Russell King <linux@armlinux.org.uk>,
Jason Gunthorpe <jgg@ziepe.ca>, Ingo Molnar <mingo@redhat.com>,
Andrey Ryabinin <aryabinin@virtuozzo.com>,
Jeff Dike <jdike@addtoit.com>, Arnd Bergmann <arnd@arndb.de>,
John Hubbard <jhubbard@nvidia.com>,
Heiko Carstens <hca@linux.ibm.com>,
linux-um <linux-um@lists.infradead.org>,
Borislav Petkov <bp@alien8.de>, Andy Lutomirski <luto@kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
linux-arm <linux-arm-kernel@lists.infradead.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
LKML <linux-kernel@vger.kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
linux-power <linuxppc-dev@lists.ozlabs.org>,
Mike Rapoport <rppt@kernel.org>
Subject: Re: [RFC PATCH v2 1/3] mm/gup: fix gup_fast with dynamic page table folding
Date: Tue, 8 Sep 2020 15:38:57 +0200 [thread overview]
Message-ID: <20200908153857.08d09581@thinkpad> (raw)
In-Reply-To: <96b80926-cf5b-1afa-9b7a-949a2188e61f@csgroup.eu>
On Tue, 8 Sep 2020 14:40:10 +0200
Christophe Leroy <christophe.leroy@csgroup.eu> wrote:
>
>
> Le 08/09/2020 à 14:09, Christian Borntraeger a écrit :
> >
> >
> > On 08.09.20 07:06, Christophe Leroy wrote:
> >>
> >>
> >> Le 07/09/2020 à 20:00, Gerald Schaefer a écrit :
> >>> From: Alexander Gordeev <agordeev@linux.ibm.com>
> >>>
> >>> Commit 1a42010cdc26 ("s390/mm: convert to the generic get_user_pages_fast
> >>> code") introduced a subtle but severe bug on s390 with gup_fast, due to
> >>> dynamic page table folding.
> >>>
> >>> The question "What would it require for the generic code to work for s390"
> >>> has already been discussed here
> >>> https://lkml.kernel.org/r/20190418100218.0a4afd51@mschwideX1
> >>> and ended with a promising approach here
> >>> https://lkml.kernel.org/r/20190419153307.4f2911b5@mschwideX1
> >>> which in the end unfortunately didn't quite work completely.
> >>>
> >>> We tried to mimic static level folding by changing pgd_offset to always
> >>> calculate top level page table offset, and do nothing in folded pXd_offset.
> >>> What has been overlooked is that PxD_SIZE/MASK and thus pXd_addr_end do
> >>> not reflect this dynamic behaviour, and still act like static 5-level
> >>> page tables.
> >>>
> >>
> >> [...]
> >>
> >>>
> >>> Fix this by introducing new pXd_addr_end_folded helpers, which take an
> >>> additional pXd entry value parameter, that can be used on s390
> >>> to determine the correct page table level and return corresponding
> >>> end / boundary. With that, the pointer iteration will always
> >>> happen in gup_pgd_range for s390. No change for other architectures
> >>> introduced.
> >>
> >> Not sure pXd_addr_end_folded() is the best understandable name, allthough I don't have any alternative suggestion at the moment.
> >> Maybe could be something like pXd_addr_end_fixup() as it will disappear in the next patch, or pXd_addr_end_gup() ?
> >>
> >> Also, if it happens to be acceptable to get patch 2 in stable, I think you should switch patch 1 and patch 2 to avoid the step through pXd_addr_end_folded()
> >
> > given that this fixes a data corruption issue, wouldnt it be the best to go forward
> > with this patch ASAP and then handle the other patches on top with all the time that
> > we need?
>
> I have no strong opinion on this, but I feel rather tricky to have to
> change generic part of GUP to use a new fonction then revert that change
> in the following patch, just because you want the first patch in stable
> and not the second one.
>
> Regardless, I was wondering, why do we need a reference to the pXd at
> all when calling pXd_addr_end() ?
>
> Couldn't S390 retrieve the pXd by using the pXd_offset() dance with the
> passed addr ?
Apart from performance impact when re-doing that what has already been
done by the caller, I think we would also break the READ_ONCE semantics.
After all, the pXd_offset() would also require some pXd pointer input,
which we don't have. So we would need to start over again from mm->pgd.
Also, it seems to be more in line with other primitives that take
a pXd value or pointer.
_______________________________________________
linux-um mailing list
linux-um@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-um
WARNING: multiple messages have this Message-ID (diff)
From: Gerald Schaefer <gerald.schaefer@linux.ibm.com>
To: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: Peter Zijlstra <peterz@infradead.org>,
Catalin Marinas <catalin.marinas@arm.com>,
Dave Hansen <dave.hansen@linux.intel.com>,
linux-mm <linux-mm@kvack.org>, Paul Mackerras <paulus@samba.org>,
linux-sparc <sparclinux@vger.kernel.org>,
Alexander Gordeev <agordeev@linux.ibm.com>,
Claudio Imbrenda <imbrenda@linux.ibm.com>,
Will Deacon <will@kernel.org>,
linux-arch <linux-arch@vger.kernel.org>,
linux-s390 <linux-s390@vger.kernel.org>,
Vasily Gorbik <gor@linux.ibm.com>,
Christian Borntraeger <borntraeger@de.ibm.com>,
Richard Weinberger <richard@nod.at>, linux-x86 <x86@kernel.org>,
Russell King <linux@armlinux.org.uk>,
Jason Gunthorpe <jgg@ziepe.ca>, Ingo Molnar <mingo@redhat.com>,
Andrey Ryabinin <aryabinin@virtuozzo.com>,
Jeff Dike <jdike@addtoit.com>, Arnd Bergmann <arnd@arndb.de>,
John Hubbard <jhubbard@nvidia.com>,
Heiko Carstens <hca@linux.ibm.com>,
linux-um <linux-um@lists.infradead.org>,
Borislav Petkov <bp@alien8.de>, Andy Lutomirski <luto@kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
linux-arm <linux-arm-kernel@lists.infradead.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
LKML <linux-kernel@vger.kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
linux-power <linuxppc-dev@lists.ozlabs.org>,
Mike Rapoport <rppt@kernel.org>
Subject: Re: [RFC PATCH v2 1/3] mm/gup: fix gup_fast with dynamic page table folding
Date: Tue, 8 Sep 2020 15:38:57 +0200 [thread overview]
Message-ID: <20200908153857.08d09581@thinkpad> (raw)
In-Reply-To: <96b80926-cf5b-1afa-9b7a-949a2188e61f@csgroup.eu>
On Tue, 8 Sep 2020 14:40:10 +0200
Christophe Leroy <christophe.leroy@csgroup.eu> wrote:
>
>
> Le 08/09/2020 à 14:09, Christian Borntraeger a écrit :
> >
> >
> > On 08.09.20 07:06, Christophe Leroy wrote:
> >>
> >>
> >> Le 07/09/2020 à 20:00, Gerald Schaefer a écrit :
> >>> From: Alexander Gordeev <agordeev@linux.ibm.com>
> >>>
> >>> Commit 1a42010cdc26 ("s390/mm: convert to the generic get_user_pages_fast
> >>> code") introduced a subtle but severe bug on s390 with gup_fast, due to
> >>> dynamic page table folding.
> >>>
> >>> The question "What would it require for the generic code to work for s390"
> >>> has already been discussed here
> >>> https://lkml.kernel.org/r/20190418100218.0a4afd51@mschwideX1
> >>> and ended with a promising approach here
> >>> https://lkml.kernel.org/r/20190419153307.4f2911b5@mschwideX1
> >>> which in the end unfortunately didn't quite work completely.
> >>>
> >>> We tried to mimic static level folding by changing pgd_offset to always
> >>> calculate top level page table offset, and do nothing in folded pXd_offset.
> >>> What has been overlooked is that PxD_SIZE/MASK and thus pXd_addr_end do
> >>> not reflect this dynamic behaviour, and still act like static 5-level
> >>> page tables.
> >>>
> >>
> >> [...]
> >>
> >>>
> >>> Fix this by introducing new pXd_addr_end_folded helpers, which take an
> >>> additional pXd entry value parameter, that can be used on s390
> >>> to determine the correct page table level and return corresponding
> >>> end / boundary. With that, the pointer iteration will always
> >>> happen in gup_pgd_range for s390. No change for other architectures
> >>> introduced.
> >>
> >> Not sure pXd_addr_end_folded() is the best understandable name, allthough I don't have any alternative suggestion at the moment.
> >> Maybe could be something like pXd_addr_end_fixup() as it will disappear in the next patch, or pXd_addr_end_gup() ?
> >>
> >> Also, if it happens to be acceptable to get patch 2 in stable, I think you should switch patch 1 and patch 2 to avoid the step through pXd_addr_end_folded()
> >
> > given that this fixes a data corruption issue, wouldnt it be the best to go forward
> > with this patch ASAP and then handle the other patches on top with all the time that
> > we need?
>
> I have no strong opinion on this, but I feel rather tricky to have to
> change generic part of GUP to use a new fonction then revert that change
> in the following patch, just because you want the first patch in stable
> and not the second one.
>
> Regardless, I was wondering, why do we need a reference to the pXd at
> all when calling pXd_addr_end() ?
>
> Couldn't S390 retrieve the pXd by using the pXd_offset() dance with the
> passed addr ?
Apart from performance impact when re-doing that what has already been
done by the caller, I think we would also break the READ_ONCE semantics.
After all, the pXd_offset() would also require some pXd pointer input,
which we don't have. So we would need to start over again from mm->pgd.
Also, it seems to be more in line with other primitives that take
a pXd value or pointer.
WARNING: multiple messages have this Message-ID (diff)
From: Gerald Schaefer <gerald.schaefer@linux.ibm.com>
To: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>,
Jason Gunthorpe <jgg@ziepe.ca>,
John Hubbard <jhubbard@nvidia.com>,
Peter Zijlstra <peterz@infradead.org>,
Dave Hansen <dave.hansen@linux.intel.com>,
linux-mm <linux-mm@kvack.org>, Paul Mackerras <paulus@samba.org>,
linux-sparc <sparclinux@vger.kernel.org>,
Alexander Gordeev <agordeev@linux.ibm.com>,
Claudio Imbrenda <imbrenda@linux.ibm.com>,
Will Deacon <will@kernel.org>,
linux-arch <linux-arch@vger.kernel.org>,
linux-s390 <linux-s390@vger.kernel.org>,
Vasily Gorbik <gor@linux.ibm.com>,
Richard Weinberger <richard@nod.at>, linux-x86 <x86@kernel.org>,
Russell King <linux@armlinux.org.uk>,
Ingo Molnar <mingo@redhat.com>,
Catalin Marinas <catalin.marinas@arm.com>,
Andrey Ryabinin <aryabinin@virtuozzo.com>,
Heiko Carstens <hca@linux.ibm.com>, Arnd Bergmann <arnd@arndb.de>,
Jeff Dike <jdike@addtoit.com>,
linux-um <linux-um@lists.infradead.org>,
Borislav Petkov <bp@alien8.de>, Andy Lutomirski <luto@kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
linux-arm <linux-arm-kernel@lists.infradead.org>,
linux-power <linuxppc-dev@lists.ozlabs.org>,
LKML <linux-kernel@vger.kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
Mike Rapoport <rppt@kernel.org>
Subject: Re: [RFC PATCH v2 1/3] mm/gup: fix gup_fast with dynamic page table folding
Date: Tue, 08 Sep 2020 13:38:57 +0000 [thread overview]
Message-ID: <20200908153857.08d09581@thinkpad> (raw)
In-Reply-To: <96b80926-cf5b-1afa-9b7a-949a2188e61f@csgroup.eu>
On Tue, 8 Sep 2020 14:40:10 +0200
Christophe Leroy <christophe.leroy@csgroup.eu> wrote:
>
>
> Le 08/09/2020 à 14:09, Christian Borntraeger a écrit :
> >
> >
> > On 08.09.20 07:06, Christophe Leroy wrote:
> >>
> >>
> >> Le 07/09/2020 à 20:00, Gerald Schaefer a écrit :
> >>> From: Alexander Gordeev <agordeev@linux.ibm.com>
> >>>
> >>> Commit 1a42010cdc26 ("s390/mm: convert to the generic get_user_pages_fast
> >>> code") introduced a subtle but severe bug on s390 with gup_fast, due to
> >>> dynamic page table folding.
> >>>
> >>> The question "What would it require for the generic code to work for s390"
> >>> has already been discussed here
> >>> https://lkml.kernel.org/r/20190418100218.0a4afd51@mschwideX1
> >>> and ended with a promising approach here
> >>> https://lkml.kernel.org/r/20190419153307.4f2911b5@mschwideX1
> >>> which in the end unfortunately didn't quite work completely.
> >>>
> >>> We tried to mimic static level folding by changing pgd_offset to always
> >>> calculate top level page table offset, and do nothing in folded pXd_offset.
> >>> What has been overlooked is that PxD_SIZE/MASK and thus pXd_addr_end do
> >>> not reflect this dynamic behaviour, and still act like static 5-level
> >>> page tables.
> >>>
> >>
> >> [...]
> >>
> >>>
> >>> Fix this by introducing new pXd_addr_end_folded helpers, which take an
> >>> additional pXd entry value parameter, that can be used on s390
> >>> to determine the correct page table level and return corresponding
> >>> end / boundary. With that, the pointer iteration will always
> >>> happen in gup_pgd_range for s390. No change for other architectures
> >>> introduced.
> >>
> >> Not sure pXd_addr_end_folded() is the best understandable name, allthough I don't have any alternative suggestion at the moment.
> >> Maybe could be something like pXd_addr_end_fixup() as it will disappear in the next patch, or pXd_addr_end_gup() ?
> >>
> >> Also, if it happens to be acceptable to get patch 2 in stable, I think you should switch patch 1 and patch 2 to avoid the step through pXd_addr_end_folded()
> >
> > given that this fixes a data corruption issue, wouldnt it be the best to go forward
> > with this patch ASAP and then handle the other patches on top with all the time that
> > we need?
>
> I have no strong opinion on this, but I feel rather tricky to have to
> change generic part of GUP to use a new fonction then revert that change
> in the following patch, just because you want the first patch in stable
> and not the second one.
>
> Regardless, I was wondering, why do we need a reference to the pXd at
> all when calling pXd_addr_end() ?
>
> Couldn't S390 retrieve the pXd by using the pXd_offset() dance with the
> passed addr ?
Apart from performance impact when re-doing that what has already been
done by the caller, I think we would also break the READ_ONCE semantics.
After all, the pXd_offset() would also require some pXd pointer input,
which we don't have. So we would need to start over again from mm->pgd.
Also, it seems to be more in line with other primitives that take
a pXd value or pointer.
WARNING: multiple messages have this Message-ID (diff)
From: Gerald Schaefer <gerald.schaefer@linux.ibm.com>
To: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: Peter Zijlstra <peterz@infradead.org>,
Catalin Marinas <catalin.marinas@arm.com>,
Dave Hansen <dave.hansen@linux.intel.com>,
linux-mm <linux-mm@kvack.org>, Paul Mackerras <paulus@samba.org>,
linux-sparc <sparclinux@vger.kernel.org>,
Alexander Gordeev <agordeev@linux.ibm.com>,
Claudio Imbrenda <imbrenda@linux.ibm.com>,
Will Deacon <will@kernel.org>,
linux-arch <linux-arch@vger.kernel.org>,
linux-s390 <linux-s390@vger.kernel.org>,
Vasily Gorbik <gor@linux.ibm.com>,
Christian Borntraeger <borntraeger@de.ibm.com>,
Richard Weinberger <richard@nod.at>, linux-x86 <x86@kernel.org>,
Russell King <linux@armlinux.org.uk>,
Jason Gunthorpe <jgg@ziepe.ca>, Ingo Molnar <mingo@redhat.com>,
Andrey Ryabinin <aryabinin@virtuozzo.com>,
Jeff Dike <jdike@addtoit.com>, Arnd Bergmann <arnd@arndb.de>,
John Hubbard <jhubbard@nvidia.com>,
Heiko Carstens <hca@linux.ibm.com>,
linux-um <linux-um@lists.infradead.org>,
Borislav Petkov <bp@alien8.de>, Andy Lutomirski <luto@kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
linux-arm <linux-arm-kernel@lists.infradead.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
LKML <linux-kernel@vger.kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
linux-power <linuxppc-dev@lists.ozlabs.org>,
Mike Rapoport <rppt@kernel.org>
Subject: Re: [RFC PATCH v2 1/3] mm/gup: fix gup_fast with dynamic page table folding
Date: Tue, 8 Sep 2020 15:38:57 +0200 [thread overview]
Message-ID: <20200908153857.08d09581@thinkpad> (raw)
In-Reply-To: <96b80926-cf5b-1afa-9b7a-949a2188e61f@csgroup.eu>
On Tue, 8 Sep 2020 14:40:10 +0200
Christophe Leroy <christophe.leroy@csgroup.eu> wrote:
>
>
> Le 08/09/2020 à 14:09, Christian Borntraeger a écrit :
> >
> >
> > On 08.09.20 07:06, Christophe Leroy wrote:
> >>
> >>
> >> Le 07/09/2020 à 20:00, Gerald Schaefer a écrit :
> >>> From: Alexander Gordeev <agordeev@linux.ibm.com>
> >>>
> >>> Commit 1a42010cdc26 ("s390/mm: convert to the generic get_user_pages_fast
> >>> code") introduced a subtle but severe bug on s390 with gup_fast, due to
> >>> dynamic page table folding.
> >>>
> >>> The question "What would it require for the generic code to work for s390"
> >>> has already been discussed here
> >>> https://lkml.kernel.org/r/20190418100218.0a4afd51@mschwideX1
> >>> and ended with a promising approach here
> >>> https://lkml.kernel.org/r/20190419153307.4f2911b5@mschwideX1
> >>> which in the end unfortunately didn't quite work completely.
> >>>
> >>> We tried to mimic static level folding by changing pgd_offset to always
> >>> calculate top level page table offset, and do nothing in folded pXd_offset.
> >>> What has been overlooked is that PxD_SIZE/MASK and thus pXd_addr_end do
> >>> not reflect this dynamic behaviour, and still act like static 5-level
> >>> page tables.
> >>>
> >>
> >> [...]
> >>
> >>>
> >>> Fix this by introducing new pXd_addr_end_folded helpers, which take an
> >>> additional pXd entry value parameter, that can be used on s390
> >>> to determine the correct page table level and return corresponding
> >>> end / boundary. With that, the pointer iteration will always
> >>> happen in gup_pgd_range for s390. No change for other architectures
> >>> introduced.
> >>
> >> Not sure pXd_addr_end_folded() is the best understandable name, allthough I don't have any alternative suggestion at the moment.
> >> Maybe could be something like pXd_addr_end_fixup() as it will disappear in the next patch, or pXd_addr_end_gup() ?
> >>
> >> Also, if it happens to be acceptable to get patch 2 in stable, I think you should switch patch 1 and patch 2 to avoid the step through pXd_addr_end_folded()
> >
> > given that this fixes a data corruption issue, wouldnt it be the best to go forward
> > with this patch ASAP and then handle the other patches on top with all the time that
> > we need?
>
> I have no strong opinion on this, but I feel rather tricky to have to
> change generic part of GUP to use a new fonction then revert that change
> in the following patch, just because you want the first patch in stable
> and not the second one.
>
> Regardless, I was wondering, why do we need a reference to the pXd at
> all when calling pXd_addr_end() ?
>
> Couldn't S390 retrieve the pXd by using the pXd_offset() dance with the
> passed addr ?
Apart from performance impact when re-doing that what has already been
done by the caller, I think we would also break the READ_ONCE semantics.
After all, the pXd_offset() would also require some pXd pointer input,
which we don't have. So we would need to start over again from mm->pgd.
Also, it seems to be more in line with other primitives that take
a pXd value or pointer.
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2020-09-08 19:29 UTC|newest]
Thread overview: 307+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-07 18:00 [RFC PATCH v2 0/3] mm/gup: fix gup_fast with dynamic page table folding Gerald Schaefer
2020-09-07 18:00 ` Gerald Schaefer
2020-09-07 18:00 ` Gerald Schaefer
2020-09-07 18:00 ` Gerald Schaefer
2020-09-07 18:00 ` Gerald Schaefer
2020-09-07 18:00 ` [RFC PATCH v2 1/3] " Gerald Schaefer
2020-09-07 18:00 ` Gerald Schaefer
2020-09-07 18:00 ` Gerald Schaefer
2020-09-07 18:00 ` Gerald Schaefer
2020-09-07 18:00 ` Gerald Schaefer
2020-09-08 5:06 ` Christophe Leroy
2020-09-08 5:06 ` Christophe Leroy
2020-09-08 5:06 ` Christophe Leroy
2020-09-08 5:06 ` Christophe Leroy
2020-09-08 5:06 ` Christophe Leroy
2020-09-08 12:09 ` Christian Borntraeger
2020-09-08 12:09 ` Christian Borntraeger
2020-09-08 12:09 ` Christian Borntraeger
2020-09-08 12:09 ` Christian Borntraeger
2020-09-08 12:09 ` Christian Borntraeger
2020-09-08 12:40 ` Christophe Leroy
2020-09-08 12:40 ` Christophe Leroy
2020-09-08 12:40 ` Christophe Leroy
2020-09-08 12:40 ` Christophe Leroy
2020-09-08 12:40 ` Christophe Leroy
2020-09-08 13:38 ` Gerald Schaefer [this message]
2020-09-08 13:38 ` Gerald Schaefer
2020-09-08 13:38 ` Gerald Schaefer
2020-09-08 13:38 ` Gerald Schaefer
2020-09-08 13:38 ` Gerald Schaefer
2020-09-08 14:30 ` Dave Hansen
2020-09-08 14:30 ` Dave Hansen
2020-09-08 14:30 ` Dave Hansen
2020-09-08 14:30 ` Dave Hansen
2020-09-08 17:59 ` Gerald Schaefer
2020-09-08 17:59 ` Gerald Schaefer
2020-09-08 17:59 ` Gerald Schaefer
2020-09-08 17:59 ` Gerald Schaefer
2020-09-08 17:59 ` Gerald Schaefer
2020-09-09 12:29 ` Gerald Schaefer
2020-09-09 12:29 ` Gerald Schaefer
2020-09-09 12:29 ` Gerald Schaefer
2020-09-09 12:29 ` Gerald Schaefer
2020-09-09 12:29 ` Gerald Schaefer
2020-09-09 16:18 ` Dave Hansen
2020-09-09 16:18 ` Dave Hansen
2020-09-09 16:18 ` Dave Hansen
2020-09-09 16:18 ` Dave Hansen
2020-09-09 16:18 ` Dave Hansen
2020-09-09 17:25 ` Gerald Schaefer
2020-09-09 17:25 ` Gerald Schaefer
2020-09-09 17:25 ` Gerald Schaefer
2020-09-09 17:25 ` Gerald Schaefer
2020-09-09 17:25 ` Gerald Schaefer
2020-09-09 18:03 ` Jason Gunthorpe
2020-09-09 18:03 ` Jason Gunthorpe
2020-09-09 18:03 ` Jason Gunthorpe
2020-09-09 18:03 ` Jason Gunthorpe
2020-09-09 18:03 ` Jason Gunthorpe
2020-09-10 9:39 ` Alexander Gordeev
2020-09-10 9:39 ` Alexander Gordeev
2020-09-10 9:39 ` Alexander Gordeev
2020-09-10 9:39 ` Alexander Gordeev
2020-09-10 9:39 ` Alexander Gordeev
2020-09-10 13:02 ` Jason Gunthorpe
2020-09-10 13:02 ` Jason Gunthorpe
2020-09-10 13:02 ` Jason Gunthorpe
2020-09-10 13:02 ` Jason Gunthorpe
2020-09-10 13:02 ` Jason Gunthorpe
2020-09-10 13:28 ` Gerald Schaefer
2020-09-10 13:28 ` Gerald Schaefer
2020-09-10 13:28 ` Gerald Schaefer
2020-09-10 13:28 ` Gerald Schaefer
2020-09-10 13:28 ` Gerald Schaefer
2020-09-10 15:10 ` Jason Gunthorpe
2020-09-10 15:10 ` Jason Gunthorpe
2020-09-10 15:10 ` Jason Gunthorpe
2020-09-10 15:10 ` Jason Gunthorpe
2020-09-10 15:10 ` Jason Gunthorpe
2020-09-10 17:07 ` Gerald Schaefer
2020-09-10 17:07 ` Gerald Schaefer
2020-09-10 17:07 ` Gerald Schaefer
2020-09-10 17:07 ` Gerald Schaefer
2020-09-10 17:07 ` Gerald Schaefer
2020-09-10 17:19 ` Jason Gunthorpe
2020-09-10 17:19 ` Jason Gunthorpe
2020-09-10 17:19 ` Jason Gunthorpe
2020-09-10 17:19 ` Jason Gunthorpe
2020-09-10 17:19 ` Jason Gunthorpe
2020-09-10 17:57 ` Gerald Schaefer
2020-09-10 17:57 ` Gerald Schaefer
2020-09-10 17:57 ` Gerald Schaefer
2020-09-10 17:57 ` Gerald Schaefer
2020-09-10 17:57 ` Gerald Schaefer
2020-09-10 23:21 ` Jason Gunthorpe
2020-09-10 23:21 ` Jason Gunthorpe
2020-09-10 23:21 ` Jason Gunthorpe
2020-09-10 23:21 ` Jason Gunthorpe
2020-09-10 23:21 ` Jason Gunthorpe
2020-09-10 17:35 ` Linus Torvalds
2020-09-10 17:35 ` Linus Torvalds
2020-09-10 17:35 ` Linus Torvalds
2020-09-10 17:35 ` Linus Torvalds
2020-09-10 17:35 ` Linus Torvalds
2020-09-10 18:13 ` Jason Gunthorpe
2020-09-10 18:13 ` Jason Gunthorpe
2020-09-10 18:13 ` Jason Gunthorpe
2020-09-10 18:13 ` Jason Gunthorpe
2020-09-10 18:13 ` Jason Gunthorpe
2020-09-10 18:33 ` Linus Torvalds
2020-09-10 18:33 ` Linus Torvalds
2020-09-10 18:33 ` Linus Torvalds
2020-09-10 18:33 ` Linus Torvalds
2020-09-10 19:10 ` Gerald Schaefer
2020-09-10 19:10 ` Gerald Schaefer
2020-09-10 19:10 ` Gerald Schaefer
2020-09-10 19:10 ` Gerald Schaefer
2020-09-10 19:10 ` Gerald Schaefer
2020-09-10 19:32 ` Linus Torvalds
2020-09-10 19:32 ` Linus Torvalds
2020-09-10 19:32 ` Linus Torvalds
2020-09-10 19:32 ` Linus Torvalds
2020-09-10 21:59 ` Jason Gunthorpe
2020-09-10 21:59 ` Jason Gunthorpe
2020-09-10 21:59 ` Jason Gunthorpe
2020-09-10 21:59 ` Jason Gunthorpe
2020-09-10 21:59 ` Jason Gunthorpe
2020-09-11 7:09 ` peterz
2020-09-11 7:09 ` peterz
2020-09-11 7:09 ` peterz
2020-09-11 7:09 ` peterz
2020-09-11 7:09 ` peterz
2020-09-11 11:19 ` Jason Gunthorpe
2020-09-11 11:19 ` Jason Gunthorpe
2020-09-11 11:19 ` Jason Gunthorpe
2020-09-11 11:19 ` Jason Gunthorpe
2020-09-11 11:19 ` Jason Gunthorpe
2020-09-11 19:03 ` [PATCH] " Vasily Gorbik
2020-09-11 19:03 ` Vasily Gorbik
2020-09-11 19:03 ` Vasily Gorbik
2020-09-11 19:03 ` Vasily Gorbik
2020-09-11 19:03 ` Vasily Gorbik
2020-09-11 19:09 ` Linus Torvalds
2020-09-11 19:09 ` Linus Torvalds
2020-09-11 19:09 ` Linus Torvalds
2020-09-11 19:09 ` Linus Torvalds
2020-09-11 19:40 ` Jason Gunthorpe
2020-09-11 19:40 ` Jason Gunthorpe
2020-09-11 19:40 ` Jason Gunthorpe
2020-09-11 19:40 ` Jason Gunthorpe
2020-09-11 19:40 ` Jason Gunthorpe
2020-09-11 20:05 ` Jason Gunthorpe
2020-09-11 20:05 ` Jason Gunthorpe
2020-09-11 20:05 ` Jason Gunthorpe
2020-09-11 20:05 ` Jason Gunthorpe
2020-09-11 20:05 ` Jason Gunthorpe
2020-09-11 20:36 ` [PATCH v2] " Vasily Gorbik
2020-09-11 20:36 ` Vasily Gorbik
2020-09-11 20:36 ` Vasily Gorbik
2020-09-11 20:36 ` Vasily Gorbik
2020-09-11 20:36 ` Vasily Gorbik
2020-09-15 17:09 ` Vasily Gorbik
2020-09-15 17:09 ` Vasily Gorbik
2020-09-15 17:09 ` Vasily Gorbik
2020-09-15 17:09 ` Vasily Gorbik
2020-09-15 17:09 ` Vasily Gorbik
2020-09-15 17:14 ` Jason Gunthorpe
2020-09-15 17:14 ` Jason Gunthorpe
2020-09-15 17:14 ` Jason Gunthorpe
2020-09-15 17:14 ` Jason Gunthorpe
2020-09-15 17:14 ` Jason Gunthorpe
2020-09-15 17:18 ` Mike Rapoport
2020-09-15 17:18 ` Mike Rapoport
2020-09-15 17:18 ` Mike Rapoport
2020-09-15 17:18 ` Mike Rapoport
2020-09-15 17:18 ` Mike Rapoport
2020-09-15 17:31 ` John Hubbard
2020-09-15 17:31 ` John Hubbard
2020-09-15 17:31 ` John Hubbard
2020-09-15 17:31 ` John Hubbard
2020-09-15 17:31 ` John Hubbard
2020-09-17 15:53 ` Sasha Levin
2020-09-18 15:15 ` Vasily Gorbik
2020-09-18 15:15 ` [PATCH stable-5.4.y backport] " Vasily Gorbik
2020-09-10 21:22 ` [RFC PATCH v2 1/3] " John Hubbard
2020-09-10 21:22 ` John Hubbard
2020-09-10 21:22 ` John Hubbard
2020-09-10 21:22 ` John Hubbard
2020-09-10 21:22 ` John Hubbard
2020-09-10 22:11 ` Jason Gunthorpe
2020-09-10 22:11 ` Jason Gunthorpe
2020-09-10 22:11 ` Jason Gunthorpe
2020-09-10 22:11 ` Jason Gunthorpe
2020-09-10 22:11 ` Jason Gunthorpe
2020-09-10 22:17 ` John Hubbard
2020-09-10 22:17 ` John Hubbard
2020-09-10 22:17 ` John Hubbard
2020-09-10 22:17 ` John Hubbard
2020-09-10 22:17 ` John Hubbard
2020-09-11 12:19 ` Alexander Gordeev
2020-09-11 12:19 ` Alexander Gordeev
2020-09-11 12:19 ` Alexander Gordeev
2020-09-11 12:19 ` Alexander Gordeev
2020-09-11 12:19 ` Alexander Gordeev
2020-09-11 16:45 ` Linus Torvalds
2020-09-11 16:45 ` Linus Torvalds
2020-09-11 16:45 ` Linus Torvalds
2020-09-11 16:45 ` Linus Torvalds
2020-09-10 13:11 ` Gerald Schaefer
2020-09-10 13:11 ` Gerald Schaefer
2020-09-10 13:11 ` Gerald Schaefer
2020-09-10 13:11 ` Gerald Schaefer
2020-09-10 13:11 ` Gerald Schaefer
2020-09-07 18:00 ` [RFC PATCH v2 2/3] mm: make pXd_addr_end() functions page-table entry aware Gerald Schaefer
2020-09-07 18:00 ` Gerald Schaefer
2020-09-07 18:00 ` Gerald Schaefer
2020-09-07 18:00 ` Gerald Schaefer
2020-09-07 18:00 ` Gerald Schaefer
2020-09-08 5:14 ` Christophe Leroy
2020-09-08 5:14 ` Christophe Leroy
2020-09-08 5:14 ` Christophe Leroy
2020-09-08 5:14 ` Christophe Leroy
2020-09-08 5:14 ` Christophe Leroy
2020-09-08 7:46 ` Alexander Gordeev
2020-09-08 7:46 ` Alexander Gordeev
2020-09-08 7:46 ` Alexander Gordeev
2020-09-08 7:46 ` Alexander Gordeev
2020-09-08 7:46 ` Alexander Gordeev
2020-09-08 8:16 ` Christophe Leroy
2020-09-08 8:16 ` Christophe Leroy
2020-09-08 8:16 ` Christophe Leroy
2020-09-08 8:16 ` Christophe Leroy
2020-09-08 8:16 ` Christophe Leroy
2020-09-08 14:15 ` Alexander Gordeev
2020-09-08 14:15 ` Alexander Gordeev
2020-09-08 14:15 ` Alexander Gordeev
2020-09-08 14:15 ` Alexander Gordeev
2020-09-08 14:15 ` Alexander Gordeev
2020-09-09 8:38 ` Christophe Leroy
2020-09-09 8:38 ` Christophe Leroy
2020-09-09 8:38 ` Christophe Leroy
2020-09-09 8:38 ` Christophe Leroy
2020-09-08 14:25 ` Alexander Gordeev
2020-09-08 14:25 ` Alexander Gordeev
2020-09-08 14:25 ` Alexander Gordeev
2020-09-08 14:25 ` Alexander Gordeev
2020-09-08 14:25 ` Alexander Gordeev
2020-09-08 13:26 ` Jason Gunthorpe
2020-09-08 13:26 ` Jason Gunthorpe
2020-09-08 13:26 ` Jason Gunthorpe
2020-09-08 13:26 ` Jason Gunthorpe
2020-09-08 13:26 ` Jason Gunthorpe
2020-09-08 14:33 ` Dave Hansen
2020-09-08 14:33 ` Dave Hansen
2020-09-08 14:33 ` Dave Hansen
2020-09-08 14:33 ` Dave Hansen
2020-09-07 18:00 ` [RFC PATCH v2 3/3] mm: make generic pXd_addr_end() macros inline functions Gerald Schaefer
2020-09-07 18:00 ` Gerald Schaefer
2020-09-07 18:00 ` Gerald Schaefer
2020-09-07 18:00 ` Gerald Schaefer
2020-09-07 18:00 ` Gerald Schaefer
2020-09-07 20:15 ` Mike Rapoport
2020-09-07 20:15 ` Mike Rapoport
2020-09-07 20:15 ` Mike Rapoport
2020-09-07 20:15 ` Mike Rapoport
2020-09-07 20:15 ` Mike Rapoport
2020-09-08 5:19 ` Christophe Leroy
2020-09-08 5:19 ` Christophe Leroy
2020-09-08 5:19 ` Christophe Leroy
2020-09-08 5:19 ` Christophe Leroy
2020-09-08 5:19 ` Christophe Leroy
2020-09-08 15:48 ` Alexander Gordeev
2020-09-08 15:48 ` Alexander Gordeev
2020-09-08 15:48 ` Alexander Gordeev
2020-09-08 15:48 ` Alexander Gordeev
2020-09-08 15:48 ` Alexander Gordeev
2020-09-08 17:20 ` Christophe Leroy
2020-09-08 17:20 ` Christophe Leroy
2020-09-08 17:20 ` Christophe Leroy
2020-09-08 17:20 ` Christophe Leroy
2020-09-08 17:20 ` Christophe Leroy
2020-09-08 16:05 ` kernel test robot
2020-09-07 20:12 ` [RFC PATCH v2 0/3] mm/gup: fix gup_fast with dynamic page table folding Mike Rapoport
2020-09-07 20:12 ` Mike Rapoport
2020-09-07 20:12 ` Mike Rapoport
2020-09-07 20:12 ` Mike Rapoport
2020-09-07 20:12 ` Mike Rapoport
2020-09-08 5:22 ` Christophe Leroy
2020-09-08 5:22 ` Christophe Leroy
2020-09-08 5:22 ` Christophe Leroy
2020-09-08 5:22 ` Christophe Leroy
2020-09-08 5:22 ` Christophe Leroy
2020-09-08 17:36 ` Gerald Schaefer
2020-09-08 17:36 ` Gerald Schaefer
2020-09-08 17:36 ` Gerald Schaefer
2020-09-08 17:36 ` Gerald Schaefer
2020-09-08 17:36 ` Gerald Schaefer
2020-09-09 16:12 ` Gerald Schaefer
2020-09-09 16:12 ` Gerald Schaefer
2020-09-09 16:12 ` Gerald Schaefer
2020-09-09 16:12 ` Gerald Schaefer
2020-09-09 16:12 ` Gerald Schaefer
2020-09-08 4:42 ` Christophe Leroy
2020-09-08 4:42 ` Christophe Leroy
2020-09-08 4:42 ` Christophe Leroy
2020-09-08 4:42 ` Christophe Leroy
2020-09-08 4:42 ` Christophe Leroy
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=20200908153857.08d09581@thinkpad \
--to=gerald.schaefer@linux.ibm.com \
--cc=agordeev@linux.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=arnd@arndb.de \
--cc=aryabinin@virtuozzo.com \
--cc=borntraeger@de.ibm.com \
--cc=bp@alien8.de \
--cc=catalin.marinas@arm.com \
--cc=christophe.leroy@csgroup.eu \
--cc=dave.hansen@linux.intel.com \
--cc=gor@linux.ibm.com \
--cc=hca@linux.ibm.com \
--cc=imbrenda@linux.ibm.com \
--cc=jdike@addtoit.com \
--cc=jgg@ziepe.ca \
--cc=jhubbard@nvidia.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-s390@vger.kernel.org \
--cc=linux-um@lists.infradead.org \
--cc=linux@armlinux.org.uk \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=luto@kernel.org \
--cc=mingo@redhat.com \
--cc=paulus@samba.org \
--cc=peterz@infradead.org \
--cc=richard@nod.at \
--cc=rppt@kernel.org \
--cc=sparclinux@vger.kernel.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=will@kernel.org \
--cc=x86@kernel.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: link
Be 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.