Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752528AbdFNWnX (ORCPT ); Wed, 14 Jun 2017 18:43:23 -0400 Received: from mail.kernel.org ([198.145.29.99]:49772 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752097AbdFNWnW (ORCPT ); Wed, 14 Jun 2017 18:43:22 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 64E44239B5 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=luto@kernel.org MIME-Version: 1.0 In-Reply-To: References: <039935bc914009103fdaa6f72f14980c19562de5.1497415951.git.luto@kernel.org> From: Andy Lutomirski Date: Wed, 14 Jun 2017 15:42:59 -0700 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v2 05/10] x86/mm: Rework lazy TLB mode and TLB freshness tracking To: Dave Hansen Cc: Andy Lutomirski , X86 ML , "linux-kernel@vger.kernel.org" , Borislav Petkov , Linus Torvalds , Andrew Morton , Mel Gorman , "linux-mm@kvack.org" , Nadav Amit , Rik van Riel , Arjan van de Ven , Peter Zijlstra , Andrew Banman , Mike Travis , Dimitri Sivanich , Juergen Gross , Boris Ostrovsky Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 956 Lines: 22 On Wed, Jun 14, 2017 at 3:33 PM, Dave Hansen wrote: > On 06/13/2017 09:56 PM, Andy Lutomirski wrote: >> - if (cpumask_test_cpu(cpu, &batch->cpumask)) >> + if (cpumask_test_cpu(cpu, &batch->cpumask)) { >> + local_irq_disable(); >> flush_tlb_func_local(&info, TLB_LOCAL_SHOOTDOWN); >> + local_irq_enable(); >> + } >> + > > Could you talk a little about why this needs to be local_irq_disable() > and not preempt_disable()? Is it about the case where somebody is > trying to call flush_tlb_func_*() from an interrupt handler? It's to prevent flush_tlb_func_local() and flush_tlb_func_remote() from being run concurrently, which would cause flush_tlb_func_common() to be reentered. Either we'd need to be very careful in flush_tlb_func_common() to avoid races if this happened, or we could just disable interrupts around flush_tlb_func_local(). The latter is fast and easy. --Andy