aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/mm/pgtable.c
diff options
context:
space:
mode:
authorMartin Schwidefsky <schwidefsky@de.ibm.com>2014-07-24 05:03:41 -0400
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2014-08-01 08:55:05 -0400
commit152125b7a882df36a55a8eadbea6d0edf1461ee7 (patch)
tree247d93a58d6ff9ff9ccbe66840acaa240069d879 /arch/s390/mm/pgtable.c
parent55e4283c3eb1d850893f645dd695c9c75d5fa1fc (diff)
s390/mm: implement dirty bits for large segment table entries
The large segment table entry format has block of bits for the ACC/F values for the large page. These bits are valid only if another bit (AV bit 0x10000) of the segment table entry is set. The ACC/F bits do not have a meaning if the AV bit is off. This allows to put the THP splitting bit, the segment young bit and the new segment dirty bit into the ACC/F bits as long as the AV bit stays off. The dirty and young information is only available if the pmd is large. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/mm/pgtable.c')
-rw-r--r--arch/s390/mm/pgtable.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/arch/s390/mm/pgtable.c b/arch/s390/mm/pgtable.c
index f90ad8592b36..19daa53a3da4 100644
--- a/arch/s390/mm/pgtable.c
+++ b/arch/s390/mm/pgtable.c
@@ -1433,6 +1433,9 @@ int pmdp_set_access_flags(struct vm_area_struct *vma,
1433{ 1433{
1434 VM_BUG_ON(address & ~HPAGE_PMD_MASK); 1434 VM_BUG_ON(address & ~HPAGE_PMD_MASK);
1435 1435
1436 entry = pmd_mkyoung(entry);
1437 if (dirty)
1438 entry = pmd_mkdirty(entry);
1436 if (pmd_same(*pmdp, entry)) 1439 if (pmd_same(*pmdp, entry))
1437 return 0; 1440 return 0;
1438 pmdp_invalidate(vma, address, pmdp); 1441 pmdp_invalidate(vma, address, pmdp);