From patchwork Wed Feb 15 08:49:29 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yi Sun X-Patchwork-Id: 9573583 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 CB66960493 for ; Wed, 15 Feb 2017 08:55:36 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BD60B28448 for ; Wed, 15 Feb 2017 08:55:36 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B1EBD2844C; Wed, 15 Feb 2017 08:55:36 +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 63DAC28448 for ; Wed, 15 Feb 2017 08:55:36 +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 1cdvLB-0007fA-TJ; Wed, 15 Feb 2017 08:53:33 +0000 Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cdvLA-0007dB-5k for xen-devel@lists.xenproject.org; Wed, 15 Feb 2017 08:53:32 +0000 Received: from [193.109.254.147] by server-10.bemta-6.messagelabs.com id 3F/D4-13192-B0714A85; Wed, 15 Feb 2017 08:53:31 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrPLMWRWlGSWpSXmKPExsXS1tYhocslviT CYGmTjcX3LZOZHBg9Dn+4whLAGMWamZeUX5HAmnH/wTLGgrmSFS/WXmFqYGwX6mLk4hASmMYo sfj/a8YuRk4OCQFeiSPLZrBC2AESN69cZYQoamCU+P//JjtIgk1AXeLx1x4mEFtEQEni3qrJT CBFzAKLmCRWTPrOBpIQBuqeO7cfrIFFQFViSddXsAZeAQ+JP4/WQW2Qkzh5bDKYzQkUP3ZhDp gtJOAucbRnGtMERt4FjAyrGNWLU4vKUot0zfSSijLTM0pyEzNzdA0NzPRyU4uLE9NTcxKTivW S83M3MQIDggEIdjDOO+F/iFGSg0lJlJft2OIIIb6k/JTKjMTijPii0pzU4kOMMhwcShK8TGJL IoQEi1LTUyvSMnOAoQmTluDgURLh/SkKlOYtLkjMLc5Mh0idYlSUEuf9CJIQAElklObBtcHi4 RKjrJQwLyPQIUI8BalFuZklqPKvGMU5GJWEef+DTOHJzCuBm/4KaDET0GLWuIUgi0sSEVJSDY xadreXNLMaT2YpXXQ3zly1Lrbz41L1vVrJz19smiu3XcbcT6WbIfFFz+u1s1c39Sp6JTmrT+D TeH8mhOm1Z3teapr33IRvCo/ezuU/OPuv6iwWfr00nbXnosQmHIify5o0Re73jENvz1V0Csud L2WYcVLFqELgDrP1n74vLcU1X1yvf559XU6JpTgj0VCLuag4EQAsx1dOggIAAA== X-Env-Sender: yi.y.sun@linux.intel.com X-Msg-Ref: server-8.tower-27.messagelabs.com!1487148772!76852937!15 X-Originating-IP: [134.134.136.24] X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: VHJ1c3RlZCBJUDogMTM0LjEzNC4xMzYuMjQgPT4gMzkwOTcx\n X-StarScan-Received: X-StarScan-Version: 9.2.3; banners=-,-,- X-VirusChecked: Checked Received: (qmail 28216 invoked from network); 15 Feb 2017 08:53:30 -0000 Received: from mga09.intel.com (HELO mga09.intel.com) (134.134.136.24) by server-8.tower-27.messagelabs.com with DHE-RSA-AES256-GCM-SHA384 encrypted SMTP; 15 Feb 2017 08:53:30 -0000 Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 15 Feb 2017 00:53:30 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos; i="5.35,165,1484035200"; d="scan'208"; a="1094969762" Received: from vmmmba-s2600wft.bj.intel.com ([10.240.193.63]) by orsmga001.jf.intel.com with ESMTP; 15 Feb 2017 00:53:27 -0800 From: Yi Sun To: xen-devel@lists.xenproject.org Date: Wed, 15 Feb 2017 16:49:29 +0800 Message-Id: <1487148579-7243-15-git-send-email-yi.y.sun@linux.intel.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1487148579-7243-1-git-send-email-yi.y.sun@linux.intel.com> References: <1487148579-7243-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 v8 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 4c08779..72c9888 100644 --- a/xen/arch/x86/psr.c +++ b/xen/arch/x86/psr.c @@ -270,6 +270,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; @@ -528,8 +532,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;