Re: [HELP-NEEDED, PATCH 0/3] Do not loose dirty bit on THP pages

From: Aneesh Kumar K.V
Date: Wed Jun 14 2017 - 21:36:41 EST




On Wednesday 14 June 2017 10:30 PM, Vlastimil Babka wrote:
On 06/14/2017 06:55 PM, Will Deacon wrote:

May be we should relook at pmd PTE udpate interface. We really need an
interface that can update pmd entries such that we don't clear it in
between. IMHO, we can avoid the pmdp_invalidate() completely, if we can
switch from a pmd PTE entry to a pointer to PTE page (pgtable_t). We also
need this interface to avoid the madvise race fixed by

There's a good chance I'm not following your suggestion here, but it's
probably worth me pointing out that swizzling a page table entry from a
block mapping (e.g. a huge page mapped at the PMD level) to a table entry
(e.g. a pointer to a page of PTEs) can lead to all sorts of horrible
problems on ARM, including amalgamation of TLB entries and fatal aborts.

AFAIK some AMD x86_64 CPU's had the same problem and generated MCE's,
and on Intel there are some restrictions when you can do that. See the
large comment in __split_huge_pmd_locked().


I was wondering whether we can do pmdp_establish(pgtable); and document all quirks needed for that in the per arch implementation of pmdp_establish(). We could also then switch all the pmdp_clear/set_pmd_at() usage to pmdp_establish().

-aneesh