From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E6199ECAAA1 for ; Fri, 9 Sep 2022 23:07:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231873AbiIIXHi (ORCPT ); Fri, 9 Sep 2022 19:07:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48492 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231470AbiIIXGs (ORCPT ); Fri, 9 Sep 2022 19:06:48 -0400 Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5C55A115CC4 for ; Fri, 9 Sep 2022 16:06:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1662764798; x=1694300798; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=MIecFpx/fYz164sdD9AyklxOPY/JrvhjZ46OYbtFEpc=; b=NVdElGE05XuA+fHb4hVamp7prbShAQZ1Ttf3rnc2F9P7cZfrgVZqsfXD XLUk5Hzyz06rObQzgpYcaOjHlIiZJyoTVEKnuwoIF4cFi7unc2f7zeFoJ 1wIIkDw7/Mmnts5x8rR8f/7WN3rES8FaAKtCIIGkAsRD7YVcM8GEM9If3 hRd/nDm1uJ2jSJmfydrOX99r04MSBBNw5lCrnLlkIMkj8Qr6fvHAQ/8Y9 SvLJHEUwF2zFADViro/0cqifSpSWt29C/YUQTS75l9DZsV9wFd4yxT4ce U6uaO68D4jmb8q0130/MIU7FQLqqXriBCetz6U2AVl4FO7HyEA1vWEJqf Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10465"; a="298386918" X-IronPort-AV: E=Sophos;i="5.93,304,1654585200"; d="scan'208";a="298386918" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Sep 2022 16:06:35 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,304,1654585200"; d="scan'208";a="677355019" Received: from ranerica-svr.sc.intel.com ([172.25.110.23]) by fmsmga008.fm.intel.com with ESMTP; 09 Sep 2022 16:06:34 -0700 From: Ricardo Neri To: "Peter Zijlstra (Intel)" , Juri Lelli , Vincent Guittot Cc: Ricardo Neri , "Ravi V. Shankar" , Ben Segall , Daniel Bristot de Oliveira , Dietmar Eggemann , Len Brown , Mel Gorman , "Rafael J. Wysocki" , Srinivas Pandruvada , Steven Rostedt , Tim Chen , Valentin Schneider , x86@kernel.org, linux-kernel@vger.kernel.org, Ricardo Neri , "Tim C . Chen" Subject: [RFC PATCH 14/23] thermal: intel: hfi: Update the class of the current task Date: Fri, 9 Sep 2022 16:11:56 -0700 Message-Id: <20220909231205.14009-15-ricardo.neri-calderon@linux.intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220909231205.14009-1-ricardo.neri-calderon@linux.intel.com> References: <20220909231205.14009-1-ricardo.neri-calderon@linux.intel.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Support the interfaces of the scheduler for classes of tasks. If an Intel processor supports Intel Thread Director, then it supports classes of tasks. Use the hardware resources that Intel Thread Director provides to assign a class to the currently running task. Cc: Ben Segall Cc: Daniel Bristot de Oliveira Cc: Dietmar Eggemann Cc: Len Brown Cc: Mel Gorman Cc: Rafael J. Wysocki Cc: Srinivas Pandruvada Cc: Steven Rostedt Cc: Tim C. Chen Cc: Valentin Schneider Cc: x86@kernel.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Ricardo Neri --- arch/x86/include/asm/topology.h | 8 +++++++ drivers/thermal/intel/intel_hfi.c | 35 +++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/arch/x86/include/asm/topology.h b/arch/x86/include/asm/topology.h index 458c891a8273..9c6df4fd9414 100644 --- a/arch/x86/include/asm/topology.h +++ b/arch/x86/include/asm/topology.h @@ -227,4 +227,12 @@ void init_freq_invariance_cppc(void); #define arch_init_invariance_cppc init_freq_invariance_cppc #endif +#ifdef CONFIG_INTEL_THREAD_DIRECTOR +int intel_hfi_has_task_classes(void); +void intel_hfi_update_task_class(struct task_struct *curr, bool smt_siblings_idle); + +#define arch_has_task_classes intel_hfi_has_task_classes +#define arch_update_task_class intel_hfi_update_task_class +#endif + #endif /* _ASM_X86_TOPOLOGY_H */ diff --git a/drivers/thermal/intel/intel_hfi.c b/drivers/thermal/intel/intel_hfi.c index 4bafe6848d5d..f46d9331f912 100644 --- a/drivers/thermal/intel/intel_hfi.c +++ b/drivers/thermal/intel/intel_hfi.c @@ -73,6 +73,17 @@ union cpuid6_edx { u32 full; }; +#ifdef CONFIG_INTEL_THREAD_DIRECTOR +union hfi_thread_feedback_char_msr { + struct { + u8 classid; + u64 __reserved:55; + u8 valid:1; + } split; + u64 full; +}; +#endif + /** * struct hfi_cpu_data - HFI capabilities per CPU * @perf_cap: Performance capability @@ -172,6 +183,30 @@ static struct workqueue_struct *hfi_updates_wq; #define HFI_UPDATE_INTERVAL HZ #define HFI_MAX_THERM_NOTIFY_COUNT 16 +#ifdef CONFIG_INTEL_THREAD_DIRECTOR +int intel_hfi_has_task_classes(void) +{ + return cpu_feature_enabled(X86_FEATURE_ITD); +} + +void intel_hfi_update_task_class(struct task_struct *curr, bool smt_siblings_idle) +{ + union hfi_thread_feedback_char_msr msr; + + /* We should not be here if ITD is not supported. */ + if (!cpu_feature_enabled(X86_FEATURE_ITD)) { + pr_warn_once("task classification requested but not supported!"); + return; + } + + rdmsrl(MSR_IA32_HW_FEEDBACK_CHAR, msr.full); + if (!msr.split.valid) + return; + + curr->class = msr.split.classid; +} +#endif /* CONFIG_INTEL_THREAD_DIRECTOR */ + static void get_hfi_caps(struct hfi_instance *hfi_instance, struct thermal_genl_cpu_caps *cpu_caps) { -- 2.25.1