sparc64: Fix get_user_pages_fast() wrt. THP.
Mostly mirrors the s390 logic, as unlike x86 we don't need the SetPageReferenced() bits. On sparc64 we also lack a user/privileged bit in the huge PMDs. In order to make this work for THP and non-THP builds, some header file adjustments were necessary. Namely, provide the PMD_HUGE_* bit defines and the pmd_large() inline unconditionally rather than protected by TRANSPARENT_HUGEPAGE. Reported-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -71,7 +71,6 @@
|
||||
#define PMD_PADDR _AC(0xfffffffe,UL)
|
||||
#define PMD_PADDR_SHIFT _AC(11,UL)
|
||||
|
||||
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
||||
#define PMD_ISHUGE _AC(0x00000001,UL)
|
||||
|
||||
/* This is the PMD layout when PMD_ISHUGE is set. With 4MB huge
|
||||
@@ -86,7 +85,6 @@
|
||||
#define PMD_HUGE_ACCESSED _AC(0x00000080,UL)
|
||||
#define PMD_HUGE_EXEC _AC(0x00000040,UL)
|
||||
#define PMD_HUGE_SPLITTING _AC(0x00000020,UL)
|
||||
#endif
|
||||
|
||||
/* PGDs point to PMD tables which are 8K aligned. */
|
||||
#define PGD_PADDR _AC(0xfffffffc,UL)
|
||||
@@ -628,6 +626,12 @@ static inline unsigned long pte_special(pte_t pte)
|
||||
return pte_val(pte) & _PAGE_SPECIAL;
|
||||
}
|
||||
|
||||
static inline int pmd_large(pmd_t pmd)
|
||||
{
|
||||
return (pmd_val(pmd) & (PMD_ISHUGE | PMD_HUGE_PRESENT)) ==
|
||||
(PMD_ISHUGE | PMD_HUGE_PRESENT);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
||||
static inline int pmd_young(pmd_t pmd)
|
||||
{
|
||||
@@ -646,12 +650,6 @@ static inline unsigned long pmd_pfn(pmd_t pmd)
|
||||
return val >> (PAGE_SHIFT - PMD_PADDR_SHIFT);
|
||||
}
|
||||
|
||||
static inline int pmd_large(pmd_t pmd)
|
||||
{
|
||||
return (pmd_val(pmd) & (PMD_ISHUGE | PMD_HUGE_PRESENT)) ==
|
||||
(PMD_ISHUGE | PMD_HUGE_PRESENT);
|
||||
}
|
||||
|
||||
static inline int pmd_trans_splitting(pmd_t pmd)
|
||||
{
|
||||
return (pmd_val(pmd) & (PMD_ISHUGE|PMD_HUGE_SPLITTING)) ==
|
||||
|
Reference in New Issue
Block a user