All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marc Zyngier <marc.zyngier@arm.com>
To: Christoffer Dall <christoffer.dall@linaro.org>,
	"Suzuki K. Poulose" <suzuki.poulose@arm.com>
Cc: kvm@vger.kernel.org, ard.biesheuvel@linaro.org,
	Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will.deacon@arm.com>,
	linux-kernel@vger.kernel.org, kvmarm@lists.cs.columbia.edu,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 03/15] arm64: Introduce helpers for page table levels
Date: Wed, 07 Oct 2015 10:26:14 +0100	[thread overview]
Message-ID: <5614E536.9040007@arm.com> (raw)
In-Reply-To: <20151007082652.GM9011@cbox>

On 07/10/15 09:26, Christoffer Dall wrote:
> Hi Suzuki,
> 
> On Tue, Sep 15, 2015 at 04:41:12PM +0100, Suzuki K. Poulose wrote:
>> From: "Suzuki K. Poulose" <suzuki.poulose@arm.com>
>>
>> Introduce helpers for finding the number of page table
>> levels required for a given VA width, shift for a particular
>> page table level.
>>
>> Convert the existing users to the new helpers. More users
>> to follow.
>>
>> Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
>> Cc: Mark Rutland <mark.rutland@arm.com>
>> Cc: Catalin Marinas <catalin.marinas@arm.com>
>> Cc: Will Deacon <will.deacon@arm.com>
>> Signed-off-by: Suzuki K. Poulose <suzuki.poulose@arm.com>
>> Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
>> Tested-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
>> ---
>>  arch/arm64/include/asm/pgtable-hwdef.h |   15 ++++++++++++---
>>  1 file changed, 12 insertions(+), 3 deletions(-)
>>
>> diff --git a/arch/arm64/include/asm/pgtable-hwdef.h b/arch/arm64/include/asm/pgtable-hwdef.h
>> index 24154b0..ce18389 100644
>> --- a/arch/arm64/include/asm/pgtable-hwdef.h
>> +++ b/arch/arm64/include/asm/pgtable-hwdef.h
>> @@ -16,13 +16,21 @@
>>  #ifndef __ASM_PGTABLE_HWDEF_H
>>  #define __ASM_PGTABLE_HWDEF_H
>>  
>> +/*
>> + * Number of page-table levels required to address 'va_bits' wide
>> + * address, without section mapping
>> + */
>> +#define ARM64_HW_PGTABLE_LEVELS(va_bits) (((va_bits) - 4) / (PAGE_SHIFT - 3))
> 
> I don't understand the '(va_bits) - 4' here, can you explain it (and add a
> comment to that effect) ?

I just had a chat with Catalin, who did shed some light on this.
It all has to do with rounding up. What you would like to have here is:

#define ARM64_HW_PGTABLE_LEVELS(va_bits) DIV_ROUND_UP(va_bits - PAGE_SHIFT, PAGE_SHIFT - 3)

where (va_bits - PAGE_SHIFT) is the total number of bits we deal
with during a page table walk, and (PAGE_SHIFT - 3) is the number
of bits we deal with per level.

The clue is in how DIV_ROUND_UP is written:

#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))

which gives you Suzuki's magic formula.

I'd vote for the DIV_ROUND_UP(), which will make things a lot more readable.

	M.
-- 
Jazz is not dead. It just smells funny...

WARNING: multiple messages have this Message-ID (diff)
From: marc.zyngier@arm.com (Marc Zyngier)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 03/15] arm64: Introduce helpers for page table levels
Date: Wed, 07 Oct 2015 10:26:14 +0100	[thread overview]
Message-ID: <5614E536.9040007@arm.com> (raw)
In-Reply-To: <20151007082652.GM9011@cbox>

