[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2] hw: riscv: Allow large kernels to boot by moving the init
From: |
Alistair Francis |
Subject: |
Re: [PATCH v2] hw: riscv: Allow large kernels to boot by moving the initrd further away in RAM |
Date: |
Thu, 15 Feb 2024 19:54:16 +1000 |
On Wed, Feb 7, 2024 at 1:42 AM Alexandre Ghiti <alexghiti@rivosinc.com> wrote:
>
> Currently, the initrd is placed at 128MB, which overlaps with the kernel
> when it is large (for example syzbot kernels are). From the kernel side,
> there is no reason we could not push the initrd further away in memory
> to accommodate large kernels, so move the initrd at 512MB when possible.
>
> The ideal solution would have been to place the initrd based on the
> kernel size but we actually can't since the bss size is not known when
> the image is loaded by load_image_targphys_as() and the initrd would
> then overlap with this section.
>
> Signed-off-by: Alexandre Ghiti <alexghiti@rivosinc.com>
Thanks!
Applied to riscv-to-apply.next
Alistair
> ---
>
> Changes in v2:
> - Fix typos in commit log (Daniel) and title
> - Added to the commit log why using the kernel size does not work
> (Daniel)
>
> hw/riscv/boot.c | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c
> index 0ffca05189..9a367af2fa 100644
> --- a/hw/riscv/boot.c
> +++ b/hw/riscv/boot.c
> @@ -188,13 +188,13 @@ static void riscv_load_initrd(MachineState *machine,
> uint64_t kernel_entry)
> * kernel is uncompressed it will not clobber the initrd. However
> * on boards without much RAM we must ensure that we still leave
> * enough room for a decent sized initrd, and on boards with large
> - * amounts of RAM we must avoid the initrd being so far up in RAM
> - * that it is outside lowmem and inaccessible to the kernel.
> - * So for boards with less than 256MB of RAM we put the initrd
> - * halfway into RAM, and for boards with 256MB of RAM or more we put
> - * the initrd at 128MB.
> + * amounts of RAM, we put the initrd at 512MB to allow large kernels
> + * to boot.
> + * So for boards with less than 1GB of RAM we put the initrd
> + * halfway into RAM, and for boards with 1GB of RAM or more we put
> + * the initrd at 512MB.
> */
> - start = kernel_entry + MIN(mem_size / 2, 128 * MiB);
> + start = kernel_entry + MIN(mem_size / 2, 512 * MiB);
>
> size = load_ramdisk(filename, start, mem_size - start);
> if (size == -1) {
> --
> 2.39.2
>
>