aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/include
diff options
context:
space:
mode:
Diffstat (limited to 'arch/s390/include')
-rw-r--r--arch/s390/include/asm/pgtable.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h
index 6bd7d7483017..c3f0775e71f1 100644
--- a/arch/s390/include/asm/pgtable.h
+++ b/arch/s390/include/asm/pgtable.h
@@ -347,6 +347,8 @@ extern struct page *vmemmap;
347 347
348#define _SEGMENT_ENTRY_LARGE 0x400 /* STE-format control, large page */ 348#define _SEGMENT_ENTRY_LARGE 0x400 /* STE-format control, large page */
349#define _SEGMENT_ENTRY_CO 0x100 /* change-recording override */ 349#define _SEGMENT_ENTRY_CO 0x100 /* change-recording override */
350#define _SEGMENT_ENTRY_SPLIT_BIT 0 /* THP splitting bit number */
351#define _SEGMENT_ENTRY_SPLIT (1UL << _SEGMENT_ENTRY_SPLIT_BIT)
350 352
351/* Page status table bits for virtualization */ 353/* Page status table bits for virtualization */
352#define RCP_ACC_BITS 0xf000000000000000UL 354#define RCP_ACC_BITS 0xf000000000000000UL
@@ -506,6 +508,10 @@ static inline int pmd_bad(pmd_t pmd)
506 return (pmd_val(pmd) & mask) != _SEGMENT_ENTRY; 508 return (pmd_val(pmd) & mask) != _SEGMENT_ENTRY;
507} 509}
508 510
511#define __HAVE_ARCH_PMDP_SPLITTING_FLUSH
512extern void pmdp_splitting_flush(struct vm_area_struct *vma,
513 unsigned long addr, pmd_t *pmdp);
514
509static inline int pte_none(pte_t pte) 515static inline int pte_none(pte_t pte)
510{ 516{
511 return (pte_val(pte) & _PAGE_INVALID) && !(pte_val(pte) & _PAGE_SWT); 517 return (pte_val(pte) & _PAGE_INVALID) && !(pte_val(pte) & _PAGE_SWT);
@@ -1159,6 +1165,13 @@ static inline pmd_t *pmd_offset(pud_t *pud, unsigned long address)
1159#define pte_offset_map(pmd, address) pte_offset_kernel(pmd, address) 1165#define pte_offset_map(pmd, address) pte_offset_kernel(pmd, address)
1160#define pte_unmap(pte) do { } while (0) 1166#define pte_unmap(pte) do { } while (0)
1161 1167
1168#ifdef CONFIG_TRANSPARENT_HUGEPAGE
1169static inline int pmd_trans_splitting(pmd_t pmd)
1170{
1171 return pmd_val(pmd) & _SEGMENT_ENTRY_SPLIT;
1172}
1173#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
1174
1162/* 1175/*
1163 * 31 bit swap entry format: 1176 * 31 bit swap entry format:
1164 * A page-table entry has some bits we have to treat in a special way. 1177 * A page-table entry has some bits we have to treat in a special way.