On Fri, 18 Oct 2013, Russell King - ARM Linux wrote: > When things were at a fixed location, they were always placed at > around 256 bytes into the memory, below the kernel. I guess now people > are placing them at some random location elsewhere. > > This is becoming more a more of a pain. We have all sorts of randomly > placed objects in memory now that its only a matter of time before we > hit something. We keep on dreaming up these "well, let's move it" > solutions but does that really help? Move it to where? Another place > where we think there isn't going to be anything? What if there is? This is why I suggested adding a recommendation for placing the initrd/DTB/ATAGs above the 128MB boundary from start of RAM in the ARM booting document. The zImage code does have to take into account the location of the final kernel's .bss area in order to properly accommodate appended DTB to zImage, otherwise the simple relocation of the decompressor (with its appended DTB) out of the way of the final kernel image is not sufficient to guarantee that the appended DTB won't be overwritten. But I think that this is the extent of what we should do. We already don't relocate the initrd if it is in the way either. Trying to make everything automagically relocate properly in all cases during very early boot is very difficult, so it is best to simply not attempt it. On the other hand, the loader agent, whether it is kexec or a bootloader, should be aware of all the available RAM and could therefore make things safe. If you have the ability to load the DTB and/or ATAG independently from zImage or uncompressed Image (which is not the case for the appended DTB) then it is your responsibility to load it sufficiently far away from the kernel. Same rule applies for the initrd. Hence the "above 128MB from start of RAM" recommendation. Nicolas