[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1495762747.29205.63.camel@redhat.com>
Date: Thu, 25 May 2017 21:39:07 -0400
From: Rik van Riel <riel@...hat.com>
To: Andy Lutomirski <luto@...nel.org>, X86 ML <x86@...nel.org>
Cc: "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
Borislav Petkov <bpetkov@...e.de>,
Linus Torvalds <torvalds@...ux-foundation.org>,
Andrew Morton <akpm@...ux-foundation.org>,
Mel Gorman <mgorman@...e.de>,
"linux-mm@...ck.org" <linux-mm@...ck.org>,
Nadav Amit <nadav.amit@...il.com>,
Dave Hansen <dave.hansen@...el.com>,
Nadav Amit <namit@...are.com>, Michal Hocko <mhocko@...e.com>,
Arjan van de Ven <arjan@...ux.intel.com>
Subject: Re: [PATCH v3 2/8] x86/mm: Change the leave_mm() condition for
local TLB flushes
On Thu, 2017-05-25 at 17:47 -0700, Andy Lutomirski wrote:
>
> +++ b/arch/x86/mm/tlb.c
> @@ -311,7 +311,7 @@ void flush_tlb_mm_range(struct mm_struct *mm,
> unsigned long start,
> goto out;
> }
>
> - if (!current->mm) {
> + if (this_cpu_read(cpu_tlbstate.state) != TLBSTATE_OK) {
> leave_mm(smp_processor_id());
Unless -mm changed leave_mm (I did not check), this
is not quite correct yet.
The reason is leave_mm (at least in the latest Linus
tree) ignores the cpu argument for one of its checks.
You should probably fix that in an earlier patch,
assuming you haven't already done so in -mm.
void leave_mm(int cpu)
{
struct mm_struct *active_mm =
this_cpu_read(cpu_tlbstate.active_mm);
if (this_cpu_read(cpu_tlbstate.state) == TLBSTATE_OK)
BUG();
if (cpumask_test_cpu(cpu, mm_cpumask(active_mm))) {
cpumask_clear_cpu(cpu, mm_cpumask(active_mm));
load_cr3(swapper_pg_dir);
Powered by blists - more mailing lists