Aneesh Kumar K.V 891121e6c0 powerpc/mm: Differentiate between hugetlb and THP during page walk
We need to properly identify whether a hugepage is an explicit or
a transparent hugepage in follow_huge_addr(). We used to depend
on hugepage shift argument to do that. But in some case that can
result in wrong results. For ex:

On finding a transparent hugepage we set hugepage shift to PMD_SHIFT.
But we can end up clearing the thp pte, via pmdp_huge_get_and_clear.
We do prevent reusing the pfn page via the usage of
kick_all_cpus_sync(). But that happens after we updated the pte to 0.
Hence in follow_huge_addr() we can find hugepage shift set, but transparent
huge page check fail for a thp pte.

NOTE: We fixed a variant of this race against thp split in commit
691e95fd7396905a38d98919e9c150dbc3ea21a3
("powerpc/mm/thp: Make page table walk safe against thp split/collapse")

Without this patch, we may hit the BUG_ON(flags & FOLL_GET) in
follow_page_mask occasionally.

In the long term, we may want to switch ppc64 64k page size config to
enable CONFIG_ARCH_WANT_GENERAL_HUGETLB

Reported-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
2015-10-12 15:30:09 +11:00
..
2015-09-10 16:42:49 -07:00
2014-04-18 14:20:41 +02:00
2014-11-27 09:32:58 +11:00
2014-12-11 17:48:14 -08:00
2014-08-13 15:13:42 +10:00
2014-09-25 23:14:46 +10:00
2014-11-03 12:12:32 +11:00
2014-11-03 12:12:32 +11:00
2015-08-06 15:10:20 +10:00
2015-02-17 14:34:51 -08:00
2015-03-24 13:15:52 +11:00
2014-12-11 17:48:14 -08:00
2015-09-08 14:35:59 -07:00
2015-09-03 16:41:38 -07:00
2015-07-30 14:34:44 +10:00
2014-09-25 23:14:41 +10:00
2015-09-03 16:41:38 -07:00
2014-08-06 13:04:32 +02:00
2015-04-07 17:15:13 +10:00
2015-06-24 17:49:38 -07:00
2015-05-14 16:59:21 +10:00