linux-mips
[Top] [All Lists]

Re: [PATCH RESEND] MIPS: Add local_flush_tlb_all_mm to clear all mm cont

To: Maksim Rayskiy <maksim.rayskiy@gmail.com>
Subject: Re: [PATCH RESEND] MIPS: Add local_flush_tlb_all_mm to clear all mm contexts on calling cpu
From: Sergei Shtylyov <sshtylyov@mvista.com>
Date: Wed, 29 Dec 2010 23:41:39 +0300
Cc: linux-mips <linux-mips@linux-mips.org>, "Kevin D. Kissell" <kevink@paralogos.com>, Ralf Baechle <ralf@linux-mips.org>
In-reply-to: <AANLkTi=_2aqFiB4Qgez8f-tiiqv19+VHDzX2TJ7jZ2Ha@mail.gmail.com>
Original-recipient: rfc822;linux-mips@linux-mips.org
References: <AANLkTi=_2aqFiB4Qgez8f-tiiqv19+VHDzX2TJ7jZ2Ha@mail.gmail.com>
Sender: linux-mips-bounce@linux-mips.org
User-agent: Thunderbird 2.0.0.21 (X11/20090320)
Hello.

Maksim Rayskiy wrote:

I hope this one does not get mangled.

   It seems OK.

The thing is I do not know how
to control it in gmail web client.

   Such remarks should follow the --- tear line.

From 9a03661a40407e14ee75295f5541f371f0a7cdda Mon Sep 17 00:00:00 2001
From: Maksim Rayskiy <maksim.rayskiy@gmail.com>
Date: Tue, 30 Nov 2010 11:34:31 -0800
Subject: [PATCH] MIPS: Add local_flush_tlb_all_mm to clear all mm
contexts on calling cpu

Don't include this header in the patch, as it will have to be hand edited out of it by the maintainer.

When hotplug removing a cpu, all mm context TLB entries must be cleared
to avoid ASID conflict when cpu is restarted.
New functions local_flush_tlb_all_mm() and all-cpu version
flush_tlb_all_mm() are added.
To function properly, local_flush_tlb_all_mm() must be called when
mm_cpumask for all
mm context on given cpu is cleared.

Signed-off-by: Maksim Rayskiy <maksim.rayskiy@gmail.com>
[...]

diff --git a/arch/mips/mm/tlb-r4k.c b/arch/mips/mm/tlb-r4k.c
index c618eed..5c03218 100644
--- a/arch/mips/mm/tlb-r4k.c
+++ b/arch/mips/mm/tlb-r4k.c
@@ -66,6 +66,18 @@ extern void build_tlb_refill_handler(void);

 #endif

+/* This function will clear all mm contexts on calling cpu
+ * To produce desired effect it must be called
+ * when mm_cpumask for all mm contexts is cleared
+ */
+void local_flush_tlb_all_mm(void)
+{
+       struct task_struct *p;

   An empty line wouldn't hurt here.

+       for_each_process(p)
+               if (p->mm)
+                       local_flush_tlb_mm(p->mm);
+}
+
 void local_flush_tlb_all(void)
 {
        unsigned long flags;

WBR, Sergei

<Prev in Thread] Current Thread [Next in Thread>