* [PATCH] Avoid double flush in do_tlb_flush_all()
@ 2008-08-30 10:20 Andi Kleen
2008-08-30 16:01 ` Arjan van de Ven
0 siblings, 1 reply; 2+ messages in thread
From: Andi Kleen @ 2008-08-30 10:20 UTC (permalink / raw)
To: x86, linux-kernel
Avoid double flush in do_tlb_flush_all()
leave_mm already flushes the TLBs, so don't need to flush directly before that
in do_flush_tlb_all(). Avoid the double flush.
Pointed out by Rainer Weikusat
Signed-off-by: Andi Kleen <ak@linux.intel.com>
---
arch/x86/kernel/tlb_32.c | 5 ++---
arch/x86/kernel/tlb_64.c | 7 +++----
2 files changed, 5 insertions(+), 7 deletions(-)
Index: linux-2.6.27-rc4-misc/arch/x86/kernel/tlb_32.c
===================================================================
--- linux-2.6.27-rc4-misc.orig/arch/x86/kernel/tlb_32.c
+++ linux-2.6.27-rc4-misc/arch/x86/kernel/tlb_32.c
@@ -229,11 +229,10 @@ EXPORT_SYMBOL(flush_tlb_page);
static void do_flush_tlb_all(void *info)
{
- unsigned long cpu = smp_processor_id();
-
- __flush_tlb_all();
if (per_cpu(cpu_tlbstate, cpu).state == TLBSTATE_LAZY)
leave_mm(cpu);
+ else
+ __flush_tlb_all(smp_processor_id());
}
void flush_tlb_all(void)
Index: linux-2.6.27-rc4-misc/arch/x86/kernel/tlb_64.c
===================================================================
--- linux-2.6.27-rc4-misc.orig/arch/x86/kernel/tlb_64.c
+++ linux-2.6.27-rc4-misc/arch/x86/kernel/tlb_64.c
@@ -266,11 +266,10 @@ void flush_tlb_page(struct vm_area_struc
static void do_flush_tlb_all(void *info)
{
- unsigned long cpu = smp_processor_id();
-
- __flush_tlb_all();
if (read_pda(mmu_state) == TLBSTATE_LAZY)
- leave_mm(cpu);
+ leave_mm(smp_processor_id());
+ else
+ __flush_tlb_all();
}
void flush_tlb_all(void)
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] Avoid double flush in do_tlb_flush_all()
2008-08-30 10:20 [PATCH] Avoid double flush in do_tlb_flush_all() Andi Kleen
@ 2008-08-30 16:01 ` Arjan van de Ven
0 siblings, 0 replies; 2+ messages in thread
From: Arjan van de Ven @ 2008-08-30 16:01 UTC (permalink / raw)
To: Andi Kleen; +Cc: x86, linux-kernel
On Sat, 30 Aug 2008 12:20:12 +0200
Andi Kleen <andi@firstfloor.org> wrote:
> Avoid double flush in do_tlb_flush_all()
>
> leave_mm already flushes the TLBs, so don't need to flush directly
> before that in do_flush_tlb_all(). Avoid the double flush.
but... the leave_mm won't flush the global tlbs, while
__flush_tlb_all() does, right?
sounds like we do need the behavior
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2008-08-30 16:02 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-08-30 10:20 [PATCH] Avoid double flush in do_tlb_flush_all() Andi Kleen
2008-08-30 16:01 ` Arjan van de Ven
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.