linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Catalin Marinas <catalin.marinas@arm.com>
To: Steve Capper <steve.capper@arm.com>
Cc: linux-mm@kvack.org, linux-arm-kernel@lists.infradead.org,
	ard.biesheuvel@linaro.org, suzuki.poulose@arm.com,
	will.deacon@arm.com, jcm@redhat.com
Subject: Re: [PATCH V5 4/7] arm64: mm: Offset TTBR1 to allow 52-bit PTRS_PER_PGD
Date: Fri, 7 Dec 2018 11:21:03 +0000	[thread overview]
Message-ID: <20181207112102.GB23085@arrakis.emea.arm.com> (raw)
In-Reply-To: <20181206225042.11548-5-steve.capper@arm.com>

On Thu, Dec 06, 2018 at 10:50:39PM +0000, Steve Capper wrote:
> Enabling 52-bit VAs on arm64 requires that the PGD table expands from 64
> entries (for the 48-bit case) to 1024 entries. This quantity,
> PTRS_PER_PGD is used as follows to compute which PGD entry corresponds
> to a given virtual address, addr:
> 
> pgd_index(addr) -> (addr >> PGDIR_SHIFT) & (PTRS_PER_PGD - 1)
> 
> Userspace addresses are prefixed by 0's, so for a 48-bit userspace
> address, uva, the following is true:
> (uva >> PGDIR_SHIFT) & (1024 - 1) == (uva >> PGDIR_SHIFT) & (64 - 1)
> 
> In other words, a 48-bit userspace address will have the same pgd_index
> when using PTRS_PER_PGD = 64 and 1024.
> 
> Kernel addresses are prefixed by 1's so, given a 48-bit kernel address,
> kva, we have the following inequality:
> (kva >> PGDIR_SHIFT) & (1024 - 1) != (kva >> PGDIR_SHIFT) & (64 - 1)
> 
> In other words a 48-bit kernel virtual address will have a different
> pgd_index when using PTRS_PER_PGD = 64 and 1024.
> 
> If, however, we note that:
> kva = 0xFFFF << 48 + lower (where lower[63:48] == 0b)
> and, PGDIR_SHIFT = 42 (as we are dealing with 64KB PAGE_SIZE)
> 
> We can consider:
> (kva >> PGDIR_SHIFT) & (1024 - 1) - (kva >> PGDIR_SHIFT) & (64 - 1)
>  = (0xFFFF << 6) & 0x3FF - (0xFFFF << 6) & 0x3F	// "lower" cancels out
>  = 0x3C0
> 
> In other words, one can switch PTRS_PER_PGD to the 52-bit value globally
> provided that they increment ttbr1_el1 by 0x3C0 * 8 = 0x1E00 bytes when
> running with 48-bit kernel VAs (TCR_EL1.T1SZ = 16).
> 
> For kernel configuration where 52-bit userspace VAs are possible, this
> patch offsets ttbr1_el1 and sets PTRS_PER_PGD corresponding to the
> 52-bit value.
> 
> Suggested-by: Catalin Marinas <catalin.marinas@arm.com>
> Signed-off-by: Steve Capper <steve.capper@arm.com>

Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>

  reply	other threads:[~2018-12-07 11:21 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-06 22:50 [PATCH V5 0/7] 52-bit userspace VAs Steve Capper
2018-12-06 22:50 ` [PATCH V5 1/7] mm: mmap: Allow for "high" userspace addresses Steve Capper
2018-12-07 19:56   ` Andrew Morton
2018-12-06 22:50 ` [PATCH V5 2/7] arm64: mm: Introduce DEFAULT_MAP_WINDOW Steve Capper
2018-12-06 22:50 ` [PATCH V5 3/7] arm64: mm: Define arch_get_mmap_end, arch_get_mmap_base Steve Capper
2018-12-06 22:50 ` [PATCH V5 4/7] arm64: mm: Offset TTBR1 to allow 52-bit PTRS_PER_PGD Steve Capper
2018-12-07 11:21   ` Catalin Marinas [this message]
2018-12-07 12:04   ` Suzuki K Poulose
2018-12-06 22:50 ` [PATCH V5 5/7] arm64: mm: Prevent mismatched 52-bit VA support Steve Capper
2018-12-07 10:47   ` Suzuki K Poulose
2018-12-07 15:26     ` Will Deacon
2018-12-07 17:28       ` Suzuki K Poulose
2018-12-10 13:36         ` Will Deacon
2018-12-10 16:04           ` Steve Capper
2018-12-10 16:18             ` Will Deacon
2018-12-10 16:55               ` Steve Capper
2018-12-10 17:08                 ` Steve Capper
2018-12-10 17:42                   ` Steve Capper
2018-12-10 18:07                     ` Suzuki K Poulose
2018-12-06 22:50 ` [PATCH V5 6/7] arm64: mm: introduce 52-bit userspace support Steve Capper
2018-12-07 11:55   ` Catalin Marinas
2018-12-06 22:50 ` [PATCH V5 7/7] arm64: mm: Allow forcing all userspace addresses to 52-bit Steve Capper
2018-12-10 19:34 ` [PATCH V5 0/7] 52-bit userspace VAs Will Deacon
2018-12-11  9:13   ` Steve Capper

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181207112102.GB23085@arrakis.emea.arm.com \
    --to=catalin.marinas@arm.com \
    --cc=ard.biesheuvel@linaro.org \
    --cc=jcm@redhat.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-mm@kvack.org \
    --cc=steve.capper@arm.com \
    --cc=suzuki.poulose@arm.com \
    --cc=will.deacon@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox