2021-03-29 09:05:33

by Greg Kroah-Hartman

[permalink] [raw]
Subject: [PATCH 5.11 225/254] arm64/mm: define arch_get_mappable_range()

From: Anshuman Khandual <[email protected]>

[ Upstream commit 03aaf83fba6e5af08b5dd174c72edee9b7d9ed9b ]

This overrides arch_get_mappable_range() on arm64 platform which will be
used with recently added generic framework. It drops
inside_linear_region() and subsequent check in arch_add_memory() which are
no longer required. It also adds a VM_BUG_ON() check that would ensure
that mhp_range_allowed() has already been called.

Link: https://lkml.kernel.org/r/[email protected]
Signed-off-by: Anshuman Khandual <[email protected]>
Reviewed-by: David Hildenbrand <[email protected]>
Reviewed-by: Catalin Marinas <[email protected]>
Cc: Will Deacon <[email protected]>
Cc: Ard Biesheuvel <[email protected]>
Cc: Mark Rutland <[email protected]>
Cc: Heiko Carstens <[email protected]>
Cc: Jason Wang <[email protected]>
Cc: Jonathan Cameron <[email protected]>
Cc: "Michael S. Tsirkin" <[email protected]>
Cc: Michal Hocko <[email protected]>
Cc: Oscar Salvador <[email protected]>
Cc: Pankaj Gupta <[email protected]>
Cc: Pankaj Gupta <[email protected]>
Cc: teawater <[email protected]>
Cc: Vasily Gorbik <[email protected]>
Cc: Wei Yang <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
---
arch/arm64/mm/mmu.c | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
index 6f0648777d34..92b3be127796 100644
--- a/arch/arm64/mm/mmu.c
+++ b/arch/arm64/mm/mmu.c
@@ -1443,16 +1443,19 @@ static void __remove_pgd_mapping(pgd_t *pgdir, unsigned long start, u64 size)
free_empty_tables(start, end, PAGE_OFFSET, PAGE_END);
}

-static bool inside_linear_region(u64 start, u64 size)
+struct range arch_get_mappable_range(void)
{
+ struct range mhp_range;
+
/*
* Linear mapping region is the range [PAGE_OFFSET..(PAGE_END - 1)]
* accommodating both its ends but excluding PAGE_END. Max physical
* range which can be mapped inside this linear mapping range, must
* also be derived from its end points.
*/
- return start >= __pa(_PAGE_OFFSET(vabits_actual)) &&
- (start + size - 1) <= __pa(PAGE_END - 1);
+ mhp_range.start = __pa(_PAGE_OFFSET(vabits_actual));
+ mhp_range.end = __pa(PAGE_END - 1);
+ return mhp_range;
}

