Received: by 2002:a6b:fb09:0:0:0:0:0 with SMTP id h9csp1882137iog; Tue, 14 Jun 2022 15:54:52 -0700 (PDT) X-Google-Smtp-Source: AGRyM1vb3Z+7lYie7vf/Tx4znrNuW1TLVDf2KV4hDnsRU9iBNFujVkd6LR2U5iBpipb90VH07kR6 X-Received: by 2002:a17:90b:33c8:b0:1ea:c199:9794 with SMTP id lk8-20020a17090b33c800b001eac1999794mr6892083pjb.224.1655247291982; Tue, 14 Jun 2022 15:54:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1655247291; cv=none; d=google.com; s=arc-20160816; b=bTXyz2oRzQbpQFjEaE6oxibVUqEy8XgF9pbMjsqvczQaWgZ1d/fKWXelugoG6kkjbx RbG28sA8UVOpyStRH+3Oey62f7NkSMenMrfoZLbtecwQYgqUv+ol9aIZmmql4gL/3IiU I+reqTSqb8jtNfjYpbHmNH0dVSSgjw858IGt6qQZ5Dv0t/5MYGuI0wRE9JeBPorhDEWd LT85KsZO5zFYtR4/kSyI/EeH5SHFxgHdQDufjfxuVfrSYfJSc9UYTEYJuIQdjp7vgZTS KXtBbO6/kf1v3t8Uwirc4dqvqXBNBWYY49EuTBBJw3aCEo7kNUCWYX28UnkH8h96AKPY Yb7Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:robot-unsubscribe :robot-id:message-id:mime-version:references:in-reply-to:cc:subject :to:reply-to:sender:from:dkim-signature:dkim-signature:date; bh=/oUwmN27gOXYObenmFqMkWKGOZyPsu3YLAfOdNM7IyU=; b=XqdvxlknHG+p5DBfSgKOfph86505KFrJKU4UWzrU2VXrFzL95JvazKn/W42cH99lf6 mIZzgsfrrp+jdC3gLxD56XgA5AJxa8oyIdEsMx6De2FwS/M4Omlf4/FAB2vyeEaTRqe7 vf1wA/o1PSNjJgYGPa+hOnVFqxhJ6R1p/qft+8EOLkWjgo/XGgMCVVHH6sUIji3gdKEG pyz6xHAWIEKlp24n3riSSohr5XybZRaKGuUDI4YNxqAIWsRkNu+ZsIPvlrNYvorDoifR 27EjwuLphu1j0HKMoOFonDSEoFDIpHVjm7nj8elcqYw0drgZt/5CxIAOi+1APMUpO9Wb rVpw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=xM4Lgygy; dkim=neutral (no key) header.i=@linutronix.de header.b=ArngD52G; 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=QUARANTINE dis=NONE) header.from=linutronix.de Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id l1-20020a170902f68100b0015415173078si16983315plg.220.2022.06.14.15.54.39; Tue, 14 Jun 2022 15:54:51 -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=@linutronix.de header.s=2020 header.b=xM4Lgygy; dkim=neutral (no key) header.i=@linutronix.de header.b=ArngD52G; 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=QUARANTINE dis=NONE) header.from=linutronix.de Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1353125AbiFNWrA (ORCPT + 99 others); Tue, 14 Jun 2022 18:47:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43528 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231621AbiFNWq7 (ORCPT ); Tue, 14 Jun 2022 18:46:59 -0400 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0D8CF52B10; Tue, 14 Jun 2022 15:46:57 -0700 (PDT) Date: Tue, 14 Jun 2022 22:46:53 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1655246814; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=/oUwmN27gOXYObenmFqMkWKGOZyPsu3YLAfOdNM7IyU=; b=xM4Lgygy7wEyD9y3PD8T9YlfH4D3TOJf5gYYq/U7nxeRaPRhpa5x5eUhXgpsRXyPFDvsi5 aByBZg+6nehw2oM3qs13Zqt7/lbS35n9zgbDNeA3AEakPZLgM/f76aM7ZZkHOTxL5ud3KR 2VVLjIO0u7/E7AchkJIOLu+gOdaP65AT4nM+P2GCcidJ/FPRoxKJNndGrWZtbPPgmmc9c7 A8qlcTFR/yc5QOJPXIBb6WGa2tQeQOf8Ij4Rx7K+fvjF3XErC9Z0Y/AgV5tSgOaaQIemJj r0s2msqyoUNlRbS/5dr5hnDWGB+NvciCxEH8LfVcoW7Cn8w+ZJIj4lyu6ZhUdw== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1655246814; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=/oUwmN27gOXYObenmFqMkWKGOZyPsu3YLAfOdNM7IyU=; b=ArngD52GmRDGcKGhjg9bKzJGvHVWvvBTathbtsQ8lXuk1hI7UPXvT3YlXSUct3AeIL9XpF yF1E0wpepEEmZVBg== From: "tip-bot2 for Chang S. Bae" Sender: tip-bot2@linutronix.de Reply-to: linux-kernel@vger.kernel.org To: linux-tip-commits@vger.kernel.org Subject: [tip: x86/fpu] x86/fpu: Add a helper to prepare AMX state for low-power CPU idle Cc: "Chang S. Bae" , Dave Hansen , x86@kernel.org, linux-kernel@vger.kernel.org In-Reply-To: <20220608164748.11864-2-chang.seok.bae@intel.com> References: <20220608164748.11864-2-chang.seok.bae@intel.com> MIME-Version: 1.0 Message-ID: <165524681334.4207.8833115136296675815.tip-bot2@tip-bot2> Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham 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 The following commit has been merged into the x86/fpu branch of tip: Commit-ID: 012b91af28e4d83240e053e16af3528a902b0d84 Gitweb: https://git.kernel.org/tip/012b91af28e4d83240e053e16af3528a902b0d84 Author: Chang S. Bae AuthorDate: Wed, 08 Jun 2022 09:47:47 -07:00 Committer: Dave Hansen CommitterDate: Tue, 14 Jun 2022 15:42:41 -07:00 x86/fpu: Add a helper to prepare AMX state for low-power CPU idle When a CPU enters an idle state, a non-initialized AMX register state may be the cause of preventing a deeper low-power state. Other extended register states whether initialized or not do not impact the CPU idle state. The new helper can ensure the AMX state is initialized before the CPU is idle, and it will be used by the intel idle driver. Check the AMX_TILE feature bit before using XGETBV1 as a chain of dependencies was established via cpuid_deps[]: AMX->XFD->XGETBV1. Signed-off-by: Chang S. Bae Signed-off-by: Dave Hansen Link: https://lkml.kernel.org/r/20220608164748.11864-2-chang.seok.bae@intel.com --- arch/x86/include/asm/fpu/api.h | 2 ++ arch/x86/include/asm/special_insns.h | 9 +++++++++ arch/x86/kernel/fpu/core.c | 14 ++++++++++++++ 3 files changed, 25 insertions(+) diff --git a/arch/x86/include/asm/fpu/api.h b/arch/x86/include/asm/fpu/api.h index 6b0f31f..503a577 100644 --- a/arch/x86/include/asm/fpu/api.h +++ b/arch/x86/include/asm/fpu/api.h @@ -164,4 +164,6 @@ static inline bool fpstate_is_confidential(struct fpu_guest *gfpu) /* prctl */ extern long fpu_xstate_prctl(int option, unsigned long arg2); +extern void fpu_idle_fpregs(void); + #endif /* _ASM_X86_FPU_API_H */ diff --git a/arch/x86/include/asm/special_insns.h b/arch/x86/include/asm/special_insns.h index 45b18eb..35f709f 100644 --- a/arch/x86/include/asm/special_insns.h +++ b/arch/x86/include/asm/special_insns.h @@ -295,6 +295,15 @@ static inline int enqcmds(void __iomem *dst, const void *src) return 0; } +static inline void tile_release(void) +{ + /* + * Instruction opcode for TILERELEASE; supported in binutils + * version >= 2.36. + */ + asm volatile(".byte 0xc4, 0xe2, 0x78, 0x49, 0xc0"); +} + #endif /* __KERNEL__ */ #endif /* _ASM_X86_SPECIAL_INSNS_H */ diff --git a/arch/x86/kernel/fpu/core.c b/arch/x86/kernel/fpu/core.c index 0fdc807..8fbbe89 100644 --- a/arch/x86/kernel/fpu/core.c +++ b/arch/x86/kernel/fpu/core.c @@ -851,3 +851,17 @@ int fpu__exception_code(struct fpu *fpu, int trap_nr) */ return 0; } + +/* + * Initialize register state that may prevent from entering low-power idle. + * This function will be invoked from the cpuidle driver only when needed. + */ +void fpu_idle_fpregs(void) +{ + /* Note: AMX_TILE being enabled implies XGETBV1 support */ + if (cpu_feature_enabled(X86_FEATURE_AMX_TILE) && + (xfeatures_in_use() & XFEATURE_MASK_XTILE)) { + tile_release(); + fpregs_deactivate(¤t->thread.fpu); + } +}