All of lore.kernel.org
 help / color / mirror / Atom feed
From: christoffer.dall@linaro.org (Christoffer Dall)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCHv3 03/11] arm64: Introduce helpers for page table levels
Date: Thu, 15 Oct 2015 15:30:01 +0200	[thread overview]
Message-ID: <20151015133001.GF21930@cbox> (raw)
In-Reply-To: <561FA6AE.6090707@arm.com>

On Thu, Oct 15, 2015 at 02:14:22PM +0100, Suzuki K. Poulose wrote:
> On 15/10/15 13:44, Mark Rutland wrote:
> >On Thu, Oct 15, 2015 at 01:37:35PM +0200, Christoffer Dall wrote:
> >>On Wed, Oct 14, 2015 at 12:20:26PM +0100, Suzuki K. Poulose wrote:
> >>>Introduce helpers for finding the number of page table
> >>>levels required for a given VA width, shift for a particular
> >>>page table level.
> 
> >>>+/*
> >>>+ * Size mapped by an entry at level n
> >>>+ * We map PAGE_SHIFT - 3 at all levels, except the PAGE_SHIFT bits at the last level
> >>>+ */
> >>>+#define ARM64_HW_PGTABLE_LEVEL_SHIFT(n)	((PAGE_SHIFT - 3) * (4 - (n)) + 3)
> >>
> >>I feel like I'm partially failing the interview question again, in that
> >>I don't fully understand the '+ 3' in the end?
> >
> >The last level handles PAGE_SHIFT bits (the bits from the VA that are
> >the same in the PA). We only accounted for (PAGE_SHIFT - 3) bits at each
> >level when multiplying, so we add those 3 missing bits back at the end.
> >
> 
> Something like :
> 
> /*
>  * Size mapped by an entry at level n
>  * We map PAGE_SHIFT - 3 at all levels, except the last, where we map PAGE_SHIFT bits.
>  * The maximum number of levels supported by the architecture is 4. Hence at starting
>  * at level n, we hanve (4 - n) levels of translation. So, the total number of bits

nit: s/hanve/have/

>  * mapped by an entry at level n is :
>  *
>  *  ((4 - n) - 1) * (PAGE_SHIFT - 3) + PAGE_SHIFT
>  *
>  * Rearranging it a bit we get :
>  *   (4 - n) * (PAGE_SHIFT - 3) + 3
>  */
> 
> Or we could use the formula without rearranging.
> 
Either way, even I get it now.

Thanks for the explanation!!

Assuming some version of this goes in:

Acked-by: Christoffer Dall <christoffer.dall@linaro.org>

WARNING: multiple messages have this Message-ID (diff)
From: Christoffer Dall <christoffer.dall@linaro.org>
To: "Suzuki K. Poulose" <Suzuki.Poulose@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, catalin.marinas@arm.com,
	will.deacon@arm.com, steve.capper@linaro.org,
	marc.zyngier@arm.com, ard.biesheuvel@linaro.org
Subject: Re: [PATCHv3 03/11] arm64: Introduce helpers for page table levels
Date: Thu, 15 Oct 2015 15:30:01 +0200	[thread overview]
Message-ID: <20151015133001.GF21930@cbox> (raw)
In-Reply-To: <561FA6AE.6090707@arm.com>

On Thu, Oct 15, 2015 at 02:14:22PM +0100, Suzuki K. Poulose wrote:
> On 15/10/15 13:44, Mark Rutland wrote:
> >On Thu, Oct 15, 2015 at 01:37:35PM +0200, Christoffer Dall wrote:
> >>On Wed, Oct 14, 2015 at 12:20:26PM +0100, Suzuki K. Poulose wrote:
> >>>Introduce helpers for finding the number of page table
> >>>levels required for a given VA width, shift for a particular
> >>>page table level.
> 
> >>>+/*
> >>>+ * Size mapped by an entry at level n
> >>>+ * We map PAGE_SHIFT - 3 at all levels, except the PAGE_SHIFT bits at the last level
> >>>+ */
> >>>+#define ARM64_HW_PGTABLE_LEVEL_SHIFT(n)	((PAGE_SHIFT - 3) * (4 - (n)) + 3)
> >>
> >>I feel like I'm partially failing the interview question again, in that
> >>I don't fully understand the '+ 3' in the end?
> >
> >The last level handles PAGE_SHIFT bits (the bits from the VA that are
> >the same in the PA). We only accounted for (PAGE_SHIFT - 3) bits at each
> >level when multiplying, so we add those 3 missing bits back at the end.
> >
> 
> Something like :
> 
> /*
>  * Size mapped by an entry at level n
>  * We map PAGE_SHIFT - 3 at all levels, except the last, where we map PAGE_SHIFT bits.
>  * The maximum number of levels supported by the architecture is 4. Hence at starting
>  * at level n, we hanve (4 - n) levels of translation. So, the total number of bits

nit: s/hanve/have/

>  * mapped by an entry at level n is :
>  *
>  *  ((4 - n) - 1) * (PAGE_SHIFT - 3) + PAGE_SHIFT
>  *
>  * Rearranging it a bit we get :
>  *   (4 - n) * (PAGE_SHIFT - 3) + 3
>  */
> 
> Or we could use the formula without rearranging.
> 
Either way, even I get it now.