On 07/10/15 09:26, Christoffer Dall wrote:
> Hi Suzuki,
> 
> On Tue, Sep 15, 2015 at 04:41:12PM +0100, Suzuki K. Poulose wrote:
>> From: "Suzuki K. Poulose" <suzuki.poulose@arm.com>
>>
>> Introduce helpers for finding the number of page table
>> levels required for a given VA width, shift for a particular
>> page table level.
>>
>> Convert the existing users to the new helpers. More users
>> to follow.
>>
>> Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
>> Cc: Mark Rutland <mark.rutland@arm.com>
>> Cc: Catalin Marinas <catalin.marinas@arm.com>
>> Cc: Will Deacon <will.deacon@arm.com>
>> Signed-off-by: Suzuki K. Poulose <suzuki.poulose@arm.com>
>> Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
>> Tested-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
>> ---
>>  arch/arm64/include/asm/pgtable-hwdef.h |   15 ++++++++++++---
>>  1 file changed, 12 insertions(+), 3 deletions(-)
>>
>> diff --git a/arch/arm64/include/asm/pgtable-hwdef.h b/arch/arm64/include/asm/pgtable-hwdef.h
>> index 24154b0..ce18389 100644
>> --- a/arch/arm64/include/asm/pgtable-hwdef.h
>> +++ b/arch/arm64/include/asm/pgtable-hwdef.h
>> @@ -16,13 +16,21 @@
>>  #ifndef __ASM_PGTABLE_HWDEF_H
>>  #define __ASM_PGTABLE_HWDEF_H
>>  
>> +/*
>> + * Number of page-table levels required to address 'va_bits' wide
>> + * address, without section mapping
>> + */
>> +#define ARM64_HW_PGTABLE_LEVELS(va_bits) (((va_bits) - 4) / (PAGE_SHIFT - 3))
> 
> I don't understand the '(va_bits) - 4' here, can you explain it (and add a
> comment to that effect) ?

I just had a chat with Catalin, who did shed some light on this.
It all has to do with rounding up. What you would like to have here is:

#define ARM64_HW_PGTABLE_LEVELS(va_bits) DIV_ROUND_UP(va_bits - PAGE_SHIFT, PAGE_SHIFT - 3)

where (va_bits - PAGE_SHIFT) is the total number of bits we deal
with during a page table walk, and (PAGE_SHIFT - 3) is the number
of bits we deal with per level.

The clue is in how DIV_ROUND_UP is written:

#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))

which gives you Suzuki's magic formula.

I'd vote for the DIV_ROUND_UP(), which will make things a lot more readable.

	M.
-- 
Jazz is not dead. It just smells funny...

WARNING: multiple messages have this Message-ID (diff)
From: Marc Zyngier <marc.zyngier@arm.com>
To: Christoffer Dall <christoffer.dall@linaro.org>,
	"Suzuki K. Poulose" <suzuki.poulose@arm.com>
Cc: linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org,
	ard.biesheuvel@linaro.org,
	Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will.deacon@arm.com>,
	linux-kernel@vger.kernel.org, kvmarm@lists.cs.columbia.edu
Subject: Re: [PATCH 03/15] arm64: Introduce helpers for page table levels
Date: Wed, 07 Oct 2015 10:26:14 +0100	[thread overview]
Message-ID: <5614E536.9040007@arm.com> (raw)
In-Reply-To: <20151007082652.GM9011@cbox>

On 07/10/15 09:26, Christoffer Dall wrote:
> Hi Suzuki,
> 
> On Tue, Sep 15, 2015 at 04:41:12PM +0100, Suzuki K. Poulose wrote:
>> From: "Suzuki K. Poulose" <suzuki.poulose@arm.com>
>>
>> Introduce helpers for finding the number of page table
>> levels required for a given VA width, shift for a particular
>> page table level.
>>
>> Convert the existing users to the new helpers. More users
>> to follow.
>>
>> Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
>> Cc: Mark Rutland <mark.rutland@arm.com>
>> Cc: Catalin Marinas <catalin.marinas@arm.com>
>> Cc: Will Deacon <will.deacon@arm.com>
>> Signed-off-by: Suzuki K. Poulose <suzuki.poulose@arm.com>
>> Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
>> Tested-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
>> ---
>>  arch/arm64/include/asm/pgtable-hwdef.h |   15 ++++++++++++---
>>  1 file changed, 12 insertions(+), 3 deletions(-)
>>
>> diff --git a/arch/arm64/include/asm/pgtable-hwdef.h b/arch/arm64/include/asm/pgtable-hwdef.h
>> index 24154b0..ce18389 100644
>> --- a/arch/arm64/include/asm/pgtable-hwdef.h
>> +++ b/arch/arm64/include/asm/pgtable-hwdef.h
>> @@ -16,13 +16,21 @@
>>  #ifndef __ASM_PGTABLE_HWDEF_H
>>  #define __ASM_PGTABLE_HWDEF_H
>>  
>> +/*
>> + * Number of page-table levels required to address 'va_bits' wide
>> + * address, without section mapping
>> + */
>> +#define ARM64_HW_PGTABLE_LEVELS(va_bits) (((va_bits) - 4) / (PAGE_SHIFT - 3))
> 
> I don't understand the '(va_bits) - 4' here, can you explain it (and add a
> comment to that effect) ?

I just had a chat with Catalin, who did shed some light on this.
It all has to do with rounding up. What you would like to have here is:

