From patchwork Mon Feb 13 06:32:26 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yi Sun X-Patchwork-Id: 9568879 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 1FE6F6045D for ; Mon, 13 Feb 2017 06:38:26 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0D9262823E for ; Mon, 13 Feb 2017 06:38:26 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id F2F8328210; Mon, 13 Feb 2017 06:38:25 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 9E7B22818E for ; Mon, 13 Feb 2017 06:38:25 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cdAFL-0006Ld-1k; Mon, 13 Feb 2017 06:36:23 +0000 Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cdAFI-0006IN-TG for xen-devel@lists.xenproject.org; Mon, 13 Feb 2017 06:36:20 +0000 Received: from [85.158.139.211] by server-2.bemta-5.messagelabs.com id AF/30-01955-4E351A85; Mon, 13 Feb 2017 06:36:20 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrHLMWRWlGSWpSXmKPExsXS1tbhqPs4eGG EwbwFahbft0xmcmD0OPzhCksAYxRrZl5SfkUCa0bHuWeMBXMlK14veMDSwNgu1MXIxSEkMJ1R 4t6sdUxdjJwcEgK8EkeWzWDtYuQAsv0lts4XhahpYJS48aSXGaSGTUBd4vHXHrB6EQEliXurJ jOBFDELLGKSWDHpOxtIQlggQGLHoy4WkEEsAqoSpx8XgIR5BTwkvtxeA7VLTuLkscmsIDYnUP zIofeMILaQgLtE/65NLBMYeRcwMqxi1ChOLSpLLdI1NNJLKspMzyjJTczM0TU0MNXLTS0uTkx PzUlMKtZLzs/dxAgMBwYg2MHYN8v5EKMkB5OSKG+1/cIIIb6k/JTKjMTijPii0pzU4kOMMhwc ShK8bkFAOcGi1PTUirTMHGBgwqQlOHiURHhTQNK8xQWJucWZ6RCpU4yKUuK8aiAJAZBERmkeX BssGi4xykoJ8zICHSLEU5BalJtZgir/ilGcg1FJmPdPINAUnsy8Erjpr4AWMwEtdn0wF2RxSS JCSqqBscvims1nz7NuqUWXbPacWRr0YCube1dfsLeGz1ev3V/VeibGn7lxq49pqohN7ZaTxk7 HHgdI6T169Nd2WzdHYOC5h4el4ryCWy7c+vdNVyRh+YyL//XdRRomHRR37dZ79aw/6Vt3rrtp v8QO1iX3lnD92XiodPZBjzrBJ4bh9z2YX9SZWRpLK7EUZyQaajEXFScCADBcm1GBAgAA X-Env-Sender: yi.y.sun@linux.intel.com X-Msg-Ref: server-5.tower-206.messagelabs.com!1486967776!82924391!2 X-Originating-IP: [134.134.136.65] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 9.2.3; banners=-,-,- X-VirusChecked: Checked Received: (qmail 65457 invoked from network); 13 Feb 2017 06:36:19 -0000 Received: from mga03.intel.com (HELO mga03.intel.com) (134.134.136.65) by server-5.tower-206.messagelabs.com with DHE-RSA-AES256-GCM-SHA384 encrypted SMTP; 13 Feb 2017 06:36:19 -0000 Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 12 Feb 2017 22:36:16 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.35,155,1484035200"; d="scan'208";a="224551724" Received: from vmmmba-s2600wft.bj.intel.com ([10.240.193.63]) by fmsmga004.fm.intel.com with ESMTP; 12 Feb 2017 22:36:14 -0800 From: Yi Sun To: xen-devel@lists.xenproject.org Date: Mon, 13 Feb 2017 14:32:26 +0800 Message-Id: <1486967556-3702-15-git-send-email-yi.y.sun@linux.intel.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1486967556-3702-1-git-send-email-yi.y.sun@linux.intel.com> References: <1486967556-3702-1-git-send-email-yi.y.sun@linux.intel.com> Cc: kevin.tian@intel.com, wei.liu2@citrix.com, andrew.cooper3@citrix.com, dario.faggioli@citrix.com, he.chen@linux.intel.com, ian.jackson@eu.citrix.com, Yi Sun , mengxu@cis.upenn.edu, jbeulich@suse.com, chao.p.peng@linux.intel.com Subject: [Xen-devel] [PATCH v7 14/24] x86: refactor psr: implement get hw info flow for CDP. X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP This patch implements get HW info flow for CDP including L3 CDP callback function. It also changes sysctl function to make it work for CDP. With this patch, 'psr-hwinfo' can work for L3 CDP. Signed-off-by: Yi Sun --- xen/arch/x86/psr.c | 18 ++++++++++++++++++ xen/arch/x86/sysctl.c | 24 +++++++++++++++++++++--- 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/xen/arch/x86/psr.c b/xen/arch/x86/psr.c index 2e061b5..71bfdd6 100644 --- a/xen/arch/x86/psr.c +++ b/xen/arch/x86/psr.c @@ -267,6 +267,10 @@ static enum psr_feat_type psr_cbm_type_to_feat_type(enum cbm_type type) case PSR_CBM_TYPE_L3: feat_type = PSR_SOCKET_L3_CAT; break; + case PSR_CBM_TYPE_L3_DATA: + case PSR_CBM_TYPE_L3_CODE: + feat_type = PSR_SOCKET_L3_CDP; + break; default: feat_type = PSR_SOCKET_UNKNOWN; break; @@ -525,8 +529,22 @@ static unsigned int l3_cdp_get_cos_max(const struct feat_node *feat) return feat->info.l3_cdp_info.cos_max; } +static bool l3_cdp_get_feat_info(const struct feat_node *feat, + uint32_t data[], uint32_t array_len) +{ + if ( !data || 3 > array_len ) + return false; + + data[CBM_LEN] = feat->info.l3_cdp_info.cbm_len; + data[COS_MAX] = feat->info.l3_cdp_info.cos_max; + data[PSR_FLAG] |= XEN_SYSCTL_PSR_CAT_L3_CDP; + + return true; +} + struct feat_ops l3_cdp_ops = { .get_cos_max = l3_cdp_get_cos_max, + .get_feat_info = l3_cdp_get_feat_info, }; static void __init parse_psr_bool(char *s, char *value, char *feature, diff --git a/xen/arch/x86/sysctl.c b/xen/arch/x86/sysctl.c index e340baa..568bfe9 100644 --- a/xen/arch/x86/sysctl.c +++ b/xen/arch/x86/sysctl.c @@ -181,9 +181,27 @@ long arch_do_sysctl( ret = psr_get_info(sysctl->u.psr_cat_op.target, PSR_CBM_TYPE_L3, data, 3); - sysctl->u.psr_cat_op.u.l3_info.cbm_len = data[CBM_LEN]; - sysctl->u.psr_cat_op.u.l3_info.cos_max = data[COS_MAX]; - sysctl->u.psr_cat_op.u.l3_info.flags = data[PSR_FLAG]; + if ( !ret ) + { + sysctl->u.psr_cat_op.u.l3_info.cbm_len = data[CBM_LEN]; + sysctl->u.psr_cat_op.u.l3_info.cos_max = data[COS_MAX]; + sysctl->u.psr_cat_op.u.l3_info.flags = data[PSR_FLAG]; + } else { + /* + * Check if CDP is enabled. + * + * Per spec, L3 CAT and CDP cannot co-exist. So, we need replace + * output values to CDP's if it is enabled. + */ + ret = psr_get_info(sysctl->u.psr_cat_op.target, + PSR_CBM_TYPE_L3_CODE, data, 3); + if ( !ret ) + { + sysctl->u.psr_cat_op.u.l3_info.cbm_len = data[CBM_LEN]; + sysctl->u.psr_cat_op.u.l3_info.cos_max = data[COS_MAX]; + sysctl->u.psr_cat_op.u.l3_info.flags = data[PSR_FLAG]; + } + } if ( !ret && __copy_field_to_guest(u_sysctl, sysctl, u.psr_cat_op) ) ret = -EFAULT;