Received: by 2002:a05:6358:11c7:b0:104:8066:f915 with SMTP id i7csp5797149rwl; Tue, 4 Apr 2023 03:57:15 -0700 (PDT) X-Google-Smtp-Source: AKy350aLaRlQ9pvYGmVBwDJcvAnVqw+AO2THpmqQ1LYy+mxs4Xlcgb6GnNZ409ivMVzFagO+phBm X-Received: by 2002:a05:6402:6c1:b0:4fb:59bb:ce71 with SMTP id n1-20020a05640206c100b004fb59bbce71mr2127887edy.36.1680605835226; Tue, 04 Apr 2023 03:57:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1680605835; cv=none; d=google.com; s=arc-20160816; b=Vf+gIP9frAp5zUfxpvX8vkVtLxyquUTAhrLn1teJb+4kzZFJIhGuqrqIUYWPXHhTWI 1CTbotz7wBPLheQ2+ji5/DSaZwl7FRoweycoQ28KUpHBPa0zUEt/tE61QqoGuEwK9FUb El2kbGI3UCog+ZrEsaK20fmnFfNIRrKPSXTGtLxZ7lqOo7CMk/5Yd2y2QyLbwypocg4u 8kWZ65ZIa+99JzlpAV6PqtAZw2CEtjxC8z86LEjYxPv/eOGordBQBx5DvJgU7wR/2iVN 74zJUQfejaLw2MgrJ21jWAXQkUY0xzQm4EbGe8CoWs3JjGKt8xkeq1G9CXTC1+yR8MsX PYHQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=FujSQUqHBZl8iLTALotlYQnjAeVJMmty12OH3VL/Yzw=; b=IpHD+C3TInB4Ky7l3tLsNdeToLjqsZ+g+YsJtEGvu1eF0JPx4dgdJUYMkdnEzIXspX wbVc0IRoviqU8r67eijRr6j2Mlk2tMq1L9AcmZEodWPrX1fHC0/viKZdAmRGJSM3LfKg yF/fOnGNjqwzFtQszOVnndEF1XmAUMCWtKYuuQMrWXdbhfkiBQOkuUUhMXeeUdF48EL3 HqO1YjGLZf7cVFyzqUJGUROLGO/Tkc8j4wuDjMYBbMiGovyW2ilLksF+UT6IfDKJL00H 86bnk1TjaadWUUPPlzzw8TW5SLOw/V3rKJjG6SzoJB04FqK+rhzKjY2fsJjSrXQBD2jc EhxA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=cPMrKTd6; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id a10-20020aa7d74a000000b004fd2b07230esi7353939eds.64.2023.04.04.03.56.50; Tue, 04 Apr 2023 03:57:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=cPMrKTd6; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234840AbjDDKzS (ORCPT + 99 others); Tue, 4 Apr 2023 06:55:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39208 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234816AbjDDKyV (ORCPT ); Tue, 4 Apr 2023 06:54:21 -0400 Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DA2C130DA; Tue, 4 Apr 2023 03:53:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1680605615; x=1712141615; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=8g9fYneHGWezeTK24y61/oxUFG9XbGt0W4kIun9/SEQ=; b=cPMrKTd6DG1w8kdIqrV6UxP5PwQv2LeZaedgAUFgYFezdNUe/A7onH3B mfbwt9ggmeEew4rzOG1ltd7HcSU2Hl9BRjzMYg3//dxBZgdtoh74k0P2m eSkz2DkGXsDkM45Vaq2UppYWtN2OU7HADQ9lAcjASsu2VUKVXnYImavui en4z4Fm04Z0E/YE1JS+CvA+34FgmoKRygL0dwVBZDFBxgUvjAhr96IpUY /LwztCyiEVntlceuGV5Ec8Lle07F+OhJauCbKIBtZXeeaz4dWk+yWQD3H r1CWNxrXLBmAWrjp+N7ljTmOzzQ1OsfvRsdypJbDt+HRsQrsYWGXMiTRo A==; X-IronPort-AV: E=McAfee;i="6600,9927,10669"; a="330734108" X-IronPort-AV: E=Sophos;i="5.98,317,1673942400"; d="scan'208";a="330734108" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Apr 2023 03:53:04 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10669"; a="775597832" X-IronPort-AV: E=Sophos;i="5.98,317,1673942400"; d="scan'208";a="775597832" Received: from unknown (HELO fred..) ([172.25.112.68]) by FMSMGA003.fm.intel.com with ESMTP; 04 Apr 2023 03:53:04 -0700 From: Xin Li To: linux-kernel@vger.kernel.org, x86@kernel.org, kvm@vger.kernel.org Cc: tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, hpa@zytor.com, peterz@infradead.org, andrew.cooper3@citrix.com, seanjc@google.com, pbonzini@redhat.com, ravi.v.shankar@intel.com, jiangshanlai@gmail.com, shan.kang@intel.com Subject: [PATCH v7 18/33] x86/fred: add a NMI entry stub for FRED Date: Tue, 4 Apr 2023 03:27:01 -0700 Message-Id: <20230404102716.1795-19-xin3.li@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230404102716.1795-1-xin3.li@intel.com> References: <20230404102716.1795-1-xin3.li@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.5 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: "H. Peter Anvin (Intel)" On a FRED system, NMIs nest both with themselves and faults, transient information is saved into the stack frame, and NMI unblocking only happens when the stack frame indicates that so should happen. Thus, the NMI entry stub for FRED is really quite small... Signed-off-by: H. Peter Anvin (Intel) Tested-by: Shan Kang Signed-off-by: Xin Li --- arch/x86/include/asm/fred.h | 1 + arch/x86/kernel/nmi.c | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/arch/x86/include/asm/fred.h b/arch/x86/include/asm/fred.h index f670430aaa54..9ce2a6439091 100644 --- a/arch/x86/include/asm/fred.h +++ b/arch/x86/include/asm/fred.h @@ -99,6 +99,7 @@ static __always_inline unsigned long fred_event_data(struct pt_regs *regs) #define DEFINE_FRED_HANDLER(f) noinstr DECLARE_FRED_HANDLER(f) typedef DECLARE_FRED_HANDLER((*fred_handler)); +DECLARE_FRED_HANDLER(fred_exc_nmi); DECLARE_FRED_HANDLER(fred_exc_debug); DECLARE_FRED_HANDLER(fred_exc_page_fault); diff --git a/arch/x86/kernel/nmi.c b/arch/x86/kernel/nmi.c index 776f4b1e395b..e7b2abe42583 100644 --- a/arch/x86/kernel/nmi.c +++ b/arch/x86/kernel/nmi.c @@ -34,6 +34,7 @@ #include #include #include +#include #define CREATE_TRACE_POINTS #include @@ -643,6 +644,24 @@ void nmi_backtrace_stall_check(const struct cpumask *btp) #endif +#ifdef CONFIG_X86_FRED +DEFINE_FRED_HANDLER(fred_exc_nmi) +{ + /* + * With FRED, CR2 and DR6 are pushed atomically on faults, + * so we don't have to worry about saving and restoring them. + * Breakpoint faults nest, so assume it is OK to leave DR7 + * enabled. + */ + irqentry_state_t irq_state = irqentry_nmi_enter(regs); + + inc_irq_stat(__nmi_count); + default_do_nmi(regs); + + irqentry_nmi_exit(regs, irq_state); +} +#endif + void stop_nmi(void) { ignore_nmis++; -- 2.34.1