mirror of https://gitee.com/openkylin/linux.git
thp: add pmd_modify
Add pmd_modify() for use with mprotect() on huge pmds. Signed-off-by: Johannes Weiner <hannes@cmpxchg.org> Signed-off-by: Andrea Arcangeli <aarcange@redhat.com> Reviewed-by: Rik van Riel <riel@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
0ca1634d41
commit
c489f1257b
|
@ -325,6 +325,16 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
|
||||||
return __pte(val);
|
return __pte(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline pmd_t pmd_modify(pmd_t pmd, pgprot_t newprot)
|
||||||
|
{
|
||||||
|
pmdval_t val = pmd_val(pmd);
|
||||||
|
|
||||||
|
val &= _HPAGE_CHG_MASK;
|
||||||
|
val |= massage_pgprot(newprot) & ~_HPAGE_CHG_MASK;
|
||||||
|
|
||||||
|
return __pmd(val);
|
||||||
|
}
|
||||||
|
|
||||||
/* mprotect needs to preserve PAT bits when updating vm_page_prot */
|
/* mprotect needs to preserve PAT bits when updating vm_page_prot */
|
||||||
#define pgprot_modify pgprot_modify
|
#define pgprot_modify pgprot_modify
|
||||||
static inline pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot)
|
static inline pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot)
|
||||||
|
|
|
@ -72,6 +72,7 @@
|
||||||
/* Set of bits not changed in pte_modify */
|
/* Set of bits not changed in pte_modify */
|
||||||
#define _PAGE_CHG_MASK (PTE_PFN_MASK | _PAGE_PCD | _PAGE_PWT | \
|
#define _PAGE_CHG_MASK (PTE_PFN_MASK | _PAGE_PCD | _PAGE_PWT | \
|
||||||
_PAGE_SPECIAL | _PAGE_ACCESSED | _PAGE_DIRTY)
|
_PAGE_SPECIAL | _PAGE_ACCESSED | _PAGE_DIRTY)
|
||||||
|
#define _HPAGE_CHG_MASK (_PAGE_CHG_MASK | _PAGE_PSE)
|
||||||
|
|
||||||
#define _PAGE_CACHE_MASK (_PAGE_PCD | _PAGE_PWT)
|
#define _PAGE_CACHE_MASK (_PAGE_PCD | _PAGE_PWT)
|
||||||
#define _PAGE_CACHE_WB (0)
|
#define _PAGE_CACHE_WB (0)
|
||||||
|
|
Loading…
Reference in New Issue