From patchwork Mon Mar 27 07:58:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Li, Xin3" X-Patchwork-Id: 75283 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1358531vqo; Mon, 27 Mar 2023 01:41:16 -0700 (PDT) X-Google-Smtp-Source: AK7set9SzF3CeCalUWFEmRpDf3SvicPgdonAI99fsFirXAEhfPl4ripHHWo2zil1/fsXLoW5RHhX X-Received: by 2002:a05:6a00:d4f:b0:629:5d35:3be with SMTP id n15-20020a056a000d4f00b006295d3503bemr15396932pfv.3.1679906475875; Mon, 27 Mar 2023 01:41:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679906475; cv=none; d=google.com; s=arc-20160816; b=PF5ZrfzRP9hdR+utIQHu40W5QLA5DxR+LUEr295HQWF9ErXLC2IkaOqIUzmBSOQuop 7y9iExLTqosh9jEcRyPKeoiL2qX+f3N1DCKkClZAezpiwSoew9/f8lMD0cVCS6kqIIic MJKWkYCTVd/OQNGSdN92peSRaeWX/mHr+Maic8z+g8z2dIMODty+Eb+tVk25Q86bxDY/ JhZX1PhQYi370ZdThYMrbGwzff+Q0fa1OUfpoSH5Om5zr935L6w0WEYiSm5cL2YwTKt8 OEhV4I4bIlFn23/q0vEvuA+GsSpm2dP1fUpUssowWZdwXNCl+R96bPAvG20APNQF6B8V hosw== 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=BWZ/Fs/YqPHhG+vbleqMrIxlzACZYftKS0YHpwFAQyI=; b=DFlQk+u/d7Jf3C3fLNe5xfYnpRoG8F7AZDP7CNZsDRoOcBl2HEHJCqiGn+/CF5T6CI gId1/zRxAyC666TnMp5fQmRe9bRdmXktI+Bel7Y0+JEZvfQR4m9saXYMaKR6/C4X36u9 Ksmy1QyB5Sm81SZDEUm6mKcBfG3s/HMA3ka9Xbvll2uCwm6xygyHgZb1LG4xSbwPwLqZ bEhSQFJ8oY9h/HTO4R/R5je9dxVdhjOf9i+VcQn/GPirZ+NP0jhHobNQN6sMaUR7kE1P 9+sizgUjZCgpWjHDcDTy8GXopYz61BfxZIreu6bd5tzxd+qkSKPV0rMeQCp6eNrXdQzJ pbMw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=HzGOXXTq; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id u11-20020a6540cb000000b00502ece2f57dsi26965959pgp.655.2023.03.27.01.41.02; Mon, 27 Mar 2023 01:41: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=HzGOXXTq; 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 S233296AbjC0IZy (ORCPT + 99 others); Mon, 27 Mar 2023 04:25:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:32828 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233099AbjC0IYw (ORCPT ); Mon, 27 Mar 2023 04:24:52 -0400 Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0997D46B5; Mon, 27 Mar 2023 01:24:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1679905477; x=1711441477; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=zbDdVunyGdhXyhjUE3Gbpn/xbHM27xiNyk5ThtGHdLg=; b=HzGOXXTqUZbl1OS/GKzzsWpBOVOmTPyW3TjE7fFidqkG8lPBDWLiOAB9 HFgql7yMKNM0wQB2/LBS84VWAuWuyJKSEakiFwOrmM3YpZ2XNWkAMvobb ELJzbuJr5w3oTGEJCEPc4olqZ0Wibb8P3dhNvi446qkvFOHqEHplvfG3p Y0IBYKbTZSp0XWmcCNCdFHMkOsqsKFhfRLGzxZm7yTsetuKBUe1G0TedI 20lmcfzo/ZyRbp4IDl+uKK46HnZvp7miqsAOVH65Ta3WIxuIie6F7QzGm TgIydXJBY0+OD0pFmz3hfLE1GwiGFzqAqQRGj/tWrj7o/tHYzMW3S6mjt g==; X-IronPort-AV: E=McAfee;i="6600,9927,10661"; a="338930250" X-IronPort-AV: E=Sophos;i="5.98,294,1673942400"; d="scan'208";a="338930250" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Mar 2023 01:24:36 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10661"; a="713787091" X-IronPort-AV: E=Sophos;i="5.98,294,1673942400"; d="scan'208";a="713787091" Received: from unknown (HELO fred..) ([172.25.112.68]) by orsmga008.jf.intel.com with ESMTP; 27 Mar 2023 01:24:35 -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 v6 16/33] x86/fred: add a page fault entry stub for FRED Date: Mon, 27 Mar 2023 00:58:21 -0700 Message-Id: <20230327075838.5403-17-xin3.li@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230327075838.5403-1-xin3.li@intel.com> References: <20230327075838.5403-1-xin3.li@intel.com> MIME-Version: 1.0 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,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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1761509612536461951?= X-GMAIL-MSGID: =?utf-8?q?1761509612536461951?= From: "H. Peter Anvin (Intel)" Add a page fault entry stub for FRED. On a FRED system, the faulting address (CR2) is passed on the stack, to avoid the problem of transient state. Thus we get the page fault address from the stack instead of CR2. Signed-off-by: H. Peter Anvin (Intel) Tested-by: Shan Kang Signed-off-by: Xin Li --- arch/x86/include/asm/fred.h | 2 ++ arch/x86/mm/fault.c | 20 ++++++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/arch/x86/include/asm/fred.h b/arch/x86/include/asm/fred.h index 2f337162da73..57affbf80ced 100644 --- a/arch/x86/include/asm/fred.h +++ b/arch/x86/include/asm/fred.h @@ -94,6 +94,8 @@ 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_page_fault); + #endif /* __ASSEMBLY__ */ #endif /* CONFIG_X86_FRED */ diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c index a498ae1fbe66..0f946121de14 100644 --- a/arch/x86/mm/fault.c +++ b/arch/x86/mm/fault.c @@ -33,6 +33,7 @@ #include /* kvm_handle_async_pf */ #include /* fixup_vdso_exception() */ #include +#include /* fred_event_data() */ #define CREATE_TRACE_POINTS #include @@ -1507,9 +1508,10 @@ handle_page_fault(struct pt_regs *regs, unsigned long error_code, } } -DEFINE_IDTENTRY_RAW_ERRORCODE(exc_page_fault) +static __always_inline void page_fault_common(struct pt_regs *regs, + unsigned int error_code, + unsigned long address) { - unsigned long address = read_cr2(); irqentry_state_t state; prefetchw(¤t->mm->mmap_lock); @@ -1556,3 +1558,17 @@ DEFINE_IDTENTRY_RAW_ERRORCODE(exc_page_fault) irqentry_exit(regs, state); } + +DEFINE_IDTENTRY_RAW_ERRORCODE(exc_page_fault) +{ + page_fault_common(regs, error_code, read_cr2()); +} + +#ifdef CONFIG_X86_FRED + +DEFINE_FRED_HANDLER(fred_exc_page_fault) +{ + page_fault_common(regs, regs->orig_ax, fred_event_data(regs)); +} + +#endif /* CONFIG_X86_FRED */