• Ian Campbell's avatar
    of/fdt: memblock_reserve /memreserve/ regions in the case of partial overlap · 094cb981
    Ian Campbell authored
    memblock_is_region_reserved() returns true in the case of a partial
    overlap, meaning that the current code fails to reserve the
    non-overlapping portion.
    
    This call was introduced as part of d1552ce4 "of/fdt: move
    memreserve and dtb memory reservations into core" which went into
    v3.16.
    
    I observed this causing a Midway system with a buggy fdt (the header
    declares itself to be larger than it really is) failing to boot
    because the over-inflated size of the fdt was causing it to seem to
    run into the swapper_pg_dir region, meaning the DT wasn't reserved.
    The symptoms were failing to find an disks or network and failing to
    boot.
    
    However given the ambiguity of whether things like the initrd are
    covered by /memreserve/ and similar I think it is best to also
    register the region rather than just ignoring it.
    
    Since memblock_reserve() handles overlaps just fine lets just warn and
    carry on.
    Signed-off-by: default avatarIan Campbell <ian.campbell@citrix.com>
    Signed-off-by: default avatarGrant Likely <grant.likely@linaro.org>
    Cc: Rob Herring <robh+dt@kernel.org>
    Cc: stable@vger.kernel.org # v3.16+
    094cb981
fdt.c 27.7 KB