Received: by 2002:a25:23cc:0:0:0:0:0 with SMTP id j195csp1217291ybj; Tue, 5 May 2020 15:38:46 -0700 (PDT) X-Google-Smtp-Source: APiQypJoligEhXctWIj2l+F5kWB1DaFsoxcTQx5vqfRaQpRsHnyFREgf2UfV7xFmZ5uoVCw0i1WP X-Received: by 2002:a17:906:390a:: with SMTP id f10mr4763210eje.74.1588718325978; Tue, 05 May 2020 15:38:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588718325; cv=none; d=google.com; s=arc-20160816; b=Eej+G5YWhuHCtJrGs4aF1XGGDkn5SDmT8/Gj6fCCfiBX4+9cyIYTBW6NpgQzn2kwvJ ayTroQtfHeGVN90mVlKC2HAiXpJdoKCwAjJE2HJ98mAXh3cY0Y8/ieELyb0/s9tHb+DW prIW+BaoWfG/Y/NtYBLyPvAbONN/ra5MzDS15RliX1hfL/zPcZPSo12RHvYl9Gz1iF0M emhCSq7RFsPqT81OZfh3Fk3zVgz2JrVFiTzwA9bk/F7yUubXLf/dcTZxkykbotBWpjoo irq9YFaFRJIo/h+1XnqpGIuGnRdCXkZkZGtbciH9NNUIempgwJ2L+A4ZvIxkrc85I/dP lGjg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :ironport-sdr:ironport-sdr; bh=YBUqi1bYxHXbY7nEwmPQM3NBNePHmjq9m82zdDur5pc=; b=oerWzQhMm8QcTc93jqd5Umvyw7Ds/Eph1jx2XVOe1WX64IU3qBOb6p4Klqs32h/v56 eQe35vALkwyHM0P+2o4sA+5hompYUizMK+DrClgJMTg9m8JIZJ+63rFLeAwm7ERcCUO3 QtGOwi0x2CK16uoJK4UFnryrDEFgtZS3RN2JxQ5FRoY6ZAhw8jD45EFHESxrn7j5fkRN EHgPZIOB1aZqg3kpOt5rfe+7nxhASMPmCn4xNJVrEZccjXvaShCVFYYLkEPwmKlw2DiU jUS1gi+Zh+cbkOXbw2dm8O4KtgwrEfq/8Yq8sndP0M9oQ40wx2PUcyAN1gduy15Wny+7 cB/A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id r25si10145edb.189.2020.05.05.15.38.22; Tue, 05 May 2020 15:38:45 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729471AbgEEWgx (ORCPT + 99 others); Tue, 5 May 2020 18:36:53 -0400 Received: from mga09.intel.com ([134.134.136.24]:41852 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729447AbgEEWgt (ORCPT ); Tue, 5 May 2020 18:36:49 -0400 IronPort-SDR: bteAh34PnL9qc00zRqBok2KDIVIgGCA5bn+3UR4SRDKCcGyGJk2OrZOUWnRDrpKMmh0h5ZDCuu 3VEGF7b5lzxw== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 May 2020 15:36:48 -0700 IronPort-SDR: 712HFudz9AZH15e6tZm2gewlKugR/9Yp98LKlkHFKE3XDortyf7EjsDUqrFh8hqFDwFzb5g88L 6d5WctPODkuw== X-IronPort-AV: E=Sophos;i="5.73,357,1583222400"; d="scan'208";a="284410861" Received: from rchatre-s.jf.intel.com ([10.54.70.76]) by fmsmga004-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 May 2020 15:36:48 -0700 From: Reinette Chatre To: tglx@linutronix.de, fenghua.yu@intel.com, bp@alien8.de, tony.luck@intel.com Cc: kuo-lang.tseng@intel.com, mingo@redhat.com, babu.moger@amd.com, hpa@zytor.com, x86@kernel.org, linux-kernel@vger.kernel.org, Reinette Chatre Subject: [PATCH V2 7/7] x86/resctrl: Support wider MBM counters Date: Tue, 5 May 2020 15:36:18 -0700 Message-Id: <69d52abd5b14794d3a0f05ba7c755ed1f4c0d5ed.1588715690.git.reinette.chatre@intel.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The original Memory Bandwidth Monitoring (MBM) architectural definition defines counters of up to 62 bits in the IA32_QM_CTR MSR while the first-generation MBM implementation uses statically defined 24 bit counters. The MBM CPUID enumeration properties have been expanded to include the MBM counter width, encoded as an offset from 24 bits. While eight bits are available for the counter width offset IA32_QM_CTR MSR only supports 62 bit counters. A sanity check, with warning printed when encountered, is added to ensure counters cannot exceed the 62 bit limit. Signed-off-by: Reinette Chatre --- arch/x86/kernel/cpu/resctrl/internal.h | 8 +++++++- arch/x86/kernel/cpu/resctrl/monitor.c | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/resctrl/internal.h index 58b002c31655..f20a47d120b1 100644 --- a/arch/x86/kernel/cpu/resctrl/internal.h +++ b/arch/x86/kernel/cpu/resctrl/internal.h @@ -31,7 +31,7 @@ #define CQM_LIMBOCHECK_INTERVAL 1000 -#define MBM_CNTR_WIDTH 24 +#define MBM_CNTR_WIDTH_BASE 24 #define MBM_OVERFLOW_INTERVAL 1000 #define MAX_MBA_BW 100u #define MBA_IS_LINEAR 0x4 @@ -40,6 +40,12 @@ #define RMID_VAL_ERROR BIT_ULL(63) #define RMID_VAL_UNAVAIL BIT_ULL(62) +/* + * With the above fields in use 62 bits remain in MSR_IA32_QM_CTR for + * data to be returned. The counter width is discovered from the hardware + * as an offset from MBM_CNTR_WIDTH_BASE. + */ +#define MBM_CNTR_WIDTH_OFFSET_MAX (62 - MBM_CNTR_WIDTH_BASE) struct rdt_fs_context { diff --git a/arch/x86/kernel/cpu/resctrl/monitor.c b/arch/x86/kernel/cpu/resctrl/monitor.c index df964c03f6c6..837d7d012b7b 100644 --- a/arch/x86/kernel/cpu/resctrl/monitor.c +++ b/arch/x86/kernel/cpu/resctrl/monitor.c @@ -618,12 +618,18 @@ static void l3_mon_evt_init(struct rdt_resource *r) int rdt_get_mon_l3_config(struct rdt_resource *r) { + unsigned int mbm_offset = boot_cpu_data.x86_cache_mbm_width_offset; unsigned int cl_size = boot_cpu_data.x86_cache_size; int ret; r->mon_scale = boot_cpu_data.x86_cache_occ_scale; r->num_rmid = boot_cpu_data.x86_cache_max_rmid + 1; - r->mbm_width = MBM_CNTR_WIDTH; + r->mbm_width = MBM_CNTR_WIDTH_BASE; + + if (mbm_offset > 0 && mbm_offset <= MBM_CNTR_WIDTH_OFFSET_MAX) + r->mbm_width += mbm_offset; + else if (mbm_offset > MBM_CNTR_WIDTH_OFFSET_MAX) + pr_warn("Ignoring impossible MBM counter offset\n"); /* * A reasonable upper limit on the max threshold is the number -- 2.21.0