Received: by 2002:a6b:fb09:0:0:0:0:0 with SMTP id h9csp1891246iog; Tue, 14 Jun 2022 16:08:28 -0700 (PDT) X-Google-Smtp-Source: ABdhPJydGJex+cSvnCSpCTZCdrEwmeMReca+tDZJ5gIKtryzzzkLZFojuzKJ3/BnJqKJoa+QgiqL X-Received: by 2002:a05:6a00:842:b0:51b:f289:7354 with SMTP id q2-20020a056a00084200b0051bf2897354mr6918697pfk.75.1655248108651; Tue, 14 Jun 2022 16:08:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1655248108; cv=none; d=google.com; s=arc-20160816; b=EJz06cg8q5pE5SiHLphyJh5qSoC4PlsBMyvhNB5RMOg9hOvIcjowBgAyfPmfUg85J0 mM4LEzNl6bPHWiTahANN3fE6QEb15IXyxSRuUQEktbui64efzTO5GQbk6acOKPZKdXPl YHQPMRtd4SBKXKMj5Z6D7v5uDspbDxGFDVtSYYJCqEwjTwPsaymMQJDSv89461yWzQBJ ClW5yGGt6/WGuanh+uYpfke3bXI+ZFafEIFa7O8eUBTMcpT7ZoUhSSV5HGkVSLe+ubLM vqR7iCG0GwBuf3d9jyg7bmDQ/XSQp8FVaKIgYuJNmCJIJToeYTZGHeY4puRuJQIvNld9 loXw== 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=IFIif++WYe6R40cPTD/3X0hAdNJcAH56e2ZH3rTEZAw=; b=uC0zzyWDxeXcuxkkhs9yc/r+qESjJCAyVyEWE9GteUrkbkr9wR2iK0Wqtjz1NXTM8r CPxJHsyN1O626huvarWo+HpozumAgeJUIlK8/OYQU0S25YvhPwqyOqmMeGEJ9DPLEw0y u1VN/ik2BVncwX9ynfB1IjJ5Aiz2vMv4PSE3hw5jlfKys/vY0AxgkbRXo6mxkD/XQQ40 1fYIBBTHcKNxbvJ5G5xbQe/QOroeUa6KgWLr0CHOVQWPQXbVT/qtZsorpyXF7G+qAeO0 PhLQwOv3V2q8CCnwogCYHsaT0YhPvt93crc/CL6ZyPsix0HS0soy9hUnJ/GkZO9FGUDB uTVg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=CPRlOYTM; dkim=neutral (no key) header.i=@linutronix.de; 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 y3-20020a1709027c8300b00167895f904bsi14011390pll.140.2022.06.14.16.08.14; Tue, 14 Jun 2022 16:08:28 -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=CPRlOYTM; dkim=neutral (no key) header.i=@linutronix.de; 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 S1355150AbiFNWyI (ORCPT + 99 others); Tue, 14 Jun 2022 18:54:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50590 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354229AbiFNWyE (ORCPT ); Tue, 14 Jun 2022 18:54:04 -0400 Received: from galois.linutronix.de (Galois.linutronix.de [IPv6:2a0a:51c0:0:12e:550::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 17B4252B02; Tue, 14 Jun 2022 15:54:03 -0700 (PDT) Date: Tue, 14 Jun 2022 22:53:59 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1655247241; 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=IFIif++WYe6R40cPTD/3X0hAdNJcAH56e2ZH3rTEZAw=; b=CPRlOYTMauKq/4y6HQRlN+8eS8PtACSBGAO6ap3M61PwBDb14e0vqdgS1st5zVMtuXf08e 5j+n7Ts7Gtl2w9H9iQtxDuZZCNzs2q6gBzgoN8RYC1D46+rc3jMmfG6r6ycnCbvSgW2kyq I52eBYWbPtv5HMoewJBB1en+46Kh8JI3MZT/UUwRxDzxUikVeYnXrmeaOFzDHl6PPntKa+ UCkKOqYtwKpoeLRP4uz9foEz+J16FHiMS00Erh8YC+sd3QMVcHivw9rt7HU02ZVSbfxMxS rQVteq7Q89tgTI9V9f6iGTBBOodBBT7LGOVXyrc7OTRP7dKrFVzOl8SMQXSpDA== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1655247241; 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=IFIif++WYe6R40cPTD/3X0hAdNJcAH56e2ZH3rTEZAw=; b=YWyrBgmSIx++8xQR65NrjuDOzChP4MJoTEr6dI+E5MB9j2odEwaEul2asstrIJOtzZEyWE HDfMZzvapMobi5AQ== 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: <165524723963.4207.9260777437314481526.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: 418bf5f906c33e83e76239748982dc3d2330cf30 Gitweb: https://git.kernel.org/tip/418bf5f906c33e83e76239748982dc3d2330cf30 Author: Chang S. Bae AuthorDate: Wed, 08 Jun 2022 09:47:47 -07:00 Committer: Dave Hansen CommitterDate: Tue, 14 Jun 2022 15:48:44 -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 0531d6a..3b28c5b 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); + } +}