On Wed, Feb 7, 2024 at 1:42 AM Alexandre Ghiti <alexgh...@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 <alexgh...@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 > >