aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/cachetlb.txt9
-rw-r--r--arch/ia64/mm/tlb.c2
-rw-r--r--include/asm-parisc/tlbflush.h3
3 files changed, 4 insertions, 10 deletions
diff --git a/Documentation/cachetlb.txt b/Documentation/cachetlb.txt
index e132fb1163b0..7eb715e07eda 100644
--- a/Documentation/cachetlb.txt
+++ b/Documentation/cachetlb.txt
@@ -49,9 +49,6 @@ changes occur:
49 page table operations such as what happens during 49 page table operations such as what happens during
50 fork, and exec. 50 fork, and exec.
51 51
52 Platform developers note that generic code will always
53 invoke this interface without mm->page_table_lock held.
54
553) void flush_tlb_range(struct vm_area_struct *vma, 523) void flush_tlb_range(struct vm_area_struct *vma,
56 unsigned long start, unsigned long end) 53 unsigned long start, unsigned long end)
57 54
@@ -72,9 +69,6 @@ changes occur:
72 call flush_tlb_page (see below) for each entry which may be 69 call flush_tlb_page (see below) for each entry which may be
73 modified. 70 modified.
74 71
75 Platform developers note that generic code will always
76 invoke this interface with mm->page_table_lock held.
77
784) void flush_tlb_page(struct vm_area_struct *vma, unsigned long addr) 724) void flush_tlb_page(struct vm_area_struct *vma, unsigned long addr)
79 73
80 This time we need to remove the PAGE_SIZE sized translation 74 This time we need to remove the PAGE_SIZE sized translation
@@ -93,9 +87,6 @@ changes occur:
93 87
94 This is used primarily during fault processing. 88 This is used primarily during fault processing.
95 89
96 Platform developers note that generic code will always
97 invoke this interface with mm->page_table_lock held.
98
995) void flush_tlb_pgtables(struct mm_struct *mm, 905) void flush_tlb_pgtables(struct mm_struct *mm,
100 unsigned long start, unsigned long end) 91 unsigned long start, unsigned long end)
101 92
diff --git a/arch/ia64/mm/tlb.c b/arch/ia64/mm/tlb.c
index c93e0f2b5fea..c79a9b96d02b 100644
--- a/arch/ia64/mm/tlb.c
+++ b/arch/ia64/mm/tlb.c
@@ -158,10 +158,12 @@ flush_tlb_range (struct vm_area_struct *vma, unsigned long start, unsigned long
158# ifdef CONFIG_SMP 158# ifdef CONFIG_SMP
159 platform_global_tlb_purge(mm, start, end, nbits); 159 platform_global_tlb_purge(mm, start, end, nbits);
160# else 160# else
161 preempt_disable();
161 do { 162 do {
162 ia64_ptcl(start, (nbits<<2)); 163 ia64_ptcl(start, (nbits<<2));
163 start += (1UL << nbits); 164 start += (1UL << nbits);
164 } while (start < end); 165 } while (start < end);
166 preempt_enable();
165# endif 167# endif
166 168
167 ia64_srlz_i(); /* srlz.i implies srlz.d */ 169 ia64_srlz_i(); /* srlz.i implies srlz.d */
diff --git a/include/asm-parisc/tlbflush.h b/include/asm-parisc/tlbflush.h
index 84af4ab1fe51..e97aa8d1eff5 100644
--- a/include/asm-parisc/tlbflush.h
+++ b/include/asm-parisc/tlbflush.h
@@ -88,7 +88,7 @@ static inline void flush_tlb_range(struct vm_area_struct *vma,
88 if (npages >= 512) /* 2MB of space: arbitrary, should be tuned */ 88 if (npages >= 512) /* 2MB of space: arbitrary, should be tuned */
89 flush_tlb_all(); 89 flush_tlb_all();
90 else { 90 else {
91 91 preempt_disable();
92 mtsp(vma->vm_mm->context,1); 92 mtsp(vma->vm_mm->context,1);
93 purge_tlb_start(); 93 purge_tlb_start();
94 if (split_tlb) { 94 if (split_tlb) {
@@ -102,6 +102,7 @@ static inline void flush_tlb_range(struct vm_area_struct *vma,
102 pdtlb(start); 102 pdtlb(start);
103 start += PAGE_SIZE; 103 start += PAGE_SIZE;
104 } 104 }
105 preempt_enable();
105 } 106 }
106 purge_tlb_end(); 107 purge_tlb_end();
107 } 108 }