Subject: [PATH V3] arm64: mm: Create gigabyte kernel logical mappings where possible

From: [email-masked] (Catalin Marinas)
Date: Fri, 9 May 2014 16:06:16 +0100

On Tue, May 06, 2014 at 02:02:27PM +0100, Steve Capper wrote:
> We have the capability to map 1GB level 1 blocks when using a 4K
> granule.
> 
> This patch adjusts the create_mapping logic s.t. when mapping physical
> memory on boot, we attempt to use a 1GB block if both the VA and PA
> start and end are 1GB aligned. This both reduces the levels of lookup
> required to resolve a kernel logical address, as well as reduces TLB
> pressure on cores that support 1GB TLB entries.
> 
> Signed-off-by: Steve Capper <[email-masked]>
> ---
> Changed in V3: added awareness of 1GB blocks to kern_addr_valid.
> This was tested via gdb:
> gdb ./vmlinux /proc/kcore
> disassemble kern_addr_valid
> 
> The output looked valid.
> In V2 of the patch, I got an oops.
> 
> I've defined constants with pgdval_t type. Ideally, I would like to
> define pudval_t types, but due to the way folding works this does not
> exist for <4 levels. I'm not sure if it would be better to define
> pudval_t for <4 levels or leave this as is?

I would leave it as is for now, PUD_TABLE_BIT is already defined as
pgdval_t. I'll have a look Jungseok and maybe we can clean them up
there.

Patch applied. Thanks.

-- 
Catalin