aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/mm
diff options
context:
space:
mode:
authorMartin Schwidefsky <schwidefsky@de.ibm.com>2013-08-16 07:31:40 -0400
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2013-08-22 06:20:09 -0400
commit5c474a1e2265c5156e6c63f87a7e99053039b8b9 (patch)
treea50c365553dbaf2c3d97c8a0dbca8c94cec34e9f /arch/s390/mm
parentb6bed093f489ef0a858e63eebcf5f2fb71ed3222 (diff)
s390/mm: introduce ptep_flush_lazy helper
Isolate the logic of IDTE vs. IPTE flushing of ptes in two functions, ptep_flush_lazy and __tlb_flush_mm_lazy. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/mm')
-rw-r--r--arch/s390/mm/pgtable.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/arch/s390/mm/pgtable.c b/arch/s390/mm/pgtable.c
index b9d35d63934e..befaea7003f7 100644
--- a/arch/s390/mm/pgtable.c
+++ b/arch/s390/mm/pgtable.c
@@ -1008,7 +1008,6 @@ void tlb_table_flush(struct mmu_gather *tlb)
1008 struct mmu_table_batch **batch = &tlb->batch; 1008 struct mmu_table_batch **batch = &tlb->batch;
1009 1009
1010 if (*batch) { 1010 if (*batch) {
1011 __tlb_flush_mm(tlb->mm);
1012 call_rcu_sched(&(*batch)->rcu, tlb_remove_table_rcu); 1011 call_rcu_sched(&(*batch)->rcu, tlb_remove_table_rcu);
1013 *batch = NULL; 1012 *batch = NULL;
1014 } 1013 }
@@ -1018,11 +1017,12 @@ void tlb_remove_table(struct mmu_gather *tlb, void *table)
1018{ 1017{
1019 struct mmu_table_batch **batch = &tlb->batch; 1018 struct mmu_table_batch **batch = &tlb->batch;
1020 1019
1020 tlb->mm->context.flush_mm = 1;
1021 if (*batch == NULL) { 1021 if (*batch == NULL) {
1022 *batch = (struct mmu_table_batch *) 1022 *batch = (struct mmu_table_batch *)
1023 __get_free_page(GFP_NOWAIT | __GFP_NOWARN); 1023 __get_free_page(GFP_NOWAIT | __GFP_NOWARN);
1024 if (*batch == NULL) { 1024 if (*batch == NULL) {
1025 __tlb_flush_mm(tlb->mm); 1025 __tlb_flush_mm_lazy(tlb->mm);
1026 tlb_remove_table_one(table); 1026 tlb_remove_table_one(table);
1027 return; 1027 return;
1028 } 1028 }
@@ -1030,7 +1030,7 @@ void tlb_remove_table(struct mmu_gather *tlb, void *table)
1030 } 1030 }
1031 (*batch)->tables[(*batch)->nr++] = table; 1031 (*batch)->tables[(*batch)->nr++] = table;
1032 if ((*batch)->nr == MAX_TABLE_BATCH) 1032 if ((*batch)->nr == MAX_TABLE_BATCH)
1033 tlb_table_flush(tlb); 1033 tlb_flush_mmu(tlb);
1034} 1034}
1035 1035
1036#ifdef CONFIG_TRANSPARENT_HUGEPAGE 1036#ifdef CONFIG_TRANSPARENT_HUGEPAGE