aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390
diff options
context:
space:
mode:
authorMartin Schwidefsky <schwidefsky@de.ibm.com>2013-07-19 04:31:55 -0400
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2013-08-22 06:20:06 -0400
commita055f66a3a099e2c886a53421405f98683e94b2b (patch)
tree39eb742a6ae54fce3c14a6a9dc73db476d54bf81 /arch/s390
parente509861105a3c1425f3f929bd631f88340b499bf (diff)
s390/pgtable: skip pgste updates on full flush
On process exit there is no more need for the pgste information. Skip the expensive storage key operations which should speed up termination of KVM processes. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390')
-rw-r--r--arch/s390/include/asm/pgtable.h7
1 files changed, 3 insertions, 4 deletions
diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h
index b09c00b5cfa2..b59b44badae9 100644
--- a/arch/s390/include/asm/pgtable.h
+++ b/arch/s390/include/asm/pgtable.h
@@ -1144,10 +1144,9 @@ static inline pte_t ptep_get_and_clear_full(struct mm_struct *mm,
1144 pgste_t pgste; 1144 pgste_t pgste;
1145 pte_t pte; 1145 pte_t pte;
1146 1146
1147 if (mm_has_pgste(mm)) { 1147 if (!full && mm_has_pgste(mm)) {
1148 pgste = pgste_get_lock(ptep); 1148 pgste = pgste_get_lock(ptep);
1149 if (!full) 1149 pgste = pgste_ipte_notify(mm, address, ptep, pgste);
1150 pgste = pgste_ipte_notify(mm, address, ptep, pgste);
1151 } 1150 }
1152 1151
1153 pte = *ptep; 1152 pte = *ptep;
@@ -1155,7 +1154,7 @@ static inline pte_t ptep_get_and_clear_full(struct mm_struct *mm,
1155 __ptep_ipte(address, ptep); 1154 __ptep_ipte(address, ptep);
1156 pte_val(*ptep) = _PAGE_INVALID; 1155 pte_val(*ptep) = _PAGE_INVALID;
1157 1156
1158 if (mm_has_pgste(mm)) { 1157 if (!full && mm_has_pgste(mm)) {
1159 pgste = pgste_update_all(&pte, pgste); 1158 pgste = pgste_update_all(&pte, pgste);
1160 pgste_set_unlock(ptep, pgste); 1159 pgste_set_unlock(ptep, pgste);
1161 } 1160 }