2020-12-17 07:51:00

by Atish Patra

[permalink] [raw]
Subject: [PATCH] RISC-V: Fix usage of memblock_enforce_memory_limit

memblock_enforce_memory_limit accepts the maximum memory size not the last
address. Fix the function invocation correctly.

Fixes: 1bd14a66ee52 ("RISC-V: Remove any memblock representing unusable memory area")

Signed-off-by: Atish Patra <[email protected]>
---
arch/riscv/mm/init.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c
index 8e577f14f120..e4133c20744c 100644
--- a/arch/riscv/mm/init.c
+++ b/arch/riscv/mm/init.c
@@ -174,7 +174,7 @@ void __init setup_bootmem(void)
* Make sure that any memory beyond mem_start + (-PAGE_OFFSET) is removed
* as it is unusable by kernel.
*/
- memblock_enforce_memory_limit(mem_start - PAGE_OFFSET);
+ memblock_enforce_memory_limit(-PAGE_OFFSET);

/* Reserve from the start of the kernel to the end of the kernel */
memblock_reserve(vmlinux_start, vmlinux_end - vmlinux_start);
--
2.25.1


2020-12-17 08:14:24

by Bin Meng

[permalink] [raw]
Subject: Re: [PATCH] RISC-V: Fix usage of memblock_enforce_memory_limit

Hi Atish,

On Thu, Dec 17, 2020 at 3:49 PM Atish Patra <[email protected]> wrote:
>
> memblock_enforce_memory_limit accepts the maximum memory size not the last
> address. Fix the function invocation correctly.
>
> Fixes: 1bd14a66ee52 ("RISC-V: Remove any memblock representing unusable memory area")
>
> Signed-off-by: Atish Patra <[email protected]>
> ---
> arch/riscv/mm/init.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>

Thank you for working on this.

Tested with QEMU 5.2.0 on 32-bit 'virt' and 'sifive_u', with
fw_jump.bin used as the -bios.
32-bit 'virt' boots, but 32-bit 'sifive_u' still does not boot, which
should be another issue because reverting the original 1bd14a66ee52 it
still does not help 'sifive_u'.

Tested-by: Bin Meng <[email protected]>

I believe the following tag should also be added and patch cc'ed to
stable-kernel:

Reported-by: Bin Meng <[email protected]>
Cc: <[email protected]> # 5.10

Regards,
Bin

2020-12-17 08:30:16

by Mike Rapoport

[permalink] [raw]
Subject: Re: [PATCH] RISC-V: Fix usage of memblock_enforce_memory_limit

On Wed, Dec 16, 2020 at 11:48:55PM -0800, Atish Patra wrote:
> memblock_enforce_memory_limit accepts the maximum memory size not the last
> address. Fix the function invocation correctly.
>
> Fixes: 1bd14a66ee52 ("RISC-V: Remove any memblock representing unusable memory area")
>
> Signed-off-by: Atish Patra <[email protected]>

Acked-by: Mike Rapoport <[email protected]>

> ---
> arch/riscv/mm/init.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c
> index 8e577f14f120..e4133c20744c 100644
> --- a/arch/riscv/mm/init.c
> +++ b/arch/riscv/mm/init.c
> @@ -174,7 +174,7 @@ void __init setup_bootmem(void)
> * Make sure that any memory beyond mem_start + (-PAGE_OFFSET) is removed
> * as it is unusable by kernel.
> */
> - memblock_enforce_memory_limit(mem_start - PAGE_OFFSET);
> + memblock_enforce_memory_limit(-PAGE_OFFSET);
>
> /* Reserve from the start of the kernel to the end of the kernel */
> memblock_reserve(vmlinux_start, vmlinux_end - vmlinux_start);
> --
> 2.25.1
>

--
Sincerely yours,
Mike.

2020-12-17 08:45:57

by Atish Patra

[permalink] [raw]
Subject: Re: [PATCH] RISC-V: Fix usage of memblock_enforce_memory_limit

