From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752613AbcGLWEc (ORCPT ); Tue, 12 Jul 2016 18:04:32 -0400 Received: from mga02.intel.com ([134.134.136.20]:62251 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752492AbcGLWDH (ORCPT ); Tue, 12 Jul 2016 18:03:07 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.28,353,1464678000"; d="scan'208";a="138071740" From: "Fenghua Yu" To: "Thomas Gleixner" , "Ingo Molnar" , "H. Peter Anvin" , "Tony Luck" , "Tejun Heo" , "Borislav Petkov" , "Stephane Eranian" , "Peter Zijlstra" , "Marcelo Tosatti" , "David Carrillo-Cisneros" , "Ravi V Shankar" , "Vikas Shivappa" , "Sai Prakhya" Cc: "linux-kernel" , "x86" , "Fenghua Yu" Subject: [PATCH 21/32] x86/intel_rdt.h: Header for inter_rdt.c Date: Tue, 12 Jul 2016 18:02:54 -0700 Message-Id: <1468371785-53231-22-git-send-email-fenghua.yu@intel.com> X-Mailer: git-send-email 1.8.0.1 In-Reply-To: <1468371785-53231-1-git-send-email-fenghua.yu@intel.com> References: <1468371785-53231-1-git-send-email-fenghua.yu@intel.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Fenghua Yu The header mainly provides functions to call from the user interface file intel_rdt_rdtgroup.c. Signed-off-by: Fenghua Yu Reviewed-by: Tony Luck --- arch/x86/include/asm/intel_rdt.h | 87 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 81 insertions(+), 6 deletions(-) diff --git a/arch/x86/include/asm/intel_rdt.h b/arch/x86/include/asm/intel_rdt.h index f2cb91d..4c5e0ac 100644 --- a/arch/x86/include/asm/intel_rdt.h +++ b/arch/x86/include/asm/intel_rdt.h @@ -3,27 +3,99 @@ #ifdef CONFIG_INTEL_RDT +#include #include -#define MAX_CBM_LENGTH 32 #define IA32_L3_CBM_BASE 0xc90 -#define CBM_FROM_INDEX(x) (IA32_L3_CBM_BASE + x) -#define MSR_IA32_PQOS_CFG 0xc81 +#define L3_CBM_FROM_INDEX(x) (IA32_L3_CBM_BASE + x) + +#define MSR_IA32_L3_QOS_CFG 0xc81 + +enum resource_type { + RESOURCE_L3 = 0, + RESOURCE_NUM = 1, +}; + +#define MAX_CACHE_LEAVES 4 +#define MAX_CACHE_DOMAINS 64 + +DECLARE_PER_CPU_READ_MOSTLY(int, cpu_l3_domain); +DECLARE_PER_CPU_READ_MOSTLY(struct rdtgroup *, cpu_rdtgroup); extern struct static_key rdt_enable_key; void __intel_rdt_sched_in(void *dummy); +extern bool use_rdtgroup_tasks; + +extern bool cdp_enabled; + +struct rdt_opts { + bool cdp_enabled; + bool verbose; + bool simulate_cat_l3; +}; + +struct cache_domain { + cpumask_t shared_cpu_map[MAX_CACHE_DOMAINS]; + unsigned int max_cache_domains_num; + unsigned int level; + unsigned int shared_cache_id[MAX_CACHE_DOMAINS]; +}; + +extern struct rdt_opts rdt_opts; struct clos_cbm_table { - unsigned long l3_cbm; + unsigned long cbm; unsigned int clos_refcnt; }; struct clos_config { - unsigned long *closmap; + unsigned long **closmap; u32 max_closid; - u32 closids_used; }; +struct shared_domain { + struct cpumask cpumask; + int l3_domain; +}; + +#define for_each_cache_domain(domain, start_domain, max_domain) \ + for (domain = start_domain; domain < max_domain; domain++) + +extern struct clos_config cconfig; +extern struct shared_domain *shared_domain; +extern int shared_domain_num; + +extern struct rdtgroup *root_rdtgrp; +extern void rdtgroup_fork(struct task_struct *child); +extern void rdtgroup_post_fork(struct task_struct *child); + +extern struct clos_cbm_table **l3_cctable; + +extern unsigned int min_bitmask_len; +extern void msr_cpu_update(void *arg); +extern inline void closid_get(u32 closid, int domain); +extern void closid_put(u32 closid, int domain); +extern void closid_free(u32 closid, int domain, int level); +extern int closid_alloc(u32 *closid, int domain); +extern bool cat_l3_enabled; +extern unsigned int get_domain_num(int level); +extern struct shared_domain *shared_domain; +extern int shared_domain_num; +extern inline int get_dcbm_table_index(int x); +extern inline int get_icbm_table_index(int x); + +extern int get_cache_leaf(int level, int cpu); + +extern void cbm_update_l3_msr(void *pindex); +extern int level_to_leaf(int level); + +extern void init_msrs(bool cdpenabled); +extern bool cat_enabled(int level); +extern u64 max_cbm(int level); +extern u32 max_cbm_len(int level); + +extern void rdtgroup_exit(struct task_struct *tsk); + /* * intel_rdt_sched_in() - Writes the task's CLOSid to IA32_PQR_MSR * @@ -54,6 +126,9 @@ static inline void intel_rdt_sched_in(void) #else static inline void intel_rdt_sched_in(void) {} +static inline void rdtgroup_fork(struct task_struct *child) {} +static inline void rdtgroup_post_fork(struct task_struct *child) {} +static inline void rdtgroup_exit(struct task_struct *tsk) {} #endif #endif -- 2.5.0