Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752783AbdFUJWw (ORCPT ); Wed, 21 Jun 2017 05:22:52 -0400 Received: from Galois.linutronix.de ([146.0.238.70]:48444 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752748AbdFUJWv (ORCPT ); Wed, 21 Jun 2017 05:22:51 -0400 Date: Wed, 21 Jun 2017 11:22:36 +0200 (CEST) From: Thomas Gleixner To: Andy Lutomirski cc: x86@kernel.org, linux-kernel@vger.kernel.org, Borislav Petkov , Linus Torvalds , Andrew Morton , Mel Gorman , "linux-mm@kvack.org" , Nadav Amit , Rik van Riel , Dave Hansen , Arjan van de Ven , Peter Zijlstra Subject: Re: [PATCH v3 07/11] x86/mm: Stop calling leave_mm() in idle code In-Reply-To: <2b3572123ab0d0fb9a9b82dc0deee8a33eeac51f.1498022414.git.luto@kernel.org> Message-ID: References: <2b3572123ab0d0fb9a9b82dc0deee8a33eeac51f.1498022414.git.luto@kernel.org> User-Agent: Alpine 2.20 (DEB 67 2015-01-07) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1319 Lines: 30 On Tue, 20 Jun 2017, Andy Lutomirski wrote: > diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c > index 216d7ec88c0c..2ae43f59091d 100644 > --- a/drivers/idle/intel_idle.c > +++ b/drivers/idle/intel_idle.c > @@ -912,16 +912,15 @@ static __cpuidle int intel_idle(struct cpuidle_device *dev, > struct cpuidle_state *state = &drv->states[index]; > unsigned long eax = flg2MWAIT(state->flags); > unsigned int cstate; > - int cpu = smp_processor_id(); > > cstate = (((eax) >> MWAIT_SUBSTATE_SIZE) & MWAIT_CSTATE_MASK) + 1; > > /* > - * leave_mm() to avoid costly and often unnecessary wakeups > - * for flushing the user TLB's associated with the active mm. > + * NB: if CPUIDLE_FLAG_TLB_FLUSHED is set, this idle transition > + * will probably flush the TLB. It's not guaranteed to flush > + * the TLB, though, so it's not clear that we can do anything > + * useful with this knowledge. So my understanding here is: The C-state transition might flush the TLB, when cstate->flags has CPUIDLE_FLAG_TLB_FLUSHED set. The idle transition already took the CPU out of the set of CPUs which are remotely flushed, so the knowledge about this potential flush is not useful for the kernels view of the TLB state. Reviewed-by: Thomas Gleixner