diff options
author | Ingo Molnar <mingo@kernel.org> | 2016-04-19 04:38:52 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2016-04-19 04:38:52 -0400 |
commit | 6666ea558b1f4134291c15ac59366f69c2d1f321 (patch) | |
tree | 99e4204b51e69a12721123d3bb1912f6ca0a2726 /arch/x86/mm | |
parent | 91ed140d6c1e168b11bbbddac4f6066f40a0c6b5 (diff) | |
parent | c3b46c73264b03000d1e18b22f5caf63332547c9 (diff) |
Merge tag 'v4.6-rc4' into x86/asm, to pick up fixes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'arch/x86/mm')
-rw-r--r-- | arch/x86/mm/tlb.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c index 8f4cc3dfac32..fe9b9f776361 100644 --- a/arch/x86/mm/tlb.c +++ b/arch/x86/mm/tlb.c | |||
@@ -104,10 +104,8 @@ static void flush_tlb_func(void *info) | |||
104 | 104 | ||
105 | inc_irq_stat(irq_tlb_count); | 105 | inc_irq_stat(irq_tlb_count); |
106 | 106 | ||
107 | if (f->flush_mm != this_cpu_read(cpu_tlbstate.active_mm)) | 107 | if (f->flush_mm && f->flush_mm != this_cpu_read(cpu_tlbstate.active_mm)) |
108 | return; | 108 | return; |
109 | if (!f->flush_end) | ||
110 | f->flush_end = f->flush_start + PAGE_SIZE; | ||
111 | 109 | ||
112 | count_vm_tlb_event(NR_TLB_REMOTE_FLUSH_RECEIVED); | 110 | count_vm_tlb_event(NR_TLB_REMOTE_FLUSH_RECEIVED); |
113 | if (this_cpu_read(cpu_tlbstate.state) == TLBSTATE_OK) { | 111 | if (this_cpu_read(cpu_tlbstate.state) == TLBSTATE_OK) { |
@@ -135,12 +133,20 @@ void native_flush_tlb_others(const struct cpumask *cpumask, | |||
135 | unsigned long end) | 133 | unsigned long end) |
136 | { | 134 | { |
137 | struct flush_tlb_info info; | 135 | struct flush_tlb_info info; |
136 | |||
137 | if (end == 0) | ||
138 | end = start + PAGE_SIZE; | ||
138 | info.flush_mm = mm; | 139 | info.flush_mm = mm; |
139 | info.flush_start = start; | 140 | info.flush_start = start; |
140 | info.flush_end = end; | 141 | info.flush_end = end; |
141 | 142 | ||
142 | count_vm_tlb_event(NR_TLB_REMOTE_FLUSH); | 143 | count_vm_tlb_event(NR_TLB_REMOTE_FLUSH); |
143 | trace_tlb_flush(TLB_REMOTE_SEND_IPI, end - start); | 144 | if (end == TLB_FLUSH_ALL) |
145 | trace_tlb_flush(TLB_REMOTE_SEND_IPI, TLB_FLUSH_ALL); | ||
146 | else | ||
147 | trace_tlb_flush(TLB_REMOTE_SEND_IPI, | ||
148 | (end - start) >> PAGE_SHIFT); | ||
149 | |||
144 | if (is_uv_system()) { | 150 | if (is_uv_system()) { |
145 | unsigned int cpu; | 151 | unsigned int cpu; |
146 | 152 | ||