Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934868Ab0GOWQW (ORCPT ); Thu, 15 Jul 2010 18:16:22 -0400 Received: from smtp1.linux-foundation.org ([140.211.169.13]:44596 "EHLO smtp1.linux-foundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934833Ab0GOWQV (ORCPT ); Thu, 15 Jul 2010 18:16:21 -0400 MIME-Version: 1.0 In-Reply-To: <20100715220117.GA1499@Krystal> References: <20100714203940.GC22096@Krystal> <20100714222115.GA30122@Krystal> <20100715183153.GA9276@Krystal> <20100715220117.GA1499@Krystal> Date: Thu, 15 Jul 2010 15:16:12 -0700 Message-ID: Subject: Re: [patch 1/2] x86_64 page fault NMI-safe From: Linus Torvalds To: Mathieu Desnoyers Cc: LKML , Andrew Morton , Ingo Molnar , Peter Zijlstra , Steven Rostedt , Steven Rostedt , Frederic Weisbecker , Thomas Gleixner , Christoph Hellwig , Li Zefan , Lai Jiangshan , Johannes Berg , Masami Hiramatsu , Arnaldo Carvalho de Melo , Tom Zanussi , KOSAKI Motohiro , Andi Kleen , "H. Peter Anvin" , Jeremy Fitzhardinge , "Frank Ch. Eigler" , Tejun Heo Content-Type: text/plain; charset=ISO-8859-1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1355 Lines: 31 On Thu, Jul 15, 2010 at 3:01 PM, Mathieu Desnoyers wrote: > > . NMI exit code > and fake NMI entry are made reentrant with respect to NMI handler interruption > by testing, at the very beginning of the NMI handler, if a NMI is nested over > the whole nmi_atomic .. nmi_atomic_end code region. That is totally bogus. The NMI can be nested by exceptions and function calls - the whole _point_ of this thing. So testing "rip" for anything else than the specific final "iret" is meaningless. You will be in an NMI region regardless of what rip is. > This code assumes NMIs have a separate stack. It also needs to be made per-cpu (and the flags be per-cpu). Then you could in fact possibly test the stack pointer for whether it is in the NMI stack area, and use the value of %rsp itself as the flag. So you could avoid the flag entirely. Because testing %rsp is valid - testing %rip is not. That would also avoid the race, because %rsp (as a flag) now gets cleared atomically by the "iret". So that might actually solve things. Linus -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/