Thread (50 messages) 50 messages, 7 authors, 2019-04-08

Re: [PATCH v2 1/3] arm64: mm: use appropriate ctors for page tables

From: Matthew Wilcox <willy@infradead.org>
Date: 2019-02-20 12:24:27
Also in: linux-arch, linux-mm, lkml

On Wed, Feb 20, 2019 at 03:57:59PM +0530, Anshuman Khandual wrote:
On 02/20/2019 03:58 AM, Yu Zhao wrote:
quoted
On Tue, Feb 19, 2019 at 11:47:12AM +0530, Anshuman Khandual wrote:
quoted
On 02/19/2019 11:02 AM, Yu Zhao wrote:
quoted
On Tue, Feb 19, 2019 at 09:51:01AM +0530, Anshuman Khandual wrote:
quoted
On 02/19/2019 04:43 AM, Yu Zhao wrote:
quoted
For pte page, use pgtable_page_ctor(); for pmd page, use
pgtable_pmd_page_ctor() if not folded; and for the rest (pud,
p4d and pgd), don't use any.
pgtable_page_ctor()/dtor() is not optional for any level page table page
as it determines the struct page state and zone statistics.
This is not true. pgtable_page_ctor() is only meant for user pte
page. The name isn't perfect (we named it this way before we had
split pmd page table lock, and never bothered to change it).

The commit cccd843f54be ("mm: mark pages in use for page tables")
clearly states so:
  Note that only pages currently accounted as NR_PAGETABLES are
  tracked as PageTable; this does not include pgd/p4d/pud/pmd pages.
I think the commit is the following one and it does say so. But what is
the rationale of tagging only PTE page as PageTable and updating the zone
stat but not doing so for higher level page table pages ? Are not they
used as page table pages ? Should not they count towards NR_PAGETABLE ?

1d40a5ea01d53251c ("mm: mark pages in use for page tables")
Well, I was just trying to clarify how the ctor is meant to be used.
The rational behind it is probably another topic.

For starters, the number of pmd/pud/p4d/pgd is at least two orders
of magnitude less than the number of pte, which makes them almost
negligible. And some archs use kmem for them, so it's infeasible to
SetPageTable on or account them in the way the ctor does on those
archs.
I understand the kmem cases which are definitely problematic and should
be fixed. IIRC there is a mechanism to custom init pages allocated for
slab cache with a ctor function which in turn can call pgtable_page_ctor().
But destructor helper support for slab has been dropped I guess.
You can't put a spinlock in the struct page if the page is allocated
through slab.  Slab uses basically all of struct page for its own
purposes.  I tried to make that clear with the new layout of struct
page where everything's in a union discriminated by what the page is
allocated for.


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help