On 1 December 2014 at 14:13, Richard W.M. Jones <rjo...@redhat.com> wrote: > Resolves: https://bugs.launchpad.net/qemu/+bug/1383857 > Signed-off-by: Richard W.M. Jones <rjo...@redhat.com>
This is really a kernel bug. https://www.kernel.org/doc/Documentation/arm64/booting.txt just says "The device tree blob (dtb) must be placed on an 8-byte boundary within the first 512 megabytes from the start of the kernel image and must not cross a 2-megabyte boundary." and doesn't make any requirements about it not overlapping a page with the initrd. > --- > hw/arm/boot.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/hw/arm/boot.c b/hw/arm/boot.c > index 0014c34..a859922 100644 > --- a/hw/arm/boot.c > +++ b/hw/arm/boot.c > @@ -632,11 +632,11 @@ void arm_load_kernel(ARMCPU *cpu, struct arm_boot_info > *info) > */ > if (have_dtb(info)) { > /* Place the DTB after the initrd in memory. Note that some > - * kernels will trash anything in the 4K page the initrd > + * kernels will trash anything in the page the initrd > * ends in, so make sure the DTB isn't caught up in that. > */ > hwaddr dtb_start = QEMU_ALIGN_UP(info->initrd_start + > initrd_size, > - 4096); > + 65536); I'd rather we didn't do this unconditionally, because for some of our board models 64K is a significant proportion of their total RAM. -- PMM