On Thu, Dec 17, 2020 at 12:12 AM Bin Meng <[email protected]> wrote:
>
> Hi Atish,
>
> On Thu, Dec 17, 2020 at 3:49 PM Atish Patra <[email protected]> wrote:
> >
> > memblock_enforce_memory_limit accepts the maximum memory size not the last
> > address. Fix the function invocation correctly.
> >
> > Fixes: 1bd14a66ee52 ("RISC-V: Remove any memblock representing unusable memory area")
> >
> > Signed-off-by: Atish Patra <[email protected]>
> > ---
> > arch/riscv/mm/init.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
>
> Thank you for working on this.
>
> Tested with QEMU 5.2.0 on 32-bit 'virt' and 'sifive_u', with
> fw_jump.bin used as the -bios.

fw_dynamic should also work unless you are using more than 1G of memory.
Linux kernel can only support 1G of memory for RV32. The current
Kconfig is bit misleading and
I will send a patch to update the description.

However, kernel should be able to ignore any memory beyond what it can
address and continue.
I will investigate more.

> 32-bit 'virt' boots, but 32-bit 'sifive_u' still does not boot, which
> should be another issue because reverting the original 1bd14a66ee52 it
> still does not help 'sifive_u'.
>

Are you using more than 1G of memory ? Let me know if the kernel boots
if you use 1G.

> Tested-by: Bin Meng <[email protected]>
>
> I believe the following tag should also be added and patch cc'ed to
> stable-kernel:
>
> Reported-by: Bin Meng <[email protected]>
> Cc: <[email protected]> # 5.10
>
> Regards,
> Bin
>
> _______________________________________________
> linux-riscv mailing list
> [email protected]
> http://lists.infradead.org/mailman/listinfo/linux-riscv



--
Regards,
Atish

2020-12-17 08:56:05

by Bin Meng

[permalink] [raw]
Subject: Re: [PATCH] RISC-V: Fix usage of memblock_enforce_memory_limit

Hi Atish,

On Thu, Dec 17, 2020 at 4:43 PM Atish Patra <[email protected]> wrote:
>
> On Thu, Dec 17, 2020 at 12:12 AM Bin Meng <[email protected]> wrote:
> >
> > Hi Atish,
> >
> > On Thu, Dec 17, 2020 at 3:49 PM Atish Patra <[email protected]> wrote:
> > >
> > > memblock_enforce_memory_limit accepts the maximum memory size not the last
> > > address. Fix the function invocation correctly.
> > >
> > > Fixes: 1bd14a66ee52 ("RISC-V: Remove any memblock representing unusable memory area")
> > >
> > > Signed-off-by: Atish Patra <[email protected]>
> > > ---
> > > arch/riscv/mm/init.c | 2 +-
> > > 1 file changed, 1 insertion(+), 1 deletion(-)
> > >
> >
> > Thank you for working on this.
> >
> > Tested with QEMU 5.2.0 on 32-bit 'virt' and 'sifive_u', with
> > fw_jump.bin used as the -bios.
>
> fw_dynamic should also work unless you are using more than 1G of memory.
> Linux kernel can only support 1G of memory for RV32. The current

I have always been using -m 2G for testing both 32-bit and 64-bit.
32-bit 'virt' with 2G memory boots the 32-bit kernel fine.

$ qemu-system-riscv32 -nographic -M virt -m 2G -smp 4 -kernel
arch/riscv/boot/Image -bios fw_jump.bin

> Kconfig is bit misleading and
> I will send a patch to update the description.
>
> However, kernel should be able to ignore any memory beyond what it can
> address and continue.
> I will investigate more.
>
> > 32-bit 'virt' boots, but 32-bit 'sifive_u' still does not boot, which
> > should be another issue because reverting the original 1bd14a66ee52 it
> > still does not help 'sifive_u'.
> >
>
> Are you using more than 1G of memory ? Let me know if the kernel boots
> if you use 1G.

