• Ard Biesheuvel's avatar
    arm64: vmemmap: use virtual projection of linear region · e75c4b65
    Ard Biesheuvel authored
    commit dfd55ad8 upstream.
    
    Commit dd006da2 ("arm64: mm: increase VA range of identity map") made
    some changes to the memory mapping code to allow physical memory to reside
    at an offset that exceeds the size of the virtual mapping.
    
    However, since the size of the vmemmap area is proportional to the size of
    the VA area, but it is populated relative to the physical space, we may
    end up with the struct page array being mapped outside of the vmemmap
    region. For instance, on my Seattle A0 box, I can see the following output
    in the dmesg log.
    
       vmemmap : 0xffffffbdc0000000 - 0xffffffbfc0000000   (     8 GB maximum)
                 0xffffffbfc0000000 - 0xffffffbfd0000000   (   256 MB actual)
    
    We can fix this by deciding that the vmemmap region is not a projection of
    the physical space, but of the virtual space above PAGE_OFFSET, i.e., the
    linear region. This way, we are guaranteed that the vmemmap region is of
    sufficient size, and we can even reduce the size by half.
    Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    e75c4b65
init.c 9.66 KB