From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752350AbcGLWCq (ORCPT ); Tue, 12 Jul 2016 18:02:46 -0400 Received: from mga02.intel.com ([134.134.136.20]:43668 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752160AbcGLWCo (ORCPT ); Tue, 12 Jul 2016 18:02:44 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.28,353,1464678000"; d="scan'208";a="138071702" 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 11/32] x86/intel_rdt: Class of service and capacity bitmask management for CDP Date: Tue, 12 Jul 2016 18:02:44 -0700 Message-Id: <1468371785-53231-12-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: Vikas Shivappa Add support to manage CLOSid(CLass Of Service id) and capacity bitmask(cbm) for code data prioritization(CDP). Closid management includes changes to allocating, freeing closid and closid_get and closid_put and changes to closid availability map during CDP set up. CDP has a separate cbm for code and data. Each closid is mapped to a (dcache_cbm, icache_cbm) pair when cdp mode is enabled. Signed-off-by: Vikas Shivappa Signed-off-by: Fenghua Yu Reviewed-by: Tony Luck --- arch/x86/kernel/cpu/intel_rdt.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/arch/x86/kernel/cpu/intel_rdt.c b/arch/x86/kernel/cpu/intel_rdt.c index 14b9011..7a03671 100644 --- a/arch/x86/kernel/cpu/intel_rdt.c +++ b/arch/x86/kernel/cpu/intel_rdt.c @@ -30,7 +30,13 @@ #include /* - * cctable maintains 1:1 mapping between CLOSid and cache bitmask. + * During cache alloc mode cctable maintains 1:1 mapping between + * CLOSid and l3_cbm. + * + * During CDP mode, the cctable maintains a 1:2 mapping between the closid + * and (dcache_cbm, icache_cbm) pair. + * index of a dcache_cbm for CLOSid 'n' = n << 1. + * index of a icache_cbm for CLOSid 'n' = n << 1 + 1 */ static struct clos_cbm_table *cctable; /* @@ -53,6 +59,13 @@ static bool cdp_enabled; #define __DCBM_TABLE_INDEX(x) (x << 1) #define __ICBM_TABLE_INDEX(x) ((x << 1) + 1) +#define __DCBM_MSR_INDEX(x) \ + CBM_FROM_INDEX(__DCBM_TABLE_INDEX(x)) +#define __ICBM_MSR_INDEX(x) \ + CBM_FROM_INDEX(__ICBM_TABLE_INDEX(x)) + +#define DCBM_TABLE_INDEX(x) (x << cdp_enabled) +#define ICBM_TABLE_INDEX(x) ((x << cdp_enabled) + cdp_enabled) struct rdt_remote_data { int msr; @@ -132,9 +145,12 @@ static inline void closid_tasks_sync(void) on_each_cpu_mask(cpu_online_mask, __intel_rdt_sched_in, NULL, 1); } +/* + * When cdp mode is enabled, refcnt is maintained in the dcache_cbm entry. + */ static inline void closid_get(u32 closid) { - struct clos_cbm_table *cct = &cctable[closid]; + struct clos_cbm_table *cct = &cctable[DCBM_TABLE_INDEX(closid)]; lockdep_assert_held(&rdt_group_mutex); @@ -164,7 +180,7 @@ static int closid_alloc(u32 *closid) static inline void closid_free(u32 closid) { clear_bit(closid, cconfig.closmap); - cctable[closid].l3_cbm = 0; + cctable[DCBM_TABLE_INDEX(closid)].l3_cbm = 0; if (WARN_ON(!cconfig.closids_used)) return; @@ -174,7 +190,7 @@ static inline void closid_free(u32 closid) static void closid_put(u32 closid) { - struct clos_cbm_table *cct = &cctable[closid]; + struct clos_cbm_table *cct = &cctable[DCBM_TABLE_INDEX(closid)]; lockdep_assert_held(&rdt_group_mutex); if (WARN_ON(!cct->clos_refcnt)) -- 2.5.0