Thanks for the explanation!!

Assuming some version of this goes in:

Acked-by: Christoffer Dall <christoffer.dall@linaro.org>

  reply	other threads:[~2015-10-15 13:30 UTC|newest]

Thread overview: 110+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-14 11:20 [PATCHv3 00/11] arm64: 16K translation granule support Suzuki K. Poulose
2015-10-14 11:20 ` Suzuki K. Poulose
2015-10-14 11:20 ` [PATCHv3 01/11] arm64: Move swapper pagetable definitions Suzuki K. Poulose
2015-10-14 11:20   ` Suzuki K. Poulose
2015-10-14 11:42   ` Mark Rutland
2015-10-14 11:42     ` Mark Rutland
2015-10-14 12:41     ` Suzuki K. Poulose
2015-10-14 12:41       ` Suzuki K. Poulose
2015-10-14 11:20 ` [PATCHv3 02/11] arm64: Handle section maps for swapper/idmap Suzuki K. Poulose
2015-10-14 11:20   ` Suzuki K. Poulose
2015-10-14 12:06   ` Mark Rutland
2015-10-14 12:06     ` Mark Rutland
2015-10-14 13:21     ` Suzuki K. Poulose
2015-10-14 13:21       ` Suzuki K. Poulose
2015-10-14 14:51       ` Mark Rutland
2015-10-14 14:51         ` Mark Rutland
2015-10-14 15:08         ` Suzuki K. Poulose
2015-10-14 15:08           ` Suzuki K. Poulose
2015-10-14 15:14           ` Mark Rutland
2015-10-14 15:14             ` Mark Rutland
2015-10-14 11:20 ` [PATCHv3 03/11] arm64: Introduce helpers for page table levels Suzuki K. Poulose
2015-10-14 11:20   ` Suzuki K. Poulose
2015-10-14 17:07   ` Mark Rutland
2015-10-14 17:07     ` Mark Rutland
2015-10-15  9:35     ` Suzuki K. Poulose
2015-10-15  9:35       ` Suzuki K. Poulose
2015-10-15 10:37       ` Mark Rutland
2015-10-15 10:37         ` Mark Rutland
2015-10-15 11:40       ` Christoffer Dall
2015-10-15 11:40         ` Christoffer Dall
2015-10-15 11:37   ` Christoffer Dall
2015-10-15 11:37     ` Christoffer Dall
2015-10-15 12:44     ` Mark Rutland
2015-10-15 12:44       ` Mark Rutland
2015-10-15 13:14       ` Suzuki K. Poulose
2015-10-15 13:14         ` Suzuki K. Poulose
2015-10-15 13:30         ` Christoffer Dall [this message]
2015-10-15 13:30           ` Christoffer Dall
2015-10-15 13:48           ` Suzuki K. Poulose
2015-10-15 13:48             ` Suzuki K. Poulose
2015-10-15 14:15             ` Christoffer Dall
2015-10-15 14:15               ` Christoffer Dall
2015-10-14 11:20 ` [PATCHv3 04/11] arm64: Calculate size for idmap_pg_dir at compile time Suzuki K. Poulose
2015-10-14 11:20   ` Suzuki K. Poulose
2015-10-14 17:12   ` Mark Rutland
2015-10-14 17:12     ` Mark Rutland
2015-10-14 11:20 ` [PATCHv3 05/11] arm64: Handle 4 level page table for swapper Suzuki K. Poulose
2015-10-14 11:20   ` Suzuki K. Poulose
2015-10-14 17:15   ` Mark Rutland
2015-10-14 17:15     ` Mark Rutland
2015-10-14 11:20 ` [PATCHv3 06/11] arm64: Clean config usages for page size Suzuki K. Poulose
2015-10-14 11:20   ` Suzuki K. Poulose
2015-10-14 11:20 ` [PATCHv3 07/11] arm64: Kconfig: Fix help text about AArch32 support with 64K pages Suzuki K. Poulose
2015-10-14 11:20   ` Suzuki K. Poulose
2015-10-14 17:16   ` Mark Rutland
2015-10-14 17:16     ` Mark Rutland
2015-10-14 11:20 ` [PATCHv3 08/11] arm64: Check for selected granule support Suzuki K. Poulose
2015-10-14 11:20   ` Suzuki K. Poulose
2015-10-14 17:24   ` Mark Rutland
2015-10-14 17:24     ` Mark Rutland
2015-10-14 17:32     ` Mark Rutland
2015-10-14 17:32       ` Mark Rutland
2015-10-15  9:45     ` Suzuki K. Poulose
2015-10-15  9:45       ` Suzuki K. Poulose
2015-10-15 10:39       ` Mark Rutland
2015-10-15 10:39         ` Mark Rutland
2015-10-14 21:13   ` Jeremy Linton
2015-10-14 21:13     ` Jeremy Linton
2015-10-15  9:48     ` Suzuki K. Poulose
2015-10-15  9:48       ` Suzuki K. Poulose
2015-10-15 10:45     ` Mark Rutland
2015-10-15 10:45       ` Mark Rutland
2015-10-15 11:25       ` Suzuki K. Poulose
2015-10-15 11:25         ` Suzuki K. Poulose
2015-10-15 12:37         ` Mark Rutland
2015-10-15 12:37           ` Mark Rutland
2015-10-15 12:58           ` Suzuki K. Poulose
2015-10-15 12:58             ` Suzuki K. Poulose
2015-10-16  8:03             ` Ard Biesheuvel
2015-10-16  8:03               ` Ard Biesheuvel
2015-10-15 14:47         ` Jeremy Linton
2015-10-15 14:47           ` Jeremy Linton
2015-10-15 15:02           ` Suzuki K. Poulose
2015-10-15 15:02             ` Suzuki K. Poulose
2015-10-15 15:11           ` Mark Rutland
2015-10-15 15:11             ` Mark Rutland
2015-10-16  8:11             ` Ard Biesheuvel
2015-10-16  8:11               ` Ard Biesheuvel
2015-10-14 11:20 ` [PATCHv3 09/11] arm64: Add page size to the kernel image header Suzuki K. Poulose
2015-10-14 11:20   ` Suzuki K. Poulose
2015-10-14 17:27   ` Mark Rutland
2015-10-14 17:27     ` Mark Rutland
2015-10-15  9:19     ` Suzuki K. Poulose
2015-10-15  9:19       ` Suzuki K. Poulose
2015-10-14 11:20 ` [PATCHv3 10/11] arm64: Add 16K page size support Suzuki K. Poulose
2015-10-14 11:20   ` Suzuki K. Poulose
2015-10-14 15:40   ` Jeremy Linton
2015-10-14 15:40     ` Jeremy Linton
2015-10-14 15:53     ` Suzuki K. Poulose
2015-10-14 15:53       ` Suzuki K. Poulose
2015-10-15 14:06   ` Mark Rutland
2015-10-15 14:06     ` Mark Rutland
2015-10-15 14:48     ` Suzuki K. Poulose
2015-10-15 14:48       ` Suzuki K. Poulose
2015-10-15 15:36       ` Steve Capper
2015-10-15 15:36         ` Steve Capper
2015-10-15 15:48         ` Suzuki K. Poulose
2015-10-15 15:48           ` Suzuki K. Poulose
2015-10-14 11:20 ` [PATCHv3 11/11] arm64: 36 bit VA Suzuki K. Poulose
2015-10-14 11:20   ` Suzuki K. Poulose

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=20151015133001.GF21930@cbox \
    --to=christoffer.dall@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.