[PATCHv3] arm64: efi: correctly map runtime regions

Catalin Marinas catalin.marinas at arm.com
Wed Nov 25 07:48:37 PST 2015


On Mon, Nov 23, 2015 at 11:09:11AM +0000, Mark Rutland wrote:
> The kernel may use a page granularity of 4K, 16K, or 64K depending on
> configuration.
> 
> When mapping EFI runtime regions, we use memrange_efi_to_native to round
> the physical base address of a region down to a kernel page boundary,
> and round the size up to a kernel page boundary, adding the residue left
> over from rounding down the physical base address. We do not round down
> the virtual base address.
> 
> In __create_mapping we account for the offset of the virtual base from a
> granule boundary, adding the residue to the size before rounding the
> base down to said granule boundary.
> 
> Thus we account for the residue twice, and when the residue is non-zero
> will cause __create_mapping to map an additional page at the end of the
> region. Depending on the memory map, this page may be in a region we are
> not intended/permitted to map, or may clash with a different region that
> we wish to map. In typical cases, mapping the next item in the memory
> map will overwrite the erroneously created entry, as we sort the memory
> map in the stub.
> 
> As __create_mapping can cope with base addresses which are not page
> aligned, we can instead rely on it to map the region appropriately, and
> simplify efi_virtmap_init by removing the unnecessary code.
> 
> Signed-off-by: Mark Rutland <mark.rutland at arm.com>
> Reviewed-by: Ard Biesheuvel <ard.biesheuvel at linaro.org>
> Cc: Catalin Marinas <catalin.marinas at arm.com>
> Cc: Leif Lindholm <leif.lindholm at linaro.org>
> Cc: Will Deacon <will.deacon at arm.com>

Patch applied. Thanks.

-- 
Catalin



More information about the linux-arm-kernel mailing list