diff options
author | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2014-07-24 05:03:41 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2014-08-01 08:55:05 -0400 |
commit | 152125b7a882df36a55a8eadbea6d0edf1461ee7 (patch) | |
tree | 247d93a58d6ff9ff9ccbe66840acaa240069d879 /arch/s390/mm/pgtable.c | |
parent | 55e4283c3eb1d850893f645dd695c9c75d5fa1fc (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.c | 3 |
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); |