On 5 November 2018 at 22:05, Florian Fainelli <f.fainelli@xxxxxxxxx> wrote: > On 11/5/18 1:00 PM, Ard Biesheuvel wrote: >> On 5 November 2018 at 21:51, Florian Fainelli <f.fainelli@xxxxxxxxx> wrote: >>> On 11/5/18 12:44 PM, Ard Biesheuvel wrote: >>>> On 5 November 2018 at 21:41, Florian Fainelli <f.fainelli@xxxxxxxxx> wrote: >>>>> On 11/5/18 12:39 PM, Ard Biesheuvel wrote: >>>>>> Hi Florian, >>>>>> >>>>>> On 31 October 2018 at 20:28, Florian Fainelli <f.fainelli@xxxxxxxxx> wrote: >>>>>>> ARM64 is the only architecture that re-defines >>>>>>> __early_init_dt_declare_initrd() in order for that function to populate >>>>>>> initrd_start/initrd_end with physical addresses instead of virtual >>>>>>> addresses. Instead of having an override we can leverage >>>>>>> drivers/of/fdt.c populating phys_initrd_start/phys_initrd_size to >>>>>>> populate those variables for us. >>>>>>> >>>>>>> Signed-off-by: Florian Fainelli <f.fainelli@xxxxxxxxx> >>>>>>> --- >>>>>>> arch/arm64/mm/init.c | 19 +++++++++---------- >>>>>>> 1 file changed, 9 insertions(+), 10 deletions(-) >>>>>>> >>>>>>> diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c >>>>>>> index 3cf87341859f..00ef2166bb73 100644 >>>>>>> --- a/arch/arm64/mm/init.c >>>>>>> +++ b/arch/arm64/mm/init.c >>>>>>> @@ -72,8 +72,8 @@ static int __init early_initrd(char *p) >>>>>>> if (*endp == ',') { >>>>>>> size = memparse(endp + 1, NULL); >>>>>>> >>>>>>> - initrd_start = start; >>>>>>> - initrd_end = start + size; >>>>>>> + phys_initrd_start = start; >>>>>>> + phys_initrd_size = size; >>>>>>> } >>>>>>> return 0; >>>>>>> } >>>>>>> @@ -408,14 +408,14 @@ void __init arm64_memblock_init(void) >>>>>>> memblock_add(__pa_symbol(_text), (u64)(_end - _text)); >>>>>>> } >>>>>>> >>>>>>> - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { >>>>>>> + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && phys_initrd_size) { >>>>>>> /* >>>>>>> * Add back the memory we just removed if it results in the >>>>>>> * initrd to become inaccessible via the linear mapping. >>>>>>> * Otherwise, this is a no-op >>>>>>> */ >>>>>>> - u64 base = initrd_start & PAGE_MASK; >>>>>>> - u64 size = PAGE_ALIGN(initrd_end) - base; >>>>>>> + u64 base = phys_initrd_start & PAGE_MASK; >>>>>>> + u64 size = PAGE_ALIGN(phys_initrd_size); >>>>>>> >>>>>>> /* >>>>>>> * We can only add back the initrd memory if we don't end up >>>>>>> @@ -460,12 +460,11 @@ void __init arm64_memblock_init(void) >>>>>>> */ >>>>>>> memblock_reserve(__pa_symbol(_text), _end - _text); >>>>>>> #ifdef CONFIG_BLK_DEV_INITRD >>>>>>> - if (initrd_start) { >>>>>>> - memblock_reserve(initrd_start, initrd_end - initrd_start); >>>>>>> - >>>>>>> + if (phys_initrd_size) { >>>>>>> /* the generic initrd code expects virtual addresses */ >>>>>>> - initrd_start = __phys_to_virt(initrd_start); >>>>>>> - initrd_end = __phys_to_virt(initrd_end); >>>>>>> + initrd_start = __phys_to_virt(phys_initrd_start); >>>>>>> + initrd_end = initrd_start + phys_initrd_size; >>>>>>> + initrd_below_start_ok = 0; >>>>>> >>>>>> Where is this assignment coming from? >>>>> >>>>> __early_init_dt_declare_initrd() sets initrd_below_start_ok to 1 though >>>>> after patch #5 this is not necessary any more. >>>> >>>> Yes, but why? The original arm64 version of >>>> __early_init_dt_declare_initrd() does not set it but now you set to 1 >>>> in the IS_ENABLED(CONFIG_ARM64) section in the generic code and set it >>>> back to 0 here. >>> >>> Humm, it is an if (!IS_ENABLED(CONFIG_ARM64)) condition, so we would not >>> be taking that branch on an ARM64 kernel. >>> >> >> Right. So now that we are not setting it to 1 on arm64, there is no >> longer a reason to set it to 0 again, no? > > Correct, and in fact, this is not a problem either at patch #4 (which > has the custom __early_init_dt_declare_initrd()) or #5 (which removes > it), any other feedback you would like me to address before addressing > Rob's suggestion? > No, I think this is ok. The conditional on arm64 in generic code is a bit nasty, and it would be nicer generally if we only have to record a single memory range, but if this fixes the issue you were addressing originally, I'm fine with it.