From patchwork Sat Sep 23 09:42:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Li, Xin3" X-Patchwork-Id: 144024 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:cae8:0:b0:403:3b70:6f57 with SMTP id r8csp437765vqu; Sat, 23 Sep 2023 18:01:38 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE6Tr2KKNRDv1MMsMQ9VTK9kQMoKXejGcmDQY4FdM420SzxBrq+UlKS8dIPrilFeBNhUYey X-Received: by 2002:a25:da11:0:b0:d84:b0f8:916 with SMTP id n17-20020a25da11000000b00d84b0f80916mr3186816ybf.64.1695517298540; Sat, 23 Sep 2023 18:01:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695517298; cv=none; d=google.com; s=arc-20160816; b=wK77DSSBE/O/sLk/XdMkjB6OrKnGpwEr+c3W3wGBhX46ek6/VZ02c0+RDUSzH58DwO Xx4TT94PAcOZOCxmN0lyyfWsEvVi4Q0pFcPnx0aJ9MnDdVS18jgSziB4cAJA8KggfR8V FK/TYocjiVwAoioHL70BhFDyR6klHvJfS0V1/RWCIJ/XNwqYbxzLPHivFkHAsZzFrHtE iJEIVBDfpEYSYp/V0R2d6s4DA6IZKnyjnqCK6PuM2qBfqhZUksiFIvif2M2s0b9Tqdqk Rc5hh8CuvkDuA5ZBGd1EO2efZ3/ZX8ufN1gBK2wNG1vm5e/9hAkatBy6BLqirRI7vXb0 nT9g== 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=r+yFV6fJFMjNXXwXe0MNwfnCD/5sVZQF9hrAHJEKg50=; fh=Tb1p8S3iOxe/kX/WSNC3xEJzSVgGJ5DaxSrKb+pzH+4=; b=t8aSF75QwlGlwXzTUht6Pra6CXO3SyEEK37Qj9W9LoWP1wY3vsIAIG34U0OaQLGbSH Ey1k9zUage8LAY9S8Dm3r18ZB4kshofxdhQg7CAH0QD+9lTjWaZ5vYmNbiNQIKwEZJ5E 6Z4JchReGCVFzVzrxml0Zi0eTvECepJRcZE7t4pelm6LrqbIykwRBFGHmnE47e+KB2Vb 2w4zYAq5ae4BiKEIPAlU/EZJODFpKwbN5WalGyQfGNFRCp0x917wZmPADduOjZC7hIay UHvLxjgA2ADc4fNKM1wA/MCgYiraWMlpu0gOk3T1KAPaaDVtLZRF5GzxftAsOZnGZAPq C5UA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=nVW83MJc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from fry.vger.email (fry.vger.email. [2620:137:e000::3:8]) by mx.google.com with ESMTPS id f20-20020a63f114000000b00565db2812a0si7049101pgi.60.2023.09.23.18.01.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 Sep 2023 18:01:38 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) client-ip=2620:137:e000::3:8; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=nVW83MJc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by fry.vger.email (Postfix) with ESMTP id E3D61839F067; Sat, 23 Sep 2023 03:13:35 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at fry.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231807AbjIWKNE (ORCPT + 29 others); Sat, 23 Sep 2023 06:13:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42414 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231536AbjIWKMD (ORCPT ); Sat, 23 Sep 2023 06:12:03 -0400 Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.100]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BFE92CD6; Sat, 23 Sep 2023 03:11:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1695463911; x=1726999911; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=FcZc1QeKj2isPTwOBVaGNTy+si5WeOaciLFU4yv7EQo=; b=nVW83MJceR44mXs4eU6YGOLUkZ4JPL7uyLiea2l0d9UJsvpyQ3fL12lm Z4+1v8fiRJ4URJmYq05kz6wnYovA8uA3xCfcsFJ7E+xI+OE65ZsMVHQJn Nf6YyyIXepqGa4HhEUAt9BRBh0q+/NHXAfyfLDI/W2YWEwKbgHVxAKVFR kJaVLSxzfIsRM3rDEEPtiixRq3x1YPknL0F0kZ4joOqTF0/OT44T6m3rW 9XFDBm8/sEYd7iveabrh2raLXS+AM3wMPLbq5lkZIFz0lIZx/Q47S4zIP oQcU1oSdZDqgzYeY+5nnqk67YJtqIVJaInr14h5YYBknU6fLPtB5oV9yW A==; X-IronPort-AV: E=McAfee;i="6600,9927,10841"; a="447492387" X-IronPort-AV: E=Sophos;i="6.03,171,1694761200"; d="scan'208";a="447492387" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Sep 2023 03:11:49 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10841"; a="813388193" X-IronPort-AV: E=Sophos;i="6.03,171,1694761200"; d="scan'208";a="813388193" Received: from unknown (HELO fred..) ([172.25.112.68]) by fmsmga008.fm.intel.com with ESMTP; 23 Sep 2023 03:11:48 -0700 From: Xin Li To: linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-edac@vger.kernel.org, linux-hyperv@vger.kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org Cc: tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, luto@kernel.org, pbonzini@redhat.com, seanjc@google.com, peterz@infradead.org, jgross@suse.com, ravi.v.shankar@intel.com, mhiramat@kernel.org, andrew.cooper3@citrix.com, jiangshanlai@gmail.com, nik.borisov@suse.com Subject: [PATCH v11 26/37] x86/fred: Add a NMI entry stub for FRED Date: Sat, 23 Sep 2023 02:42:01 -0700 Message-Id: <20230923094212.26520-27-xin3.li@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230923094212.26520-1-xin3.li@intel.com> References: <20230923094212.26520-1-xin3.li@intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=2.7 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_SBL_CSS,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on fry.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (fry.vger.email [0.0.0.0]); Sat, 23 Sep 2023 03:13:36 -0700 (PDT) X-Spam-Level: ** X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1777878746791249175 X-GMAIL-MSGID: 1777878746791249175 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/kernel/nmi.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/arch/x86/kernel/nmi.c b/arch/x86/kernel/nmi.c index a0c551846b35..58843fdf5cd0 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,33 @@ void nmi_backtrace_stall_check(const struct cpumask *btp) #endif +#ifdef CONFIG_X86_FRED +/* + * With FRED, CR2/DR6 is pushed to #PF/#DB stack frame during FRED + * event delivery, i.e., there is no problem of transient states. + * And NMI unblocking only happens when the stack frame indicates + * that so should happen. + * + * Thus, the NMI entry stub for FRED is really straightforward and + * as simple as most exception handlers. As such, #DB is allowed + * during NMI handling. + */ +DEFINE_FREDENTRY_NMI(exc_nmi) +{ + irqentry_state_t irq_state; + + if (IS_ENABLED(CONFIG_SMP) && arch_cpu_is_offline(smp_processor_id())) + return; + + 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++;