[PATCH v2 2/4] arm64: mm: extend linear region for 52-bit VA configurations

Anshuman Khandual anshuman.khandual at arm.com
Tue Oct 13 23:44:33 EDT 2020



On 10/08/2020 09:06 PM, Ard Biesheuvel wrote:
> For historical reasons, the arm64 kernel VA space is configured as two
> equally sized halves, i.e., on a 48-bit VA build, the VA space is split
> into a 47-bit vmalloc region and a 47-bit linear region.
> 
> When support for 52-bit virtual addressing was added, this equal split
> was kept, resulting in a substantial waste of virtual address space in
> the linear region:
> 
>                            48-bit VA                     52-bit VA
>   0xffff_ffff_ffff_ffff +-------------+               +-------------+
>                         |   vmalloc   |               |   vmalloc   |
>   0xffff_8000_0000_0000 +-------------+ _PAGE_END(48) +-------------+
>                         |   linear    |               :             :
>   0xffff_0000_0000_0000 +-------------+               :             :
>                         :             :               :             :
>                         :             :               :             :
>                         :             :               :             :
>                         :             :               :  currently  :
>                         :  unusable   :               :             :
>                         :             :               :   unused    :
>                         :     by      :               :             :
>                         :             :               :             :
>                         :  hardware   :               :             :
>                         :             :               :             :
>   0xfff8_0000_0000_0000 :             : _PAGE_END(52) +-------------+
>                         :             :               |             |
>                         :             :               |             |
>                         :             :               |             |
>                         :             :               |             |
>                         :             :               |             |
>                         :  unusable   :               |             |
>                         :             :               |   linear    |
>                         :     by      :               |             |
>                         :             :               |   region    |
>                         :  hardware   :               |             |
>                         :             :               |             |
>                         :             :               |             |
>                         :             :               |             |
>                         :             :               |             |
>                         :             :               |             |
>                         :             :               |             |
>   0xfff0_0000_0000_0000 +-------------+  PAGE_OFFSET  +-------------+
> 
> As illustrated above, the 52-bit VA kernel uses 47 bits for the vmalloc
> space (as before), to ensure that a single 64k granule kernel image can
> support any 64k granule capable system, regardless of whether it supports
> the 52-bit virtual addressing extension. However, due to the fact that
> the VA space is still split in equal halves, the linear region is only
> 2^51 bytes in size, wasting almost half of the 52-bit VA space.

Right, that is a huge wastage. Increasing the linear mapping will definitely
help in getting more memory used on the system. But now do we have enough
vmemmap range to support this enlarged linear mapping ?



More information about the linux-arm-kernel mailing list