diff options
author | Christian Borntraeger <borntraeger@de.ibm.com> | 2013-06-05 03:22:33 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2013-06-05 11:36:20 -0400 |
commit | 3a82603be4f5523ce21dd468a323aa36ff845f6d (patch) | |
tree | 3b73b3c0bcdbadc30448f69705eac93be19444fc /arch/s390/include/asm | |
parent | 9cc5c206d9b44b7763aab3082a5be72c78a3ef7a (diff) |
s390/pgtable: Save pgste during modify_prot_start/commit
In modify_prot_start we update the pgste value but never store it back
into the original location. Lets save the calculated result, since
modify_prot_commit will use the value of the pgste.
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/include/asm')
-rw-r--r-- | arch/s390/include/asm/pgtable.h | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h index 391e592356d0..f9a0a70dc936 100644 --- a/arch/s390/include/asm/pgtable.h +++ b/arch/s390/include/asm/pgtable.h | |||
@@ -640,6 +640,13 @@ static inline void pgste_set_unlock(pte_t *ptep, pgste_t pgste) | |||
640 | #endif | 640 | #endif |
641 | } | 641 | } |
642 | 642 | ||
643 | static inline void pgste_set(pte_t *ptep, pgste_t pgste) | ||
644 | { | ||
645 | #ifdef CONFIG_PGSTE | ||
646 | *(pgste_t *)(ptep + PTRS_PER_PTE) = pgste; | ||
647 | #endif | ||
648 | } | ||
649 | |||
643 | static inline pgste_t pgste_update_all(pte_t *ptep, pgste_t pgste) | 650 | static inline pgste_t pgste_update_all(pte_t *ptep, pgste_t pgste) |
644 | { | 651 | { |
645 | #ifdef CONFIG_PGSTE | 652 | #ifdef CONFIG_PGSTE |
@@ -1101,8 +1108,10 @@ static inline pte_t ptep_modify_prot_start(struct mm_struct *mm, | |||
1101 | if (!mm_exclusive(mm)) | 1108 | if (!mm_exclusive(mm)) |
1102 | __ptep_ipte(address, ptep); | 1109 | __ptep_ipte(address, ptep); |
1103 | 1110 | ||
1104 | if (mm_has_pgste(mm)) | 1111 | if (mm_has_pgste(mm)) { |
1105 | pgste = pgste_update_all(&pte, pgste); | 1112 | pgste = pgste_update_all(&pte, pgste); |
1113 | pgste_set(ptep, pgste); | ||
1114 | } | ||
1106 | return pte; | 1115 | return pte; |
1107 | } | 1116 | } |
1108 | 1117 | ||