Kernel does not boot with 1G memory on 32-bit 'sifive_u', either with
fw_jump.bin or fw_dynamic.bin.

$ qemu-system-riscv32 -nographic -M sifive_u -m 1G -smp 5 -kernel
arch/riscv/boot/Image -bios fw_jump.bin

>
> > Tested-by: Bin Meng <[email protected]>
> >
> > I believe the following tag should also be added and patch cc'ed to
> > stable-kernel:
> >
> > Reported-by: Bin Meng <[email protected]>
> > Cc: <[email protected]> # 5.10

Regards,
Bin

2020-12-17 23:47:47

by Atish Patra

[permalink] [raw]
Subject: Re: [PATCH] RISC-V: Fix usage of memblock_enforce_memory_limit

On Thu, Dec 17, 2020 at 12:53 AM Bin Meng <[email protected]> wrote:
>
> Hi Atish,
>
> On Thu, Dec 17, 2020 at 4:43 PM Atish Patra <[email protected]> wrote:
> >
> > On Thu, Dec 17, 2020 at 12:12 AM Bin Meng <[email protected]> wrote:
> > >
> > > Hi Atish,
> > >
> > > On Thu, Dec 17, 2020 at 3:49 PM Atish Patra <[email protected]> wrote:
> > > >
> > > > memblock_enforce_memory_limit accepts the maximum memory size not the last
> > > > address. Fix the function invocation correctly.
> > > >
> > > > Fixes: 1bd14a66ee52 ("RISC-V: Remove any memblock representing unusable memory area")
> > > >
> > > > Signed-off-by: Atish Patra <[email protected]>
> > > > ---
> > > > arch/riscv/mm/init.c | 2 +-
> > > > 1 file changed, 1 insertion(+), 1 deletion(-)
> > > >
> > >
> > > Thank you for working on this.
> > >
> > > Tested with QEMU 5.2.0 on 32-bit 'virt' and 'sifive_u', with
> > > fw_jump.bin used as the -bios.
> >
> > fw_dynamic should also work unless you are using more than 1G of memory.
> > Linux kernel can only support 1G of memory for RV32. The current
>
> I have always been using -m 2G for testing both 32-bit and 64-bit.
> 32-bit 'virt' with 2G memory boots the 32-bit kernel fine.
>

2GB issue with fw_dynamic is fixed with this patch.

https://www.mail-archive.com/[email protected]/msg768341.html

> $ qemu-system-riscv32 -nographic -M virt -m 2G -smp 4 -kernel
> arch/riscv/boot/Image -bios fw_jump.bin
>
> > Kconfig is bit misleading and
> > I will send a patch to update the description.
> >
> > However, kernel should be able to ignore any memory beyond what it can
> > address and continue.
> > I will investigate more.
> >
> > > 32-bit 'virt' boots, but 32-bit 'sifive_u' still does not boot, which
> > > should be another issue because reverting the original 1bd14a66ee52 it
> > > still does not help 'sifive_u'.
> > >
> >
> > Are you using more than 1G of memory ? Let me know if the kernel boots
> > if you use 1G.
>
> Kernel does not boot with 1G memory on 32-bit 'sifive_u', either with
> fw_jump.bin or fw_dynamic.bin.
>
> $ qemu-system-riscv32 -nographic -M sifive_u -m 1G -smp 5 -kernel
> arch/riscv/boot/Image -bios fw_jump.bin
>

This happened because of the incorrect loading address. It is already
fixed by Alistair.
https://www.mail-archive.com/[email protected]/msg768279.html

> >
> > > Tested-by: Bin Meng <[email protected]>
> > >

Thanks for testing it.

> > > I believe the following tag should also be added and patch cc'ed to
> > > stable-kernel:
> > >
> > > Reported-by: Bin Meng <[email protected]>
> > > Cc: <[email protected]> # 5.10
>

Sure. I will add that and resend it.

> Regards,
> Bin



--
Regards,
Atish