Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1422829AbbEURAW (ORCPT ); Thu, 21 May 2015 13:00:22 -0400 Received: from mx1.redhat.com ([209.132.183.28]:43728 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1422674AbbEURAS (ORCPT ); Thu, 21 May 2015 13:00:18 -0400 Date: Thu, 21 May 2015 19:00:14 +0200 From: Radim =?utf-8?B?S3LEjW3DocWZ?= To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, bsd@redhat.com Subject: Re: [PATCH 08/12] KVM: x86: save/load state on SMM switch Message-ID: <20150521170014.GB31171@potion.brq.redhat.com> References: <1431084034-8425-1-git-send-email-pbonzini@redhat.com> <1431084034-8425-9-git-send-email-pbonzini@redhat.com> <20150521162036.GA31183@potion.brq.redhat.com> <555E0683.6020600@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <555E0683.6020600@redhat.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2168 Lines: 54 2015-05-21 18:23+0200, Paolo Bonzini: > On 21/05/2015 18:20, Radim Krčmář wrote: >> 2. NMI -> SMI -> IRET -> RSM -> NMI >> NMI is injected; I think it shouldn't be ... have you based this >> behavior on the 3rd paragraph of SDM 34.8 NMI HANDLING WHILE IN SMM >> ("A special case [...]")? > > Yes. Well, if I were to go lawyer [...] saves the SMRAM state save map but does not save the attribute to keep NMI interrupts disabled. NMI masking is a bit, so it'd be really wasteful not to have an attribute to keep NMI enabled in the same place ... Potentially, an NMI could be latched (while in SMM or upon exit) and serviced upon exit [...] This "Potentially" could be in the sense that the whole 3rd paragraph is only applicable to some ancient SMM design :) The 1st paragraph has quite clear sentence: If NMIs were blocked before the SMI occurred, they are blocked after execution of RSM. so I'd just ignore the 3rd paragraph ... And the APM 2:10.3.3 Exceptions and Interrupts NMI—If an NMI occurs while the processor is in SMM, it is latched by the processor, but the NMI handler is not invoked until the processor leaves SMM with the execution of an RSM instruction. A pending NMI causes the handler to be invoked immediately after the RSM completes and before the first instruction in the interrupted program is executed. An SMM handler can unmask NMI interrupts by simply executing an IRET. Upon completion of the IRET instruction, the processor recognizes the pending NMI, and transfers control to the NMI handler. Once an NMI is recognized within SMM using this technique, subsequent NMIs are recognized until SMM is exited. Later SMIs cause NMIs to be masked, until the SMM handler unmasks them. makes me think that we should unmask them unconditionally or that SMM doesn't do anything with NMI masking. If we can choose, less NMI nesting seems like a good idea. -- 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/