[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <788180f7-88ae-c88d-1531-68febb462010@arm.com>
Date: Wed, 31 Jul 2019 12:18:34 +0100
From: Steven Price <steven.price@....com>
To: Sven Schnelle <svens@...ckframe.org>
Cc: Mark Rutland <Mark.Rutland@....com>,
Peter Zijlstra <peterz@...radead.org>,
Catalin Marinas <catalin.marinas@....com>,
Dave Hansen <dave.hansen@...ux.intel.com>, linux-mm@...ck.org,
"H. Peter Anvin" <hpa@...or.com>, Will Deacon <will@...nel.org>,
"Liang, Kan" <kan.liang@...ux.intel.com>,
Helge Deller <deller@....de>, x86@...nel.org,
Ingo Molnar <mingo@...hat.com>, Arnd Bergmann <arnd@...db.de>,
Anshuman Khandual <anshuman.khandual@....com>,
Jérôme Glisse <jglisse@...hat.com>,
Borislav Petkov <bp@...en8.de>,
Andy Lutomirski <luto@...nel.org>,
Thomas Gleixner <tglx@...utronix.de>,
linux-arm-kernel@...ts.infradead.org,
Ard Biesheuvel <ard.biesheuvel@...aro.org>,
linux-kernel@...r.kernel.org, James Morse <james.morse@....com>,
Andrew Morton <akpm@...ux-foundation.org>
Subject: Re: [PATCH v9 00/21] Generic page walk and ptdump
On 31/07/2019 10:27, Sven Schnelle wrote:
> Hi Steven,
>
> On Mon, Jul 29, 2019 at 12:32:25PM +0100, Steven Price wrote:
>>
>> parisc is more interesting and I'm not sure if this is necessarily
>> correct. I originally proposed a patch with the line "For parisc, we
>> don't support large pages, so add stubs returning 0" which got Acked by
>> Helge Deller. However going back to look at that again I see there was a
>> follow up thread[2] which possibly suggests I was wrong?
>
> I just started a week ago implementing ptdump for PA-RISC. Didn't notice that
> you're working on making it generic, which is nice. I'll adjust my code
> to use the infrastructure you're currently developing.
Great, hopefully it will make it easier to implement.
>> Can anyone shed some light on whether parisc does support leaf entries
>> of the page table tree at a higher than the normal depth?
>>
>> [1] https://lkml.org/lkml/2019/2/27/572
>> [2] https://lkml.org/lkml/2019/3/5/610
>
> My understanding is that PA-RISC only has leaf entries on PTE level.
Yes, that's my current interpretation.
>> The intention is that the page table walker would be available for all
>> architectures so that it can be used in any generic code - PTDUMP simply
>> seemed like a good place to start.
>>
>>> Now that pmd_leaf() and pud_leaf() are getting used in walk_page_range() these
>>> functions need to be defined on all arch irrespective if they use PTDUMP or not
>>> or otherwise just define it for archs which need them now for sure i.e x86 and
>>> arm64 (which are moving to new generic PTDUMP framework). Other archs can
>>> implement these later.
>
> I'll take care of the PA-RISC part - for 32 bit your generic code works, for 64Bit
> i need to learn a bit more about the following hack:
>
> arch/parisc/include/asm/pgalloc.h:15
> /* Allocate the top level pgd (page directory)
> *
> * Here (for 64 bit kernels) we implement a Hybrid L2/L3 scheme: we
> * allocate the first pmd adjacent to the pgd. This means that we can
> * subtract a constant offset to get to it. The pmd and pgd sizes are
> * arranged so that a single pmd covers 4GB (giving a full 64-bit
> * process access to 8TB) so our lookups are effectively L2 for the
> * first 4GB of the kernel (i.e. for all ILP32 processes and all the
> * kernel for machines with under 4GB of memory)
> */
As far as I understand this, the page table tree isn't any different
here. It's just that there's a PMD which is allocated at the same time
as the PGD. The PGD's first entry then points to the PMD (P4D/PUD are
folded). There are then some tricks which means that for addresses < 4GB
the PGD stage can be skipped because you already know where the relevant
PMD is.
However, nothing should stop a simple walk from PGD down - it's just an
optimisation to remove the pointer fetch from PGD in the usual case for
accesses < 4GB.
> I see that your change clear P?D entries when p?d_bad() returns true, which - i think -
> would be the case with the PA-RISC implementation.
The only case where p?d_bad() is checked is at the PGD and P4D levels
(unless I'm missing something?). I have to admit I'm a little unsure
about this. Basically the code as it stands doesn't allow leaf entries
at PGD or P4D. I'm not aware of any architectures that do this though.
Thanks,
Steve
Powered by blists - more mailing lists