#define ARM64_HW_PGTABLE_LEVELS(va_bits) DIV_ROUND_UP(va_bits - PAGE_SHIFT, PAGE_SHIFT - 3)

where (va_bits - PAGE_SHIFT) is the total number of bits we deal
with during a page table walk, and (PAGE_SHIFT - 3) is the number
of bits we deal with per level.

The clue is in how DIV_ROUND_UP is written:

#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))

which gives you Suzuki's magic formula.

I'd vote for the DIV_ROUND_UP(), which will make things a lot more readable.

	M.
-- 
Jazz is not dead. It just smells funny...

  reply	other threads:[~2015-10-07  9:24 UTC|newest]

Thread overview: 121+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-15 15:41 [PATCHv2 00/15] arm64: 16K translation granule support Suzuki K. Poulose
2015-09-15 15:41 ` Suzuki K. Poulose
2015-09-15 15:41 ` Suzuki K. Poulose
2015-09-15 15:41 ` [PATCH 01/15] arm64: Move swapper pagetable definitions Suzuki K. Poulose
2015-09-15 15:41   ` Suzuki K. Poulose
2015-09-15 15:41   ` Suzuki K. Poulose
2015-09-15 15:41 ` [PATCH 02/15] arm64: Handle section maps for swapper/idmap Suzuki K. Poulose
2015-09-15 15:41   ` Suzuki K. Poulose
2015-09-15 15:41 ` [PATCH 03/15] arm64: Introduce helpers for page table levels Suzuki K. Poulose
2015-09-15 15:41   ` Suzuki K. Poulose
2015-09-15 15:41   ` Suzuki K. Poulose
2015-10-07  8:26   ` Christoffer Dall
2015-10-07  8:26     ` Christoffer Dall
2015-10-07  8:26     ` Christoffer Dall
2015-10-07  9:26     ` Marc Zyngier [this message]
2015-10-07  9:26       ` Marc Zyngier
2015-10-07  9:26       ` Marc Zyngier
2015-10-07  9:48       ` Suzuki K. Poulose
2015-10-07  9:48         ` Suzuki K. Poulose
2015-10-07  9:48         ` Suzuki K. Poulose
2015-10-08 14:45       ` Christoffer Dall
2015-10-08 14:45         ` Christoffer Dall
2015-10-08 14:45         ` Christoffer Dall
2015-10-08 17:22         ` Suzuki K. Poulose
2015-10-08 17:22           ` Suzuki K. Poulose
2015-10-08 17:28           ` Catalin Marinas
2015-10-08 17:28             ` Catalin Marinas
2015-10-09  9:22             ` Suzuki K. Poulose
2015-10-09  9:22               ` Suzuki K. Poulose
2015-10-09  9:22               ` Suzuki K. Poulose
2015-10-07  9:51     ` Suzuki K. Poulose
2015-10-07  9:51       ` Suzuki K. Poulose
2015-10-07  9:51       ` Suzuki K. Poulose
2015-09-15 15:41 ` [PATCH 04/15] arm64: Calculate size for idmap_pg_dir at compile time Suzuki K. Poulose
2015-09-15 15:41   ` Suzuki K. Poulose
2015-09-15 15:41   ` Suzuki K. Poulose
2015-09-15 15:41 ` [PATCH 05/15] arm64: Handle 4 level page table for swapper Suzuki K. Poulose
2015-09-15 15:41   ` Suzuki K. Poulose
2015-09-15 15:41 ` [PATCH 06/15] arm64: Clean config usages for page size Suzuki K. Poulose
2015-09-15 15:41   ` Suzuki K. Poulose
2015-09-15 15:41   ` Suzuki K. Poulose
2015-09-15 15:41 ` [PATCH 07/15] arm64: Kconfig: Fix help text about AArch32 support with 64K pages Suzuki K. Poulose
2015-09-15 15:41   ` Suzuki K. Poulose
2015-09-15 15:41   ` Suzuki K. Poulose
2015-09-15 15:41 ` [PATCH 08/15] arm64: Check for selected granule support Suzuki K. Poulose
2015-09-15 15:41   ` Suzuki K. Poulose
2015-09-15 15:41   ` Suzuki K. Poulose
2015-09-15 15:41 ` [PATCH 09/15] arm64: Add page size to the kernel image header Suzuki K. Poulose
2015-09-15 15:41   ` Suzuki K. Poulose
2015-09-15 15:41   ` Suzuki K. Poulose
2015-10-02 15:49   ` Catalin Marinas
2015-10-02 15:49     ` Catalin Marinas
2015-10-02 15:49     ` Catalin Marinas
2015-10-02 16:31     ` Catalin Marinas
2015-10-02 16:31       ` Catalin Marinas
2015-10-02 16:50       ` Marc Zyngier
2015-10-02 16:50         ` Marc Zyngier
2015-10-02 16:50         ` Marc Zyngier
2015-10-05 15:43         ` Christoffer Dall
2015-10-05 15:43           ` Christoffer Dall
2015-10-05 13:02     ` Suzuki K. Poulose
2015-10-05 13:02       ` Suzuki K. Poulose
2015-10-05 13:02       ` Suzuki K. Poulose
2015-10-05 13:22       ` Ard Biesheuvel
2015-10-05 13:22         ` Ard Biesheuvel
2015-10-05 13:22         ` Ard Biesheuvel
2015-10-10 17:22   ` Christoffer Dall
2015-10-10 17:22     ` Christoffer Dall
2015-10-10 17:22     ` Christoffer Dall
2015-09-15 15:41 ` [PATCH 10/15] arm64: kvm: Fix {V}TCR_EL2_TG0 mask Suzuki K. Poulose
2015-09-15 15:41   ` Suzuki K. Poulose
2015-09-15 15:41   ` Suzuki K. Poulose
2015-10-08 15:17   ` Christoffer Dall
2015-10-08 15:17     ` Christoffer Dall
2015-10-08 15:17     ` Christoffer Dall
2015-09-15 15:41 ` [PATCH 11/15] arm64: Cleanup VTCR_EL2 computation Suzuki K. Poulose
2015-09-15 15:41   ` Suzuki K. Poulose
2015-09-15 15:41   ` Suzuki K. Poulose
2015-10-07 10:11   ` Marc Zyngier
2015-10-07 10:11     ` Marc Zyngier
2015-10-07 10:23     ` Suzuki K. Poulose
2015-10-07 10:23       ` Suzuki K. Poulose
2015-10-07 10:23       ` Suzuki K. Poulose
2015-10-10 17:22   ` Christoffer Dall
2015-10-10 17:22     ` Christoffer Dall
2015-10-10 17:22     ` Christoffer Dall
2015-09-15 15:41 ` [PATCH 12/15] arm: kvm: Move fake PGD handling to arch specific files Suzuki K. Poulose
2015-09-15 15:41   ` Suzuki K. Poulose
2015-09-15 15:41   ` Suzuki K. Poulose
2015-10-07 10:23   ` Marc Zyngier
2015-10-07 10:23     ` Marc Zyngier
2015-10-07 10:23     ` Marc Zyngier
2015-10-10 17:22     ` Christoffer Dall
2015-10-10 17:22       ` Christoffer Dall
2015-10-10 17:22       ` Christoffer Dall
2015-09-15 15:41 ` [PATCH 13/15] arm64: kvm: Rewrite fake pgd handling Suzuki K. Poulose
2015-09-15 15:41   ` Suzuki K. Poulose
2015-09-15 15:41   ` Suzuki K. Poulose
2015-10-07 11:13   ` Marc Zyngier
2015-10-07 11:13     ` Marc Zyngier
2015-10-07 11:13     ` Marc Zyngier
2015-10-07 12:21     ` Suzuki K. Poulose
2015-10-07 12:21       ` Suzuki K. Poulose
2015-10-07 12:21       ` Suzuki K. Poulose
2015-10-10 14:52   ` Christoffer Dall
2015-10-10 14:52     ` Christoffer Dall
2015-10-10 14:52     ` Christoffer Dall
2015-10-12  9:55     ` Suzuki K. Poulose
2015-10-12  9:55       ` Suzuki K. Poulose
2015-10-13 15:39       ` Christoffer Dall
2015-10-13 15:39         ` Christoffer Dall
2015-10-13 15:39         ` Christoffer Dall
2015-10-13 16:04         ` Suzuki K. Poulose
2015-10-13 16:04           ` Suzuki K. Poulose
2015-10-13 16:04           ` Suzuki K. Poulose
2015-09-15 15:41 ` [PATCH 14/15] arm64: Add 16K page size support Suzuki K. Poulose
2015-09-15 15:41   ` Suzuki K. Poulose
2015-09-15 15:41   ` Suzuki K. Poulose
2015-09-15 15:41 ` [PATCH 15/15] arm64: 36 bit VA Suzuki K. Poulose
2015-09-15 15:41   ` Suzuki K. Poulose
2015-09-15 15:41   ` 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=5614E536.9040007@arm.com \
    --to=marc.zyngier@arm.com \
    --cc=ard.biesheuvel@linaro.org \
    --cc=catalin.marinas@arm.com \
    --cc=christoffer.dall@linaro.org \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --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 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.