int arch_add_memory(int nid, u64 start, u64 size,
@@ -1460,11 +1463,7 @@ int arch_add_memory(int nid, u64 start, u64 size,
{
int ret, flags = 0;

- if (!inside_linear_region(start, size)) {
- pr_err("[%llx %llx] is outside linear mapping region\n", start, start + size);
- return -EINVAL;
- }
-
+ VM_BUG_ON(!mhp_range_allowed(start, size, true));
if (rodata_full || debug_pagealloc_enabled())
flags = NO_BLOCK_MAPPINGS | NO_CONT_MAPPINGS;

--
2.30.1




2021-03-29 09:37:46

by Naresh Kamboju

[permalink] [raw]
Subject: Re: [PATCH 5.11 225/254] arm64/mm: define arch_get_mappable_range()

On Mon, 29 Mar 2021 at 14:10, Greg Kroah-Hartman
<[email protected]> wrote:
>
> From: Anshuman Khandual <[email protected]>
>
> [ Upstream commit 03aaf83fba6e5af08b5dd174c72edee9b7d9ed9b ]
>
> This overrides arch_get_mappable_range() on arm64 platform which will be
> used with recently added generic framework. It drops
> inside_linear_region() and subsequent check in arch_add_memory() which are
> no longer required. It also adds a VM_BUG_ON() check that would ensure
> that mhp_range_allowed() has already been called.
>
> Link: https://lkml.kernel.org/r/[email protected]
> Signed-off-by: Anshuman Khandual <[email protected]>
> Reviewed-by: David Hildenbrand <[email protected]>
> Reviewed-by: Catalin Marinas <[email protected]>
> Cc: Will Deacon <[email protected]>
> Cc: Ard Biesheuvel <[email protected]>
> Cc: Mark Rutland <[email protected]>
> Cc: Heiko Carstens <[email protected]>
> Cc: Jason Wang <[email protected]>
> Cc: Jonathan Cameron <[email protected]>
> Cc: "Michael S. Tsirkin" <[email protected]>
> Cc: Michal Hocko <[email protected]>
> Cc: Oscar Salvador <[email protected]>
> Cc: Pankaj Gupta <[email protected]>
> Cc: Pankaj Gupta <[email protected]>
> Cc: teawater <[email protected]>
> Cc: Vasily Gorbik <[email protected]>
> Cc: Wei Yang <[email protected]>
> Signed-off-by: Andrew Morton <[email protected]>
> Signed-off-by: Linus Torvalds <[email protected]>
> Signed-off-by: Sasha Levin <[email protected]>
> ---
> arch/arm64/mm/mmu.c | 15 +++++++--------
> 1 file changed, 7 insertions(+), 8 deletions(-)
>
> diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
> index 6f0648777d34..92b3be127796 100644
> --- a/arch/arm64/mm/mmu.c
> +++ b/arch/arm64/mm/mmu.c
> @@ -1443,16 +1443,19 @@ static void __remove_pgd_mapping(pgd_t *pgdir, unsigned long start, u64 size)
> free_empty_tables(start, end, PAGE_OFFSET, PAGE_END);
> }
>
> -static bool inside_linear_region(u64 start, u64 size)
> +struct range arch_get_mappable_range(void)
> {
> + struct range mhp_range;
> +
> /*
> * Linear mapping region is the range [PAGE_OFFSET..(PAGE_END - 1)]
> * accommodating both its ends but excluding PAGE_END. Max physical
> * range which can be mapped inside this linear mapping range, must
> * also be derived from its end points.
> */
> - return start >= __pa(_PAGE_OFFSET(vabits_actual)) &&
> - (start + size - 1) <= __pa(PAGE_END - 1);
> + mhp_range.start = __pa(_PAGE_OFFSET(vabits_actual));
> + mhp_range.end = __pa(PAGE_END - 1);
> + return mhp_range;
> }
>
> int arch_add_memory(int nid, u64 start, u64 size,
> @@ -1460,11 +1463,7 @@ int arch_add_memory(int nid, u64 start, u64 size,
> {
> int ret, flags = 0;
>
> - if (!inside_linear_region(start, size)) {
> - pr_err("[%llx %llx] is outside linear mapping region\n", start, start + size);
> - return -EINVAL;
> - }
> -
> + VM_BUG_ON(!mhp_range_allowed(start, size, true));
> if (rodata_full || debug_pagealloc_enabled())
> flags = NO_BLOCK_MAPPINGS | NO_CONT_MAPPINGS;

The stable rc 5.10 and 5.11 builds failed for arm64 architecture
due to below warnings / errors,

> Anshuman Khandual <[email protected]>
> arm64/mm: define arch_get_mappable_range()


arch/arm64/mm/mmu.c: In function 'arch_add_memory':
arch/arm64/mm/mmu.c:1483:13: error: implicit declaration of function
'mhp_range_allowed'; did you mean 'cpu_map_prog_allowed'?
[-Werror=implicit-function-declaration]
VM_BUG_ON(!mhp_range_allowed(start, size, true));
^
include/linux/build_bug.h:30:63: note: in definition of macro
'BUILD_BUG_ON_INVALID'
#define BUILD_BUG_ON_INVALID(e) ((void)(sizeof((__force long)(e))))
^
arch/arm64/mm/mmu.c:1483:2: note: in expansion of macro 'VM_BUG_ON'
VM_BUG_ON(!mhp_range_allowed(start, size, true));
^~~~~~~~~

Build link,
https://ci.linaro.org/view/lkft/job/openembedded-lkft-linux-stable-rc-5.11/DISTRO=lkft,MACHINE=juno,label=docker-buster-lkft/41/consoleText
https://ci.linaro.org/view/lkft/job/openembedded-lkft-linux-stable-rc-5.10/DISTRO=lkft,MACHINE=dragonboard-410c,label=docker-buster-lkft/120/consoleFull

--
Linaro LKFT
https://lkft.linaro.org

2021-03-29 10:14:48

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCH 5.11 225/254] arm64/mm: define arch_get_mappable_range()

On Mon, Mar 29, 2021 at 03:05:25PM +0530, Naresh Kamboju wrote:
> On Mon, 29 Mar 2021 at 14:10, Greg Kroah-Hartman
> <[email protected]> wrote:
> >
> > From: Anshuman Khandual <[email protected]>
> >
> > [ Upstream commit 03aaf83fba6e5af08b5dd174c72edee9b7d9ed9b ]
> >
> > This overrides arch_get_mappable_range() on arm64 platform which will be
> > used with recently added generic framework. It drops
> > inside_linear_region() and subsequent check in arch_add_memory() which are
> > no longer required. It also adds a VM_BUG_ON() check that would ensure
> > that mhp_range_allowed() has already been called.
> >
> > Link: https://lkml.kernel.org/r/[email protected]
> > Signed-off-by: Anshuman Khandual <[email protected]>
> > Reviewed-by: David Hildenbrand <[email protected]>
> > Reviewed-by: Catalin Marinas <[email protected]>
> > Cc: Will Deacon <[email protected]>
> > Cc: Ard Biesheuvel <[email protected]>
> > Cc: Mark Rutland <[email protected]>
> > Cc: Heiko Carstens <[email protected]>
> > Cc: Jason Wang <[email protected]>
> > Cc: Jonathan Cameron <[email protected]>
> > Cc: "Michael S. Tsirkin" <[email protected]>
> > Cc: Michal Hocko <[email protected]>
> > Cc: Oscar Salvador <[email protected]>
> > Cc: Pankaj Gupta <[email protected]>
> > Cc: Pankaj Gupta <[email protected]>
> > Cc: teawater <[email protected]>
> > Cc: Vasily Gorbik <[email protected]>
> > Cc: Wei Yang <[email protected]>
> > Signed-off-by: Andrew Morton <[email protected]>
> > Signed-off-by: Linus Torvalds <[email protected]>
> > Signed-off-by: Sasha Levin <[email protected]>
> > ---
> > arch/arm64/mm/mmu.c | 15 +++++++--------
> > 1 file changed, 7 insertions(+), 8 deletions(-)
> >
> > diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
> > index 6f0648777d34..92b3be127796 100644
> > --- a/arch/arm64/mm/mmu.c
> > +++ b/arch/arm64/mm/mmu.c
> > @@ -1443,16 +1443,19 @@ static void __remove_pgd_mapping(pgd_t *pgdir, unsigned long start, u64 size)
> > free_empty_tables(start, end, PAGE_OFFSET, PAGE_END);
> > }
> >
> > -static bool inside_linear_region(u64 start, u64 size)
> > +struct range arch_get_mappable_range(void)
> > {
> > + struct range mhp_range;
> > +
> > /*
> > * Linear mapping region is the range [PAGE_OFFSET..(PAGE_END - 1)]
> > * accommodating both its ends but excluding PAGE_END. Max physical
> > * range which can be mapped inside this linear mapping range, must
> > * also be derived from its end points.
> > */
> > - return start >= __pa(_PAGE_OFFSET(vabits_actual)) &&
> > - (start + size - 1) <= __pa(PAGE_END - 1);
> > + mhp_range.start = __pa(_PAGE_OFFSET(vabits_actual));
> > + mhp_range.end = __pa(PAGE_END - 1);
> > + return mhp_range;
> > }
> >
> > int arch_add_memory(int nid, u64 start, u64 size,
> > @@ -1460,11 +1463,7 @@ int arch_add_memory(int nid, u64 start, u64 size,
> > {
> > int ret, flags = 0;
> >
> > - if (!inside_linear_region(start, size)) {
> > - pr_err("[%llx %llx] is outside linear mapping region\n", start, start + size);
> > - return -EINVAL;
> > - }
> > -
> > + VM_BUG_ON(!mhp_range_allowed(start, size, true));
> > if (rodata_full || debug_pagealloc_enabled())
> > flags = NO_BLOCK_MAPPINGS | NO_CONT_MAPPINGS;
>
> The stable rc 5.10 and 5.11 builds failed for arm64 architecture
> due to below warnings / errors,
>
> > Anshuman Khandual <[email protected]>
> > arm64/mm: define arch_get_mappable_range()
>
>
> arch/arm64/mm/mmu.c: In function 'arch_add_memory':
> arch/arm64/mm/mmu.c:1483:13: error: implicit declaration of function
> 'mhp_range_allowed'; did you mean 'cpu_map_prog_allowed'?
> [-Werror=implicit-function-declaration]
> VM_BUG_ON(!mhp_range_allowed(start, size, true));
> ^
> include/linux/build_bug.h:30:63: note: in definition of macro
> 'BUILD_BUG_ON_INVALID'
> #define BUILD_BUG_ON_INVALID(e) ((void)(sizeof((__force long)(e))))
> ^
> arch/arm64/mm/mmu.c:1483:2: note: in expansion of macro 'VM_BUG_ON'
> VM_BUG_ON(!mhp_range_allowed(start, size, true));
> ^~~~~~~~~
>
> Build link,
> https://ci.linaro.org/view/lkft/job/openembedded-lkft-linux-stable-rc-5.11/DISTRO=lkft,MACHINE=juno,label=docker-buster-lkft/41/consoleText
> https://ci.linaro.org/view/lkft/job/openembedded-lkft-linux-stable-rc-5.10/DISTRO=lkft,MACHINE=dragonboard-410c,label=docker-buster-lkft/120/consoleFull

thanks, will go drop this, and the patch that was after it in the
series, from both trees and will push out a -rc2.

Note, I used tuxbuild before doing this release, and it does not show
this error in the arm64 defconfigs. What config did you use to trigger
this?

thanks,

greg k-h

2021-03-29 11:08:40

by Anders Roxell

[permalink] [raw]
Subject: Re: [PATCH 5.11 225/254] arm64/mm: define arch_get_mappable_range()

On Mon, 29 Mar 2021 at 12:13, Greg Kroah-Hartman
<[email protected]> wrote:
>
> On Mon, Mar 29, 2021 at 03:05:25PM +0530, Naresh Kamboju wrote:
> > On Mon, 29 Mar 2021 at 14:10, Greg Kroah-Hartman
> > <[email protected]> wrote:
> > >
> > > From: Anshuman Khandual <[email protected]>
> > >
> > > [ Upstream commit 03aaf83fba6e5af08b5dd174c72edee9b7d9ed9b ]
> > >
> > > This overrides arch_get_mappable_range() on arm64 platform which will be
> > > used with recently added generic framework. It drops
> > > inside_linear_region() and subsequent check in arch_add_memory() which are
> > > no longer required. It also adds a VM_BUG_ON() check that would ensure
> > > that mhp_range_allowed() has already been called.
> > >
> > > Link: https://lkml.kernel.org/r/[email protected]
> > > Signed-off-by: Anshuman Khandual <[email protected]>
> > > Reviewed-by: David Hildenbrand <[email protected]>
> > > Reviewed-by: Catalin Marinas <[email protected]>
> > > Cc: Will Deacon <[email protected]>
> > > Cc: Ard Biesheuvel <[email protected]>
> > > Cc: Mark Rutland <[email protected]>
> > > Cc: Heiko Carstens <[email protected]>
> > > Cc: Jason Wang <[email protected]>
> > > Cc: Jonathan Cameron <[email protected]>
> > > Cc: "Michael S. Tsirkin" <[email protected]>
> > > Cc: Michal Hocko <[email protected]>
> > > Cc: Oscar Salvador <[email protected]>
> > > Cc: Pankaj Gupta <[email protected]>
> > > Cc: Pankaj Gupta <[email protected]>
> > > Cc: teawater <[email protected]>
> > > Cc: Vasily Gorbik <[email protected]>
> > > Cc: Wei Yang <[email protected]>
> > > Signed-off-by: Andrew Morton <[email protected]>
> > > Signed-off-by: Linus Torvalds <[email protected]>
> > > Signed-off-by: Sasha Levin <[email protected]>
> > > ---
> > > arch/arm64/mm/mmu.c | 15 +++++++--------
> > > 1 file changed, 7 insertions(+), 8 deletions(-)
> > >
> > > diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
> > > index 6f0648777d34..92b3be127796 100644
> > > --- a/arch/arm64/mm/mmu.c
> > > +++ b/arch/arm64/mm/mmu.c
> > > @@ -1443,16 +1443,19 @@ static void __remove_pgd_mapping(pgd_t *pgdir, unsigned long start, u64 size)
> > > free_empty_tables(start, end, PAGE_OFFSET, PAGE_END);
> > > }
> > >
> > > -static bool inside_linear_region(u64 start, u64 size)
> > > +struct range arch_get_mappable_range(void)
> > > {
> > > + struct range mhp_range;
> > > +
> > > /*
> > > * Linear mapping region is the range [PAGE_OFFSET..(PAGE_END - 1)]
> > > * accommodating both its ends but excluding PAGE_END. Max physical
> > > * range which can be mapped inside this linear mapping range, must
> > > * also be derived from its end points.
> > > */
> > > - return start >= __pa(_PAGE_OFFSET(vabits_actual)) &&
> > > - (start + size - 1) <= __pa(PAGE_END - 1);
> > > + mhp_range.start = __pa(_PAGE_OFFSET(vabits_actual));
> > > + mhp_range.end = __pa(PAGE_END - 1);
> > > + return mhp_range;
> > > }
> > >
> > > int arch_add_memory(int nid, u64 start, u64 size,
> > > @@ -1460,11 +1463,7 @@ int arch_add_memory(int nid, u64 start, u64 size,
> > > {
> > > int ret, flags = 0;
> > >
> > > - if (!inside_linear_region(start, size)) {
> > > - pr_err("[%llx %llx] is outside linear mapping region\n", start, start + size);
> > > - return -EINVAL;
> > > - }
> > > -
> > > + VM_BUG_ON(!mhp_range_allowed(start, size, true));
> > > if (rodata_full || debug_pagealloc_enabled())
> > > flags = NO_BLOCK_MAPPINGS | NO_CONT_MAPPINGS;
> >
> > The stable rc 5.10 and 5.11 builds failed for arm64 architecture
> > due to below warnings / errors,
> >
> > > Anshuman Khandual <[email protected]>
> > > arm64/mm: define arch_get_mappable_range()
> >
> >
> > arch/arm64/mm/mmu.c: In function 'arch_add_memory':
> > arch/arm64/mm/mmu.c:1483:13: error: implicit declaration of function
> > 'mhp_range_allowed'; did you mean 'cpu_map_prog_allowed'?
> > [-Werror=implicit-function-declaration]
> > VM_BUG_ON(!mhp_range_allowed(start, size, true));
> > ^
> > include/linux/build_bug.h:30:63: note: in definition of macro
> > 'BUILD_BUG_ON_INVALID'
> > #define BUILD_BUG_ON_INVALID(e) ((void)(sizeof((__force long)(e))))
> > ^
> > arch/arm64/mm/mmu.c:1483:2: note: in expansion of macro 'VM_BUG_ON'
> > VM_BUG_ON(!mhp_range_allowed(start, size, true));
> > ^~~~~~~~~
> >
> > Build link,
> > https://ci.linaro.org/view/lkft/job/openembedded-lkft-linux-stable-rc-5.11/DISTRO=lkft,MACHINE=juno,label=docker-buster-lkft/41/consoleText
> > https://ci.linaro.org/view/lkft/job/openembedded-lkft-linux-stable-rc-5.10/DISTRO=lkft,MACHINE=dragonboard-410c,label=docker-buster-lkft/120/consoleFull
>
> thanks, will go drop this, and the patch that was after it in the
> series, from both trees and will push out a -rc2.
>
> Note, I used tuxbuild before doing this release, and it does not show
> this error in the arm64 defconfigs. What config did you use to trigger
> this?

We have a build with CONFIG_MEMORY_HOTPLUG=y enabled too.

This is a way to reproduce it locally:
tuxmake --runtime podman --target-arch arm64 --toolchain gcc --kconfig
defconfig --kconfig-add CONFIG_MEMORY_HOTPLUG=y

Cheers,
Anders

2021-03-29 11:38:07

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCH 5.11 225/254] arm64/mm: define arch_get_mappable_range()

On Mon, Mar 29, 2021 at 01:06:47PM +0200, Anders Roxell wrote:
> On Mon, 29 Mar 2021 at 12:13, Greg Kroah-Hartman
> <[email protected]> wrote:
> >
> > On Mon, Mar 29, 2021 at 03:05:25PM +0530, Naresh Kamboju wrote:
> > > On Mon, 29 Mar 2021 at 14:10, Greg Kroah-Hartman
> > > <[email protected]> wrote:
> > > >
> > > > From: Anshuman Khandual <[email protected]>
> > > >
> > > > [ Upstream commit 03aaf83fba6e5af08b5dd174c72edee9b7d9ed9b ]
> > > >
> > > > This overrides arch_get_mappable_range() on arm64 platform which will be
> > > > used with recently added generic framework. It drops
> > > > inside_linear_region() and subsequent check in arch_add_memory() which are
> > > > no longer required. It also adds a VM_BUG_ON() check that would ensure
> > > > that mhp_range_allowed() has already been called.
> > > >
> > > > Link: https://lkml.kernel.org/r/[email protected]
> > > > Signed-off-by: Anshuman Khandual <[email protected]>
> > > > Reviewed-by: David Hildenbrand <[email protected]>
> > > > Reviewed-by: Catalin Marinas <[email protected]>
> > > > Cc: Will Deacon <[email protected]>
> > > > Cc: Ard Biesheuvel <[email protected]>
> > > > Cc: Mark Rutland <[email protected]>
> > > > Cc: Heiko Carstens <[email protected]>
> > > > Cc: Jason Wang <[email protected]>
> > > > Cc: Jonathan Cameron <[email protected]>
> > > > Cc: "Michael S. Tsirkin" <[email protected]>
> > > > Cc: Michal Hocko <[email protected]>
> > > > Cc: Oscar Salvador <[email protected]>
> > > > Cc: Pankaj Gupta <[email protected]>
> > > > Cc: Pankaj Gupta <[email protected]>
> > > > Cc: teawater <[email protected]>
> > > > Cc: Vasily Gorbik <[email protected]>
> > > > Cc: Wei Yang <[email protected]>
> > > > Signed-off-by: Andrew Morton <[email protected]>
> > > > Signed-off-by: Linus Torvalds <[email protected]>
> > > > Signed-off-by: Sasha Levin <[email protected]>
> > > > ---
> > > > arch/arm64/mm/mmu.c | 15 +++++++--------
> > > > 1 file changed, 7 insertions(+), 8 deletions(-)
> > > >
> > > > diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
> > > > index 6f0648777d34..92b3be127796 100644
> > > > --- a/arch/arm64/mm/mmu.c
> > > > +++ b/arch/arm64/mm/mmu.c
> > > > @@ -1443,16 +1443,19 @@ static void __remove_pgd_mapping(pgd_t *pgdir, unsigned long start, u64 size)
> > > > free_empty_tables(start, end, PAGE_OFFSET, PAGE_END);
> > > > }
> > > >
> > > > -static bool inside_linear_region(u64 start, u64 size)
> > > > +struct range arch_get_mappable_range(void)
> > > > {
> > > > + struct range mhp_range;
> > > > +
> > > > /*
> > > > * Linear mapping region is the range [PAGE_OFFSET..(PAGE_END - 1)]
> > > > * accommodating both its ends but excluding PAGE_END. Max physical
> > > > * range which can be mapped inside this linear mapping range, must
> > > > * also be derived from its end points.
> > > > */
> > > > - return start >= __pa(_PAGE_OFFSET(vabits_actual)) &&
> > > > - (start + size - 1) <= __pa(PAGE_END - 1);
> > > > + mhp_range.start = __pa(_PAGE_OFFSET(vabits_actual));
> > > > + mhp_range.end = __pa(PAGE_END - 1);
> > > > + return mhp_range;
> > > > }
> > > >
> > > > int arch_add_memory(int nid, u64 start, u64 size,
> > > > @@ -1460,11 +1463,7 @@ int arch_add_memory(int nid, u64 start, u64 size,
> > > > {
> > > > int ret, flags = 0;
> > > >
> > > > - if (!inside_linear_region(start, size)) {
> > > > - pr_err("[%llx %llx] is outside linear mapping region\n", start, start + size);
> > > > - return -EINVAL;
> > > > - }
> > > > -
> > > > + VM_BUG_ON(!mhp_range_allowed(start, size, true));
> > > > if (rodata_full || debug_pagealloc_enabled())
> > > > flags = NO_BLOCK_MAPPINGS | NO_CONT_MAPPINGS;
> > >
> > > The stable rc 5.10 and 5.11 builds failed for arm64 architecture
> > > due to below warnings / errors,
> > >
> > > > Anshuman Khandual <[email protected]>
> > > > arm64/mm: define arch_get_mappable_range()
> > >
> > >
> > > arch/arm64/mm/mmu.c: In function 'arch_add_memory':
> > > arch/arm64/mm/mmu.c:1483:13: error: implicit declaration of function
> > > 'mhp_range_allowed'; did you mean 'cpu_map_prog_allowed'?
> > > [-Werror=implicit-function-declaration]
> > > VM_BUG_ON(!mhp_range_allowed(start, size, true));
> > > ^
> > > include/linux/build_bug.h:30:63: note: in definition of macro
> > > 'BUILD_BUG_ON_INVALID'
> > > #define BUILD_BUG_ON_INVALID(e) ((void)(sizeof((__force long)(e))))
> > > ^
> > > arch/arm64/mm/mmu.c:1483:2: note: in expansion of macro 'VM_BUG_ON'
> > > VM_BUG_ON(!mhp_range_allowed(start, size, true));
> > > ^~~~~~~~~
> > >
> > > Build link,
> > > https://ci.linaro.org/view/lkft/job/openembedded-lkft-linux-stable-rc-5.11/DISTRO=lkft,MACHINE=juno,label=docker-buster-lkft/41/consoleText
> > > https://ci.linaro.org/view/lkft/job/openembedded-lkft-linux-stable-rc-5.10/DISTRO=lkft,MACHINE=dragonboard-410c,label=docker-buster-lkft/120/consoleFull
> >
> > thanks, will go drop this, and the patch that was after it in the
> > series, from both trees and will push out a -rc2.
> >
> > Note, I used tuxbuild before doing this release, and it does not show
> > this error in the arm64 defconfigs. What config did you use to trigger
> > this?
>
> We have a build with CONFIG_MEMORY_HOTPLUG=y enabled too.
>
> This is a way to reproduce it locally:
> tuxmake --runtime podman --target-arch arm64 --toolchain gcc --kconfig
> defconfig --kconfig-add CONFIG_MEMORY_HOTPLUG=y

Ah, that wasn't expected, but makes sense, thanks.

Does 'allmodconfig' also trigger that? Maybe I'll go add that to my
build tests for arm64...

thanks,

greg k-h

2021-03-29 13:10:28

by Ard Biesheuvel

[permalink] [raw]
Subject: Re: [PATCH 5.11 225/254] arm64/mm: define arch_get_mappable_range()

On Mon, 29 Mar 2021 at 12:12, Greg Kroah-Hartman
<[email protected]> wrote:
>
> On Mon, Mar 29, 2021 at 03:05:25PM +0530, Naresh Kamboju wrote:
> > On Mon, 29 Mar 2021 at 14:10, Greg Kroah-Hartman
> > <[email protected]> wrote:
> > >
> > > From: Anshuman Khandual <[email protected]>
> > >
> > > [ Upstream commit 03aaf83fba6e5af08b5dd174c72edee9b7d9ed9b ]
> > >
> > > This overrides arch_get_mappable_range() on arm64 platform which will be
> > > used with recently added generic framework. It drops
> > > inside_linear_region() and subsequent check in arch_add_memory() which are
> > > no longer required. It also adds a VM_BUG_ON() check that would ensure
> > > that mhp_range_allowed() has already been called.
> > >
> > > Link: https://lkml.kernel.org/r/[email protected]
> > > Signed-off-by: Anshuman Khandual <[email protected]>
> > > Reviewed-by: David Hildenbrand <[email protected]>
> > > Reviewed-by: Catalin Marinas <[email protected]>
> > > Cc: Will Deacon <[email protected]>
> > > Cc: Ard Biesheuvel <[email protected]>
> > > Cc: Mark Rutland <[email protected]>
> > > Cc: Heiko Carstens <[email protected]>
> > > Cc: Jason Wang <[email protected]>
> > > Cc: Jonathan Cameron <[email protected]>
> > > Cc: "Michael S. Tsirkin" <[email protected]>
> > > Cc: Michal Hocko <[email protected]>
> > > Cc: Oscar Salvador <[email protected]>
> > > Cc: Pankaj Gupta <[email protected]>
> > > Cc: Pankaj Gupta <[email protected]>
> > > Cc: teawater <[email protected]>
> > > Cc: Vasily Gorbik <[email protected]>
> > > Cc: Wei Yang <[email protected]>
> > > Signed-off-by: Andrew Morton <[email protected]>
> > > Signed-off-by: Linus Torvalds <[email protected]>
> > > Signed-off-by: Sasha Levin <[email protected]>
> > > ---
> > > arch/arm64/mm/mmu.c | 15 +++++++--------
> > > 1 file changed, 7 insertions(+), 8 deletions(-)
> > >
> > > diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
> > > index 6f0648777d34..92b3be127796 100644
> > > --- a/arch/arm64/mm/mmu.c
> > > +++ b/arch/arm64/mm/mmu.c
> > > @@ -1443,16 +1443,19 @@ static void __remove_pgd_mapping(pgd_t *pgdir, unsigned long start, u64 size)
> > > free_empty_tables(start, end, PAGE_OFFSET, PAGE_END);
> > > }
> > >
> > > -static bool inside_linear_region(u64 start, u64 size)
> > > +struct range arch_get_mappable_range(void)
> > > {
> > > + struct range mhp_range;
> > > +
> > > /*
> > > * Linear mapping region is the range [PAGE_OFFSET..(PAGE_END - 1)]
> > > * accommodating both its ends but excluding PAGE_END. Max physical
> > > * range which can be mapped inside this linear mapping range, must
> > > * also be derived from its end points.
> > > */
> > > - return start >= __pa(_PAGE_OFFSET(vabits_actual)) &&
> > > - (start + size - 1) <= __pa(PAGE_END - 1);
> > > + mhp_range.start = __pa(_PAGE_OFFSET(vabits_actual));
> > > + mhp_range.end = __pa(PAGE_END - 1);
> > > + return mhp_range;
> > > }
> > >
> > > int arch_add_memory(int nid, u64 start, u64 size,
> > > @@ -1460,11 +1463,7 @@ int arch_add_memory(int nid, u64 start, u64 size,
> > > {
> > > int ret, flags = 0;
> > >
> > > - if (!inside_linear_region(start, size)) {
> > > - pr_err("[%llx %llx] is outside linear mapping region\n", start, start + size);
> > > - return -EINVAL;
> > > - }
> > > -
> > > + VM_BUG_ON(!mhp_range_allowed(start, size, true));
> > > if (rodata_full || debug_pagealloc_enabled())
> > > flags = NO_BLOCK_MAPPINGS | NO_CONT_MAPPINGS;
> >
> > The stable rc 5.10 and 5.11 builds failed for arm64 architecture
> > due to below warnings / errors,
> >
> > > Anshuman Khandual <[email protected]>
> > > arm64/mm: define arch_get_mappable_range()
> >
> >
> > arch/arm64/mm/mmu.c: In function 'arch_add_memory':
> > arch/arm64/mm/mmu.c:1483:13: error: implicit declaration of function
> > 'mhp_range_allowed'; did you mean 'cpu_map_prog_allowed'?
> > [-Werror=implicit-function-declaration]
> > VM_BUG_ON(!mhp_range_allowed(start, size, true));
> > ^
> > include/linux/build_bug.h:30:63: note: in definition of macro
> > 'BUILD_BUG_ON_INVALID'
> > #define BUILD_BUG_ON_INVALID(e) ((void)(sizeof((__force long)(e))))
> > ^
> > arch/arm64/mm/mmu.c:1483:2: note: in expansion of macro 'VM_BUG_ON'
> > VM_BUG_ON(!mhp_range_allowed(start, size, true));
> > ^~~~~~~~~
> >
> > Build link,
> > https://ci.linaro.org/view/lkft/job/openembedded-lkft-linux-stable-rc-5.11/DISTRO=lkft,MACHINE=juno,label=docker-buster-lkft/41/consoleText
> > https://ci.linaro.org/view/lkft/job/openembedded-lkft-linux-stable-rc-5.10/DISTRO=lkft,MACHINE=dragonboard-410c,label=docker-buster-lkft/120/consoleFull
>
> thanks, will go drop this, and the patch that was after it in the
> series, from both trees and will push out a -rc2.
>

Why were these picked up in the first place? I don't see any fixes or
cc:stable tags, and the commit log clearly describes that the change
is preparatory work for enabling arm64 support into a recently
introduced generic framework.

--
Ard.

2021-03-29 13:44:14

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCH 5.11 225/254] arm64/mm: define arch_get_mappable_range()

On Mon, Mar 29, 2021 at 03:08:52PM +0200, Ard Biesheuvel wrote:
> On Mon, 29 Mar 2021 at 12:12, Greg Kroah-Hartman
> <[email protected]> wrote:
> >
> > On Mon, Mar 29, 2021 at 03:05:25PM +0530, Naresh Kamboju wrote:
> > > On Mon, 29 Mar 2021 at 14:10, Greg Kroah-Hartman
> > > <[email protected]> wrote:
> > > >
> > > > From: Anshuman Khandual <[email protected]>
> > > >
> > > > [ Upstream commit 03aaf83fba6e5af08b5dd174c72edee9b7d9ed9b ]
> > > >
> > > > This overrides arch_get_mappable_range() on arm64 platform which will be
> > > > used with recently added generic framework. It drops
> > > > inside_linear_region() and subsequent check in arch_add_memory() which are
> > > > no longer required. It also adds a VM_BUG_ON() check that would ensure
> > > > that mhp_range_allowed() has already been called.
> > > >
> > > > Link: https://lkml.kernel.org/r/[email protected]
> > > > Signed-off-by: Anshuman Khandual <[email protected]>
> > > > Reviewed-by: David Hildenbrand <[email protected]>
> > > > Reviewed-by: Catalin Marinas <[email protected]>
> > > > Cc: Will Deacon <[email protected]>
> > > > Cc: Ard Biesheuvel <[email protected]>
> > > > Cc: Mark Rutland <[email protected]>
> > > > Cc: Heiko Carstens <[email protected]>
> > > > Cc: Jason Wang <[email protected]>
> > > > Cc: Jonathan Cameron <[email protected]>
> > > > Cc: "Michael S. Tsirkin" <[email protected]>
> > > > Cc: Michal Hocko <[email protected]>
> > > > Cc: Oscar Salvador <[email protected]>
> > > > Cc: Pankaj Gupta <[email protected]>
> > > > Cc: Pankaj Gupta <[email protected]>
> > > > Cc: teawater <[email protected]>
> > > > Cc: Vasily Gorbik <[email protected]>
> > > > Cc: Wei Yang <[email protected]>
> > > > Signed-off-by: Andrew Morton <[email protected]>
> > > > Signed-off-by: Linus Torvalds <[email protected]>
> > > > Signed-off-by: Sasha Levin <[email protected]>
> > > > ---
> > > > arch/arm64/mm/mmu.c | 15 +++++++--------
> > > > 1 file changed, 7 insertions(+), 8 deletions(-)
> > > >
> > > > diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
> > > > index 6f0648777d34..92b3be127796 100644
> > > > --- a/arch/arm64/mm/mmu.c
> > > > +++ b/arch/arm64/mm/mmu.c
> > > > @@ -1443,16 +1443,19 @@ static void __remove_pgd_mapping(pgd_t *pgdir, unsigned long start, u64 size)
> > > > free_empty_tables(start, end, PAGE_OFFSET, PAGE_END);
> > > > }
> > > >
> > > > -static bool inside_linear_region(u64 start, u64 size)
> > > > +struct range arch_get_mappable_range(void)
> > > > {
> > > > + struct range mhp_range;
> > > > +
> > > > /*
> > > > * Linear mapping region is the range [PAGE_OFFSET..(PAGE_END - 1)]
> > > > * accommodating both its ends but excluding PAGE_END. Max physical
> > > > * range which can be mapped inside this linear mapping range, must
> > > > * also be derived from its end points.
> > > > */
> > > > - return start >= __pa(_PAGE_OFFSET(vabits_actual)) &&
> > > > - (start + size - 1) <= __pa(PAGE_END - 1);
> > > > + mhp_range.start = __pa(_PAGE_OFFSET(vabits_actual));
> > > > + mhp_range.end = __pa(PAGE_END - 1);
> > > > + return mhp_range;
> > > > }
> > > >
> > > > int arch_add_memory(int nid, u64 start, u64 size,
> > > > @@ -1460,11 +1463,7 @@ int arch_add_memory(int nid, u64 start, u64 size,
> > > > {
> > > > int ret, flags = 0;
> > > >
> > > > - if (!inside_linear_region(start, size)) {
> > > > - pr_err("[%llx %llx] is outside linear mapping region\n", start, start + size);
> > > > - return -EINVAL;
> > > > - }
> > > > -
> > > > + VM_BUG_ON(!mhp_range_allowed(start, size, true));
> > > > if (rodata_full || debug_pagealloc_enabled())
> > > > flags = NO_BLOCK_MAPPINGS | NO_CONT_MAPPINGS;
> > >
> > > The stable rc 5.10 and 5.11 builds failed for arm64 architecture
> > > due to below warnings / errors,
> > >
> > > > Anshuman Khandual <[email protected]>
> > > > arm64/mm: define arch_get_mappable_range()
> > >
> > >
> > > arch/arm64/mm/mmu.c: In function 'arch_add_memory':
> > > arch/arm64/mm/mmu.c:1483:13: error: implicit declaration of function
> > > 'mhp_range_allowed'; did you mean 'cpu_map_prog_allowed'?
> > > [-Werror=implicit-function-declaration]
> > > VM_BUG_ON(!mhp_range_allowed(start, size, true));
> > > ^
> > > include/linux/build_bug.h:30:63: note: in definition of macro
> > > 'BUILD_BUG_ON_INVALID'
> > > #define BUILD_BUG_ON_INVALID(e) ((void)(sizeof((__force long)(e))))
> > > ^
> > > arch/arm64/mm/mmu.c:1483:2: note: in expansion of macro 'VM_BUG_ON'
> > > VM_BUG_ON(!mhp_range_allowed(start, size, true));
> > > ^~~~~~~~~
> > >
> > > Build link,
> > > https://ci.linaro.org/view/lkft/job/openembedded-lkft-linux-stable-rc-5.11/DISTRO=lkft,MACHINE=juno,label=docker-buster-lkft/41/consoleText
> > > https://ci.linaro.org/view/lkft/job/openembedded-lkft-linux-stable-rc-5.10/DISTRO=lkft,MACHINE=dragonboard-410c,label=docker-buster-lkft/120/consoleFull
> >
> > thanks, will go drop this, and the patch that was after it in the
> > series, from both trees and will push out a -rc2.
> >
>
> Why were these picked up in the first place? I don't see any fixes or
> cc:stable tags, and the commit log clearly describes that the change
> is preparatory work for enabling arm64 support into a recently
> introduced generic framework.

This was needed for a follow-on patch in the series that fixed an issue.
Specifically it was commit ee7febce0519 ("arm64: mm: correct the inside
linear map range during hotplug check")

thanks,

greg k-h

2021-03-29 13:51:06

by Ard Biesheuvel

[permalink] [raw]
Subject: Re: [PATCH 5.11 225/254] arm64/mm: define arch_get_mappable_range()

(+ Pavel)

On Mon, 29 Mar 2021 at 15:42, Greg Kroah-Hartman
<[email protected]> wrote:
>
> On Mon, Mar 29, 2021 at 03:08:52PM +0200, Ard Biesheuvel wrote:
> > On Mon, 29 Mar 2021 at 12:12, Greg Kroah-Hartman
> > <[email protected]> wrote:
> > >
> > > On Mon, Mar 29, 2021 at 03:05:25PM +0530, Naresh Kamboju wrote:
> > > > On Mon, 29 Mar 2021 at 14:10, Greg Kroah-Hartman
> > > > <[email protected]> wrote:
> > > > >
> > > > > From: Anshuman Khandual <[email protected]>
> > > > >
> > > > > [ Upstream commit 03aaf83fba6e5af08b5dd174c72edee9b7d9ed9b ]
> > > > >
> > > > > This overrides arch_get_mappable_range() on arm64 platform which will be
> > > > > used with recently added generic framework. It drops
> > > > > inside_linear_region() and subsequent check in arch_add_memory() which are
> > > > > no longer required. It also adds a VM_BUG_ON() check that would ensure
> > > > > that mhp_range_allowed() has already been called.
> > > > >
> > > > > Link: https://lkml.kernel.org/r/[email protected]
> > > > > Signed-off-by: Anshuman Khandual <[email protected]>
> > > > > Reviewed-by: David Hildenbrand <[email protected]>
> > > > > Reviewed-by: Catalin Marinas <[email protected]>
> > > > > Cc: Will Deacon <[email protected]>
> > > > > Cc: Ard Biesheuvel <[email protected]>
> > > > > Cc: Mark Rutland <[email protected]>
> > > > > Cc: Heiko Carstens <[email protected]>
> > > > > Cc: Jason Wang <[email protected]>
> > > > > Cc: Jonathan Cameron <[email protected]>
> > > > > Cc: "Michael S. Tsirkin" <[email protected]>
> > > > > Cc: Michal Hocko <[email protected]>
> > > > > Cc: Oscar Salvador <[email protected]>
> > > > > Cc: Pankaj Gupta <[email protected]>
> > > > > Cc: Pankaj Gupta <[email protected]>
> > > > > Cc: teawater <[email protected]>
> > > > > Cc: Vasily Gorbik <[email protected]>
> > > > > Cc: Wei Yang <[email protected]>
> > > > > Signed-off-by: Andrew Morton <[email protected]>
> > > > > Signed-off-by: Linus Torvalds <[email protected]>
> > > > > Signed-off-by: Sasha Levin <[email protected]>
> > > > > ---
> > > > > arch/arm64/mm/mmu.c | 15 +++++++--------
> > > > > 1 file changed, 7 insertions(+), 8 deletions(-)
> > > > >
> > > > > diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
> > > > > index 6f0648777d34..92b3be127796 100644
> > > > > --- a/arch/arm64/mm/mmu.c
> > > > > +++ b/arch/arm64/mm/mmu.c
> > > > > @@ -1443,16 +1443,19 @@ static void __remove_pgd_mapping(pgd_t *pgdir, unsigned long start, u64 size)
> > > > > free_empty_tables(start, end, PAGE_OFFSET, PAGE_END);
> > > > > }
> > > > >
> > > > > -static bool inside_linear_region(u64 start, u64 size)
> > > > > +struct range arch_get_mappable_range(void)
> > > > > {
> > > > > + struct range mhp_range;
> > > > > +
> > > > > /*
> > > > > * Linear mapping region is the range [PAGE_OFFSET..(PAGE_END - 1)]
> > > > > * accommodating both its ends but excluding PAGE_END. Max physical
> > > > > * range which can be mapped inside this linear mapping range, must
> > > > > * also be derived from its end points.
> > > > > */
> > > > > - return start >= __pa(_PAGE_OFFSET(vabits_actual)) &&
> > > > > - (start + size - 1) <= __pa(PAGE_END - 1);
> > > > > + mhp_range.start = __pa(_PAGE_OFFSET(vabits_actual));
> > > > > + mhp_range.end = __pa(PAGE_END - 1);
> > > > > + return mhp_range;
> > > > > }
> > > > >
> > > > > int arch_add_memory(int nid, u64 start, u64 size,
> > > > > @@ -1460,11 +1463,7 @@ int arch_add_memory(int nid, u64 start, u64 size,
> > > > > {
> > > > > int ret, flags = 0;
> > > > >
> > > > > - if (!inside_linear_region(start, size)) {
> > > > > - pr_err("[%llx %llx] is outside linear mapping region\n", start, start + size);
> > > > > - return -EINVAL;
> > > > > - }
> > > > > -
> > > > > + VM_BUG_ON(!mhp_range_allowed(start, size, true));
> > > > > if (rodata_full || debug_pagealloc_enabled())
> > > > > flags = NO_BLOCK_MAPPINGS | NO_CONT_MAPPINGS;
> > > >
> > > > The stable rc 5.10 and 5.11 builds failed for arm64 architecture
> > > > due to below warnings / errors,
> > > >
> > > > > Anshuman Khandual <[email protected]>
> > > > > arm64/mm: define arch_get_mappable_range()
> > > >
> > > >
> > > > arch/arm64/mm/mmu.c: In function 'arch_add_memory':
> > > > arch/arm64/mm/mmu.c:1483:13: error: implicit declaration of function
> > > > 'mhp_range_allowed'; did you mean 'cpu_map_prog_allowed'?
> > > > [-Werror=implicit-function-declaration]
> > > > VM_BUG_ON(!mhp_range_allowed(start, size, true));
> > > > ^
> > > > include/linux/build_bug.h:30:63: note: in definition of macro
> > > > 'BUILD_BUG_ON_INVALID'
> > > > #define BUILD_BUG_ON_INVALID(e) ((void)(sizeof((__force long)(e))))
> > > > ^
> > > > arch/arm64/mm/mmu.c:1483:2: note: in expansion of macro 'VM_BUG_ON'
> > > > VM_BUG_ON(!mhp_range_allowed(start, size, true));
> > > > ^~~~~~~~~
> > > >
> > > > Build link,
> > > > https://ci.linaro.org/view/lkft/job/openembedded-lkft-linux-stable-rc-5.11/DISTRO=lkft,MACHINE=juno,label=docker-buster-lkft/41/consoleText
> > > > https://ci.linaro.org/view/lkft/job/openembedded-lkft-linux-stable-rc-5.10/DISTRO=lkft,MACHINE=dragonboard-410c,label=docker-buster-lkft/120/consoleFull
> > >
> > > thanks, will go drop this, and the patch that was after it in the
> > > series, from both trees and will push out a -rc2.
> > >
> >
> > Why were these picked up in the first place? I don't see any fixes or
> > cc:stable tags, and the commit log clearly describes that the change
> > is preparatory work for enabling arm64 support into a recently
> > introduced generic framework.
>
> This was needed for a follow-on patch in the series that fixed an issue.
> Specifically it was commit ee7febce0519 ("arm64: mm: correct the inside
> linear map range during hotplug check")
>

Yeah, but during the discussion of that patch [0], we pointed out that
it needed to be rebased because of these new changes. So trying to
backport this rebased version is obviously not the right approach:
Pavel's original patch would be much more suitable for that.

Could we have annotated this patch in a better way to make this more obvious?


[0] https://lore.kernel.org/linux-arm-kernel/[email protected]/

2021-03-29 13:53:23

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCH 5.11 225/254] arm64/mm: define arch_get_mappable_range()

On Mon, Mar 29, 2021 at 03:49:19PM +0200, Ard Biesheuvel wrote:
> (+ Pavel)
>
> On Mon, 29 Mar 2021 at 15:42, Greg Kroah-Hartman
> <[email protected]> wrote:
> >
> > On Mon, Mar 29, 2021 at 03:08:52PM +0200, Ard Biesheuvel wrote:
> > > On Mon, 29 Mar 2021 at 12:12, Greg Kroah-Hartman
> > > <[email protected]> wrote:
> > > >
> > > > On Mon, Mar 29, 2021 at 03:05:25PM +0530, Naresh Kamboju wrote:
> > > > > On Mon, 29 Mar 2021 at 14:10, Greg Kroah-Hartman
> > > > > <[email protected]> wrote:
> > > > > >
> > > > > > From: Anshuman Khandual <[email protected]>
> > > > > >
> > > > > > [ Upstream commit 03aaf83fba6e5af08b5dd174c72edee9b7d9ed9b ]
> > > > > >
> > > > > > This overrides arch_get_mappable_range() on arm64 platform which will be
> > > > > > used with recently added generic framework. It drops
> > > > > > inside_linear_region() and subsequent check in arch_add_memory() which are
> > > > > > no longer required. It also adds a VM_BUG_ON() check that would ensure
> > > > > > that mhp_range_allowed() has already been called.
> > > > > >
> > > > > > Link: https://lkml.kernel.org/r/[email protected]
> > > > > > Signed-off-by: Anshuman Khandual <[email protected]>
> > > > > > Reviewed-by: David Hildenbrand <[email protected]>
> > > > > > Reviewed-by: Catalin Marinas <[email protected]>
> > > > > > Cc: Will Deacon <[email protected]>
> > > > > > Cc: Ard Biesheuvel <[email protected]>
> > > > > > Cc: Mark Rutland <[email protected]>
> > > > > > Cc: Heiko Carstens <[email protected]>
> > > > > > Cc: Jason Wang <[email protected]>
> > > > > > Cc: Jonathan Cameron <[email protected]>
> > > > > > Cc: "Michael S. Tsirkin" <[email protected]>
> > > > > > Cc: Michal Hocko <[email protected]>
> > > > > > Cc: Oscar Salvador <[email protected]>
> > > > > > Cc: Pankaj Gupta <[email protected]>
> > > > > > Cc: Pankaj Gupta <[email protected]>
> > > > > > Cc: teawater <[email protected]>
> > > > > > Cc: Vasily Gorbik <[email protected]>
> > > > > > Cc: Wei Yang <[email protected]>
> > > > > > Signed-off-by: Andrew Morton <[email protected]>
> > > > > > Signed-off-by: Linus Torvalds <[email protected]>
> > > > > > Signed-off-by: Sasha Levin <[email protected]>
> > > > > > ---
> > > > > > arch/arm64/mm/mmu.c | 15 +++++++--------
> > > > > > 1 file changed, 7 insertions(+), 8 deletions(-)
> > > > > >
> > > > > > diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
> > > > > > index 6f0648777d34..92b3be127796 100644
> > > > > > --- a/arch/arm64/mm/mmu.c
> > > > > > +++ b/arch/arm64/mm/mmu.c
> > > > > > @@ -1443,16 +1443,19 @@ static void __remove_pgd_mapping(pgd_t *pgdir, unsigned long start, u64 size)
> > > > > > free_empty_tables(start, end, PAGE_OFFSET, PAGE_END);
> > > > > > }
> > > > > >
> > > > > > -static bool inside_linear_region(u64 start, u64 size)
> > > > > > +struct range arch_get_mappable_range(void)
> > > > > > {
> > > > > > + struct range mhp_range;
> > > > > > +
> > > > > > /*
> > > > > > * Linear mapping region is the range [PAGE_OFFSET..(PAGE_END - 1)]
> > > > > > * accommodating both its ends but excluding PAGE_END. Max physical
> > > > > > * range which can be mapped inside this linear mapping range, must
> > > > > > * also be derived from its end points.
> > > > > > */
> > > > > > - return start >= __pa(_PAGE_OFFSET(vabits_actual)) &&
> > > > > > - (start + size - 1) <= __pa(PAGE_END - 1);
> > > > > > + mhp_range.start = __pa(_PAGE_OFFSET(vabits_actual));
> > > > > > + mhp_range.end = __pa(PAGE_END - 1);
> > > > > > + return mhp_range;
> > > > > > }
> > > > > >
> > > > > > int arch_add_memory(int nid, u64 start, u64 size,
> > > > > > @@ -1460,11 +1463,7 @@ int arch_add_memory(int nid, u64 start, u64 size,
> > > > > > {
> > > > > > int ret, flags = 0;
> > > > > >
> > > > > > - if (!inside_linear_region(start, size)) {
> > > > > > - pr_err("[%llx %llx] is outside linear mapping region\n", start, start + size);
> > > > > > - return -EINVAL;
> > > > > > - }
> > > > > > -
> > > > > > + VM_BUG_ON(!mhp_range_allowed(start, size, true));
> > > > > > if (rodata_full || debug_pagealloc_enabled())
> > > > > > flags = NO_BLOCK_MAPPINGS | NO_CONT_MAPPINGS;
> > > > >
> > > > > The stable rc 5.10 and 5.11 builds failed for arm64 architecture
> > > > > due to below warnings / errors,
> > > > >
> > > > > > Anshuman Khandual <[email protected]>
> > > > > > arm64/mm: define arch_get_mappable_range()
> > > > >
> > > > >
> > > > > arch/arm64/mm/mmu.c: In function 'arch_add_memory':
> > > > > arch/arm64/mm/mmu.c:1483:13: error: implicit declaration of function
> > > > > 'mhp_range_allowed'; did you mean 'cpu_map_prog_allowed'?
> > > > > [-Werror=implicit-function-declaration]
> > > > > VM_BUG_ON(!mhp_range_allowed(start, size, true));
> > > > > ^
> > > > > include/linux/build_bug.h:30:63: note: in definition of macro
> > > > > 'BUILD_BUG_ON_INVALID'
> > > > > #define BUILD_BUG_ON_INVALID(e) ((void)(sizeof((__force long)(e))))
> > > > > ^
> > > > > arch/arm64/mm/mmu.c:1483:2: note: in expansion of macro 'VM_BUG_ON'
> > > > > VM_BUG_ON(!mhp_range_allowed(start, size, true));
> > > > > ^~~~~~~~~
> > > > >
> > > > > Build link,
> > > > > https://ci.linaro.org/view/lkft/job/openembedded-lkft-linux-stable-rc-5.11/DISTRO=lkft,MACHINE=juno,label=docker-buster-lkft/41/consoleText
> > > > > https://ci.linaro.org/view/lkft/job/openembedded-lkft-linux-stable-rc-5.10/DISTRO=lkft,MACHINE=dragonboard-410c,label=docker-buster-lkft/120/consoleFull
> > > >
> > > > thanks, will go drop this, and the patch that was after it in the
> > > > series, from both trees and will push out a -rc2.
> > > >
> > >
> > > Why were these picked up in the first place? I don't see any fixes or
> > > cc:stable tags, and the commit log clearly describes that the change
> > > is preparatory work for enabling arm64 support into a recently
> > > introduced generic framework.
> >
> > This was needed for a follow-on patch in the series that fixed an issue.
> > Specifically it was commit ee7febce0519 ("arm64: mm: correct the inside
> > linear map range during hotplug check")
> >
>
> Yeah, but during the discussion of that patch [0], we pointed out that
> it needed to be rebased because of these new changes. So trying to
> backport this rebased version is obviously not the right approach:
> Pavel's original patch would be much more suitable for that.
>
> Could we have annotated this patch in a better way to make this more obvious?

Yes, given that there was no annotation on the patch at all to let us
know this :)

You can say things like "do not apply to stable trees" or "needs total
rework for older kernels" or other fun such things that when we read
them, we know to ask for help. As it is, the patch provided nothing so
we guessed and got it wrong...

thanks,

greg k-h

2021-03-29 13:55:46

by Pasha Tatashin

[permalink] [raw]
Subject: Re: [PATCH 5.11 225/254] arm64/mm: define arch_get_mappable_range()

On Mon, Mar 29, 2021 at 9:51 AM Greg Kroah-Hartman
<[email protected]> wrote:
>
> On Mon, Mar 29, 2021 at 03:49:19PM +0200, Ard Biesheuvel wrote:
> > (+ Pavel)
> >
> > On Mon, 29 Mar 2021 at 15:42, Greg Kroah-Hartman
> > <[email protected]> wrote:
> > >
> > > On Mon, Mar 29, 2021 at 03:08:52PM +0200, Ard Biesheuvel wrote:
> > > > On Mon, 29 Mar 2021 at 12:12, Greg Kroah-Hartman
> > > > <[email protected]> wrote:
> > > > >
> > > > > On Mon, Mar 29, 2021 at 03:05:25PM +0530, Naresh Kamboju wrote:
> > > > > > On Mon, 29 Mar 2021 at 14:10, Greg Kroah-Hartman
> > > > > > <[email protected]> wrote:
> > > > > > >
> > > > > > > From: Anshuman Khandual <[email protected]>
> > > > > > >
> > > > > > > [ Upstream commit 03aaf83fba6e5af08b5dd174c72edee9b7d9ed9b ]
> > > > > > >
> > > > > > > This overrides arch_get_mappable_range() on arm64 platform which will be
> > > > > > > used with recently added generic framework. It drops
> > > > > > > inside_linear_region() and subsequent check in arch_add_memory() which are
> > > > > > > no longer required. It also adds a VM_BUG_ON() check that would ensure
> > > > > > > that mhp_range_allowed() has already been called.
> > > > > > >
> > > > > > > Link: https://lkml.kernel.org/r/[email protected]
> > > > > > > Signed-off-by: Anshuman Khandual <[email protected]>
> > > > > > > Reviewed-by: David Hildenbrand <[email protected]>
> > > > > > > Reviewed-by: Catalin Marinas <[email protected]>
> > > > > > > Cc: Will Deacon <[email protected]>
> > > > > > > Cc: Ard Biesheuvel <[email protected]>
> > > > > > > Cc: Mark Rutland <[email protected]>
> > > > > > > Cc: Heiko Carstens <[email protected]>
> > > > > > > Cc: Jason Wang <[email protected]>
> > > > > > > Cc: Jonathan Cameron <[email protected]>
> > > > > > > Cc: "Michael S. Tsirkin" <[email protected]>
> > > > > > > Cc: Michal Hocko <[email protected]>
> > > > > > > Cc: Oscar Salvador <[email protected]>
> > > > > > > Cc: Pankaj Gupta <[email protected]>
> > > > > > > Cc: Pankaj Gupta <[email protected]>
> > > > > > > Cc: teawater <[email protected]>
> > > > > > > Cc: Vasily Gorbik <[email protected]>
> > > > > > > Cc: Wei Yang <[email protected]>
> > > > > > > Signed-off-by: Andrew Morton <[email protected]>
> > > > > > > Signed-off-by: Linus Torvalds <[email protected]>
> > > > > > > Signed-off-by: Sasha Levin <[email protected]>
> > > > > > > ---
> > > > > > > arch/arm64/mm/mmu.c | 15 +++++++--------
> > > > > > > 1 file changed, 7 insertions(+), 8 deletions(-)
> > > > > > >
> > > > > > > diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
> > > > > > > index 6f0648777d34..92b3be127796 100644
> > > > > > > --- a/arch/arm64/mm/mmu.c
> > > > > > > +++ b/arch/arm64/mm/mmu.c
> > > > > > > @@ -1443,16 +1443,19 @@ static void __remove_pgd_mapping(pgd_t *pgdir, unsigned long start, u64 size)
> > > > > > > free_empty_tables(start, end, PAGE_OFFSET, PAGE_END);
> > > > > > > }
> > > > > > >
> > > > > > > -static bool inside_linear_region(u64 start, u64 size)
> > > > > > > +struct range arch_get_mappable_range(void)
> > > > > > > {
> > > > > > > + struct range mhp_range;
> > > > > > > +
> > > > > > > /*
> > > > > > > * Linear mapping region is the range [PAGE_OFFSET..(PAGE_END - 1)]
> > > > > > > * accommodating both its ends but excluding PAGE_END. Max physical
> > > > > > > * range which can be mapped inside this linear mapping range, must
> > > > > > > * also be derived from its end points.
> > > > > > > */
> > > > > > > - return start >= __pa(_PAGE_OFFSET(vabits_actual)) &&
> > > > > > > - (start + size - 1) <= __pa(PAGE_END - 1);
> > > > > > > + mhp_range.start = __pa(_PAGE_OFFSET(vabits_actual));
> > > > > > > + mhp_range.end = __pa(PAGE_END - 1);
> > > > > > > + return mhp_range;
> > > > > > > }
> > > > > > >
> > > > > > > int arch_add_memory(int nid, u64 start, u64 size,
> > > > > > > @@ -1460,11 +1463,7 @@ int arch_add_memory(int nid, u64 start, u64 size,
> > > > > > > {
> > > > > > > int ret, flags = 0;
> > > > > > >
> > > > > > > - if (!inside_linear_region(start, size)) {
> > > > > > > - pr_err("[%llx %llx] is outside linear mapping region\n", start, start + size);
> > > > > > > - return -EINVAL;
> > > > > > > - }
> > > > > > > -
> > > > > > > + VM_BUG_ON(!mhp_range_allowed(start, size, true));
> > > > > > > if (rodata_full || debug_pagealloc_enabled())
> > > > > > > flags = NO_BLOCK_MAPPINGS | NO_CONT_MAPPINGS;
> > > > > >
> > > > > > The stable rc 5.10 and 5.11 builds failed for arm64 architecture
> > > > > > due to below warnings / errors,
> > > > > >
> > > > > > > Anshuman Khandual <[email protected]>
> > > > > > > arm64/mm: define arch_get_mappable_range()
> > > > > >
> > > > > >
> > > > > > arch/arm64/mm/mmu.c: In function 'arch_add_memory':
> > > > > > arch/arm64/mm/mmu.c:1483:13: error: implicit declaration of function
> > > > > > 'mhp_range_allowed'; did you mean 'cpu_map_prog_allowed'?
> > > > > > [-Werror=implicit-function-declaration]
> > > > > > VM_BUG_ON(!mhp_range_allowed(start, size, true));
> > > > > > ^
> > > > > > include/linux/build_bug.h:30:63: note: in definition of macro
> > > > > > 'BUILD_BUG_ON_INVALID'
> > > > > > #define BUILD_BUG_ON_INVALID(e) ((void)(sizeof((__force long)(e))))
> > > > > > ^
> > > > > > arch/arm64/mm/mmu.c:1483:2: note: in expansion of macro 'VM_BUG_ON'
> > > > > > VM_BUG_ON(!mhp_range_allowed(start, size, true));
> > > > > > ^~~~~~~~~
> > > > > >
> > > > > > Build link,
> > > > > > https://ci.linaro.org/view/lkft/job/openembedded-lkft-linux-stable-rc-5.11/DISTRO=lkft,MACHINE=juno,label=docker-buster-lkft/41/consoleText
> > > > > > https://ci.linaro.org/view/lkft/job/openembedded-lkft-linux-stable-rc-5.10/DISTRO=lkft,MACHINE=dragonboard-410c,label=docker-buster-lkft/120/consoleFull
> > > > >
> > > > > thanks, will go drop this, and the patch that was after it in the
> > > > > series, from both trees and will push out a -rc2.
> > > > >
> > > >
> > > > Why were these picked up in the first place? I don't see any fixes or
> > > > cc:stable tags, and the commit log clearly describes that the change
> > > > is preparatory work for enabling arm64 support into a recently
> > > > introduced generic framework.
> > >
> > > This was needed for a follow-on patch in the series that fixed an issue.
> > > Specifically it was commit ee7febce0519 ("arm64: mm: correct the inside
> > > linear map range during hotplug check")
> > >
> >
> > Yeah, but during the discussion of that patch [0], we pointed out that
> > it needed to be rebased because of these new changes. So trying to
> > backport this rebased version is obviously not the right approach:
> > Pavel's original patch would be much more suitable for that.
> >
> > Could we have annotated this patch in a better way to make this more obvious?
>
> Yes, given that there was no annotation on the patch at all to let us
> know this :)
>
> You can say things like "do not apply to stable trees" or "needs total
> rework for older kernels" or other fun such things that when we read
> them, we know to ask for help. As it is, the patch provided nothing so
> we guessed and got it wrong...

I will send the patch for stable trees with the commit id included as requested.

Pasha

>
> thanks,
>
> greg k-h

2021-03-29 14:02:33

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCH 5.11 225/254] arm64/mm: define arch_get_mappable_range()

On Mon, Mar 29, 2021 at 09:53:10AM -0400, Pavel Tatashin wrote:
> On Mon, Mar 29, 2021 at 9:51 AM Greg Kroah-Hartman
> <[email protected]> wrote:
> >
> > On Mon, Mar 29, 2021 at 03:49:19PM +0200, Ard Biesheuvel wrote:
> > > (+ Pavel)
> > >
> > > On Mon, 29 Mar 2021 at 15:42, Greg Kroah-Hartman
> > > <[email protected]> wrote:
> > > >
> > > > On Mon, Mar 29, 2021 at 03:08:52PM +0200, Ard Biesheuvel wrote:
> > > > > On Mon, 29 Mar 2021 at 12:12, Greg Kroah-Hartman
> > > > > <[email protected]> wrote:
> > > > > >
> > > > > > On Mon, Mar 29, 2021 at 03:05:25PM +0530, Naresh Kamboju wrote:
> > > > > > > On Mon, 29 Mar 2021 at 14:10, Greg Kroah-Hartman
> > > > > > > <[email protected]> wrote:
> > > > > > > >
> > > > > > > > From: Anshuman Khandual <[email protected]>
> > > > > > > >
> > > > > > > > [ Upstream commit 03aaf83fba6e5af08b5dd174c72edee9b7d9ed9b ]
> > > > > > > >
> > > > > > > > This overrides arch_get_mappable_range() on arm64 platform which will be
> > > > > > > > used with recently added generic framework. It drops
> > > > > > > > inside_linear_region() and subsequent check in arch_add_memory() which are
> > > > > > > > no longer required. It also adds a VM_BUG_ON() check that would ensure
> > > > > > > > that mhp_range_allowed() has already been called.
> > > > > > > >
> > > > > > > > Link: https://lkml.kernel.org/r/[email protected]
> > > > > > > > Signed-off-by: Anshuman Khandual <[email protected]>
> > > > > > > > Reviewed-by: David Hildenbrand <[email protected]>
> > > > > > > > Reviewed-by: Catalin Marinas <[email protected]>
> > > > > > > > Cc: Will Deacon <[email protected]>
> > > > > > > > Cc: Ard Biesheuvel <[email protected]>
> > > > > > > > Cc: Mark Rutland <[email protected]>
> > > > > > > > Cc: Heiko Carstens <[email protected]>
> > > > > > > > Cc: Jason Wang <[email protected]>
> > > > > > > > Cc: Jonathan Cameron <[email protected]>
> > > > > > > > Cc: "Michael S. Tsirkin" <[email protected]>
> > > > > > > > Cc: Michal Hocko <[email protected]>
> > > > > > > > Cc: Oscar Salvador <[email protected]>
> > > > > > > > Cc: Pankaj Gupta <[email protected]>
> > > > > > > > Cc: Pankaj Gupta <[email protected]>
> > > > > > > > Cc: teawater <[email protected]>
> > > > > > > > Cc: Vasily Gorbik <[email protected]>
> > > > > > > > Cc: Wei Yang <[email protected]>
> > > > > > > > Signed-off-by: Andrew Morton <[email protected]>
> > > > > > > > Signed-off-by: Linus Torvalds <[email protected]>
> > > > > > > > Signed-off-by: Sasha Levin <[email protected]>
> > > > > > > > ---
> > > > > > > > arch/arm64/mm/mmu.c | 15 +++++++--------
> > > > > > > > 1 file changed, 7 insertions(+), 8 deletions(-)
> > > > > > > >
> > > > > > > > diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
> > > > > > > > index 6f0648777d34..92b3be127796 100644
> > > > > > > > --- a/arch/arm64/mm/mmu.c
> > > > > > > > +++ b/arch/arm64/mm/mmu.c
> > > > > > > > @@ -1443,16 +1443,19 @@ static void __remove_pgd_mapping(pgd_t *pgdir, unsigned long start, u64 size)
> > > > > > > > free_empty_tables(start, end, PAGE_OFFSET, PAGE_END);
> > > > > > > > }
> > > > > > > >
> > > > > > > > -static bool inside_linear_region(u64 start, u64 size)
> > > > > > > > +struct range arch_get_mappable_range(void)
> > > > > > > > {
> > > > > > > > + struct range mhp_range;
> > > > > > > > +
> > > > > > > > /*
> > > > > > > > * Linear mapping region is the range [PAGE_OFFSET..(PAGE_END - 1)]
> > > > > > > > * accommodating both its ends but excluding PAGE_END. Max physical
> > > > > > > > * range which can be mapped inside this linear mapping range, must
> > > > > > > > * also be derived from its end points.
> > > > > > > > */
> > > > > > > > - return start >= __pa(_PAGE_OFFSET(vabits_actual)) &&
> > > > > > > > - (start + size - 1) <= __pa(PAGE_END - 1);
> > > > > > > > + mhp_range.start = __pa(_PAGE_OFFSET(vabits_actual));
> > > > > > > > + mhp_range.end = __pa(PAGE_END - 1);
> > > > > > > > + return mhp_range;
> > > > > > > > }
> > > > > > > >
> > > > > > > > int arch_add_memory(int nid, u64 start, u64 size,
> > > > > > > > @@ -1460,11 +1463,7 @@ int arch_add_memory(int nid, u64 start, u64 size,
> > > > > > > > {
> > > > > > > > int ret, flags = 0;
> > > > > > > >
> > > > > > > > - if (!inside_linear_region(start, size)) {
> > > > > > > > - pr_err("[%llx %llx] is outside linear mapping region\n", start, start + size);
> > > > > > > > - return -EINVAL;
> > > > > > > > - }
> > > > > > > > -
> > > > > > > > + VM_BUG_ON(!mhp_range_allowed(start, size, true));
> > > > > > > > if (rodata_full || debug_pagealloc_enabled())
> > > > > > > > flags = NO_BLOCK_MAPPINGS | NO_CONT_MAPPINGS;
> > > > > > >
> > > > > > > The stable rc 5.10 and 5.11 builds failed for arm64 architecture
> > > > > > > due to below warnings / errors,
> > > > > > >
> > > > > > > > Anshuman Khandual <[email protected]>
> > > > > > > > arm64/mm: define arch_get_mappable_range()
> > > > > > >
> > > > > > >
> > > > > > > arch/arm64/mm/mmu.c: In function 'arch_add_memory':
> > > > > > > arch/arm64/mm/mmu.c:1483:13: error: implicit declaration of function
> > > > > > > 'mhp_range_allowed'; did you mean 'cpu_map_prog_allowed'?
> > > > > > > [-Werror=implicit-function-declaration]
> > > > > > > VM_BUG_ON(!mhp_range_allowed(start, size, true));
> > > > > > > ^
> > > > > > > include/linux/build_bug.h:30:63: note: in definition of macro
> > > > > > > 'BUILD_BUG_ON_INVALID'
> > > > > > > #define BUILD_BUG_ON_INVALID(e) ((void)(sizeof((__force long)(e))))
> > > > > > > ^
> > > > > > > arch/arm64/mm/mmu.c:1483:2: note: in expansion of macro 'VM_BUG_ON'
> > > > > > > VM_BUG_ON(!mhp_range_allowed(start, size, true));
> > > > > > > ^~~~~~~~~
> > > > > > >
> > > > > > > Build link,
> > > > > > > https://ci.linaro.org/view/lkft/job/openembedded-lkft-linux-stable-rc-5.11/DISTRO=lkft,MACHINE=juno,label=docker-buster-lkft/41/consoleText
> > > > > > > https://ci.linaro.org/view/lkft/job/openembedded-lkft-linux-stable-rc-5.10/DISTRO=lkft,MACHINE=dragonboard-410c,label=docker-buster-lkft/120/consoleFull
> > > > > >
> > > > > > thanks, will go drop this, and the patch that was after it in the
> > > > > > series, from both trees and will push out a -rc2.
> > > > > >
> > > > >
> > > > > Why were these picked up in the first place? I don't see any fixes or
> > > > > cc:stable tags, and the commit log clearly describes that the change
> > > > > is preparatory work for enabling arm64 support into a recently
> > > > > introduced generic framework.
> > > >
> > > > This was needed for a follow-on patch in the series that fixed an issue.
> > > > Specifically it was commit ee7febce0519 ("arm64: mm: correct the inside
> > > > linear map range during hotplug check")
> > > >
> > >
> > > Yeah, but during the discussion of that patch [0], we pointed out that
> > > it needed to be rebased because of these new changes. So trying to
> > > backport this rebased version is obviously not the right approach:
> > > Pavel's original patch would be much more suitable for that.
> > >
> > > Could we have annotated this patch in a better way to make this more obvious?
> >
> > Yes, given that there was no annotation on the patch at all to let us
> > know this :)
> >
> > You can say things like "do not apply to stable trees" or "needs total
> > rework for older kernels" or other fun such things that when we read
> > them, we know to ask for help. As it is, the patch provided nothing so
> > we guessed and got it wrong...
>
> I will send the patch for stable trees with the commit id included as requested.

Wonderful, thank you so much.

greg k-h

2021-03-29 14:15:10

by Anders Roxell

[permalink] [raw]
Subject: Re: [PATCH 5.11 225/254] arm64/mm: define arch_get_mappable_range()

On Mon, 29 Mar 2021 at 13:35, Greg Kroah-Hartman
<[email protected]> wrote:
>
> On Mon, Mar 29, 2021 at 01:06:47PM +0200, Anders Roxell wrote:
> > On Mon, 29 Mar 2021 at 12:13, Greg Kroah-Hartman
> > <[email protected]> wrote:
> > >
> > > On Mon, Mar 29, 2021 at 03:05:25PM +0530, Naresh Kamboju wrote:
> > > > On Mon, 29 Mar 2021 at 14:10, Greg Kroah-Hartman
> > > > <[email protected]> wrote:
> > > > >
> > > > > From: Anshuman Khandual <[email protected]>
> > > > >
> > > > > [ Upstream commit 03aaf83fba6e5af08b5dd174c72edee9b7d9ed9b ]
> > > > >
> > > > > This overrides arch_get_mappable_range() on arm64 platform which will be
> > > > > used with recently added generic framework. It drops
> > > > > inside_linear_region() and subsequent check in arch_add_memory() which are
> > > > > no longer required. It also adds a VM_BUG_ON() check that would ensure
> > > > > that mhp_range_allowed() has already been called.
> > > > >
> > > > > Link: https://lkml.kernel.org/r/[email protected]
> > > > > Signed-off-by: Anshuman Khandual <[email protected]>
> > > > > Reviewed-by: David Hildenbrand <[email protected]>
> > > > > Reviewed-by: Catalin Marinas <[email protected]>
> > > > > Cc: Will Deacon <[email protected]>
> > > > > Cc: Ard Biesheuvel <[email protected]>
> > > > > Cc: Mark Rutland <[email protected]>
> > > > > Cc: Heiko Carstens <[email protected]>
> > > > > Cc: Jason Wang <[email protected]>
> > > > > Cc: Jonathan Cameron <[email protected]>
> > > > > Cc: "Michael S. Tsirkin" <[email protected]>
> > > > > Cc: Michal Hocko <[email protected]>
> > > > > Cc: Oscar Salvador <[email protected]>
> > > > > Cc: Pankaj Gupta <[email protected]>
> > > > > Cc: Pankaj Gupta <[email protected]>
> > > > > Cc: teawater <[email protected]>
> > > > > Cc: Vasily Gorbik <[email protected]>
> > > > > Cc: Wei Yang <[email protected]>
> > > > > Signed-off-by: Andrew Morton <[email protected]>
> > > > > Signed-off-by: Linus Torvalds <[email protected]>
> > > > > Signed-off-by: Sasha Levin <[email protected]>
> > > > > ---
> > > > > arch/arm64/mm/mmu.c | 15 +++++++--------
> > > > > 1 file changed, 7 insertions(+), 8 deletions(-)
> > > > >
> > > > > diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
> > > > > index 6f0648777d34..92b3be127796 100644
> > > > > --- a/arch/arm64/mm/mmu.c
> > > > > +++ b/arch/arm64/mm/mmu.c
> > > > > @@ -1443,16 +1443,19 @@ static void __remove_pgd_mapping(pgd_t *pgdir, unsigned long start, u64 size)
> > > > > free_empty_tables(start, end, PAGE_OFFSET, PAGE_END);
> > > > > }
> > > > >
> > > > > -static bool inside_linear_region(u64 start, u64 size)
> > > > > +struct range arch_get_mappable_range(void)
> > > > > {
> > > > > + struct range mhp_range;
> > > > > +
> > > > > /*
> > > > > * Linear mapping region is the range [PAGE_OFFSET..(PAGE_END - 1)]
> > > > > * accommodating both its ends but excluding PAGE_END. Max physical
> > > > > * range which can be mapped inside this linear mapping range, must
> > > > > * also be derived from its end points.
> > > > > */
> > > > > - return start >= __pa(_PAGE_OFFSET(vabits_actual)) &&
> > > > > - (start + size - 1) <= __pa(PAGE_END - 1);
> > > > > + mhp_range.start = __pa(_PAGE_OFFSET(vabits_actual));
> > > > > + mhp_range.end = __pa(PAGE_END - 1);
> > > > > + return mhp_range;
> > > > > }
> > > > >
> > > > > int arch_add_memory(int nid, u64 start, u64 size,
> > > > > @@ -1460,11 +1463,7 @@ int arch_add_memory(int nid, u64 start, u64 size,
> > > > > {
> > > > > int ret, flags = 0;
> > > > >
> > > > > - if (!inside_linear_region(start, size)) {
> > > > > - pr_err("[%llx %llx] is outside linear mapping region\n", start, start + size);
> > > > > - return -EINVAL;
> > > > > - }
> > > > > -
> > > > > + VM_BUG_ON(!mhp_range_allowed(start, size, true));
> > > > > if (rodata_full || debug_pagealloc_enabled())
> > > > > flags = NO_BLOCK_MAPPINGS | NO_CONT_MAPPINGS;
> > > >
> > > > The stable rc 5.10 and 5.11 builds failed for arm64 architecture
> > > > due to below warnings / errors,
> > > >
> > > > > Anshuman Khandual <[email protected]>
> > > > > arm64/mm: define arch_get_mappable_range()
> > > >
> > > >
> > > > arch/arm64/mm/mmu.c: In function 'arch_add_memory':
> > > > arch/arm64/mm/mmu.c:1483:13: error: implicit declaration of function
> > > > 'mhp_range_allowed'; did you mean 'cpu_map_prog_allowed'?
> > > > [-Werror=implicit-function-declaration]
> > > > VM_BUG_ON(!mhp_range_allowed(start, size, true));
> > > > ^
> > > > include/linux/build_bug.h:30:63: note: in definition of macro
> > > > 'BUILD_BUG_ON_INVALID'
> > > > #define BUILD_BUG_ON_INVALID(e) ((void)(sizeof((__force long)(e))))
> > > > ^
> > > > arch/arm64/mm/mmu.c:1483:2: note: in expansion of macro 'VM_BUG_ON'
> > > > VM_BUG_ON(!mhp_range_allowed(start, size, true));
> > > > ^~~~~~~~~
> > > >
> > > > Build link,
> > > > https://ci.linaro.org/view/lkft/job/openembedded-lkft-linux-stable-rc-5.11/DISTRO=lkft,MACHINE=juno,label=docker-buster-lkft/41/consoleText
> > > > https://ci.linaro.org/view/lkft/job/openembedded-lkft-linux-stable-rc-5.10/DISTRO=lkft,MACHINE=dragonboard-410c,label=docker-buster-lkft/120/consoleFull
> > >
> > > thanks, will go drop this, and the patch that was after it in the
> > > series, from both trees and will push out a -rc2.
> > >
> > > Note, I used tuxbuild before doing this release, and it does not show
> > > this error in the arm64 defconfigs. What config did you use to trigger
> > > this?
> >
> > We have a build with CONFIG_MEMORY_HOTPLUG=y enabled too.
> >
> > This is a way to reproduce it locally:
> > tuxmake --runtime podman --target-arch arm64 --toolchain gcc --kconfig
> > defconfig --kconfig-add CONFIG_MEMORY_HOTPLUG=y
>
> Ah, that wasn't expected, but makes sense, thanks.
>
> Does 'allmodconfig' also trigger that?

Yes that would trigger it. I tried this:
tuxmake --runtime docker --target-arch arm64 --toolchain gcc --kconfig
allmodconfig --build-dir=$(pwd)/obj/test-allmod-arm64

> Maybe I'll go add that to my
> build tests for arm64...

It will take a few minutes to build an allmodconfig kernel on tuxsuite.

Cheers,
Anders