Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934931Ab0GOWr7 (ORCPT ); Thu, 15 Jul 2010 18:47:59 -0400 Received: from terminus.zytor.com ([198.137.202.10]:50837 "EHLO mail.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934838Ab0GOWr5 (ORCPT ); Thu, 15 Jul 2010 18:47:57 -0400 Message-ID: <4C3F8FD5.9080203@zytor.com> Date: Thu, 15 Jul 2010 15:46:45 -0700 From: "H. Peter Anvin" User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.10) Gecko/20100621 Fedora/3.0.5-1.fc13 Thunderbird/3.0.5 MIME-Version: 1.0 To: Linus Torvalds CC: Mathieu Desnoyers , 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 , Jeremy Fitzhardinge , "Frank Ch. Eigler" , Tejun Heo Subject: Re: [patch 1/2] x86_64 page fault NMI-safe References: <20100714203940.GC22096@Krystal> <20100714222115.GA30122@Krystal> <20100715183153.GA9276@Krystal> <20100715220117.GA1499@Krystal> In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1692 Lines: 41 On 07/15/2010 03:26 PM, Linus Torvalds wrote: > On Thu, Jul 15, 2010 at 3:16 PM, Linus Torvalds > wrote: >> >> 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. > > Hmm. So on x86-32, it's easy: if the NMI is nested, you can literally > look at the current %rsp value, and see if it's within the NMI stack > region. > > But on x86-64, due to IST, you need to look at the saved-rsp value on > the stack, since the %rsp always gets reset to the NMI stack region > regardless of where it was before. > > Why do we force IST use for NMI, btw? Maybe we shouldn't, and just use > the normal kernel stack mechanisms? > The reasons for using TSS (32 bits) or IST (64 bits) are: concern about the size of the regular kernel stack, and a concern that the kernel stack pointer may not be in a usable state. The former is not a problem here: we're doing a stack switch anyway, and so the additional overhead on the main stack is pretty minimal, but the latter may be. -hpa -- H. Peter Anvin, Intel Open Source Technology Center I work for Intel. I don't speak on their behalf. -- 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/