From patchwork Wed Dec 14 04:07:54 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yi Sun X-Patchwork-Id: 9474041 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 86DC360823 for ; Wed, 14 Dec 2016 11:12:32 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7E8172871B for ; Wed, 14 Dec 2016 11:12:32 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7363E2871F; Wed, 14 Dec 2016 11:12:32 +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=-2.7 required=2.0 tests=BAYES_00, DATE_IN_PAST_06_12, 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 2231A2871B for ; Wed, 14 Dec 2016 11:12:32 +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 1cH7Ry-0005kQ-Ra; Wed, 14 Dec 2016 11:10:18 +0000 Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cH7Rx-0005it-Ov for xen-devel@lists.xenproject.org; Wed, 14 Dec 2016 11:10:17 +0000 Received: from [85.158.143.35] by server-4.bemta-6.messagelabs.com id 42/40-25093-99821585; Wed, 14 Dec 2016 11:10:17 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrDLMWRWlGSWpSXmKPExsXS1tYhoTtDIzD C4Nl+NYvvWyYzOTB6HP5whSWAMYo1My8pvyKBNaN5wWq2gqviFWd23WZtYHwi0MXIwSEkUCHx 5IBoFyMnh4QAr8SRZTNYQcISAn4Sb7vFuhi5gCoaGCU6Fy9nBKlhE1CXePy1hwnEFhFQkri3a jITSBGzQDeTxMqHW1lAEsICARIr+3+yg9gsAqoSbU8OsoLYvAIeEj+3/2eHWCYncfLYZLBlnE Dxf1sSQcJCAu4SF3vfsU9g5F3AyLCKUaM4tagstUjXyFgvqSgzPaMkNzEzR9fQwEwvN7W4ODE 9NScxqVgvOT93EyMwFBiAYAfjn/mBhxglOZiURHm5rgZECPEl5adUZiQWZ8QXleakFh9ilOHg UJLgnaUeGCEkWJSanlqRlpkDDEqYtAQHj5IIb5AKUJq3uCAxtzgzHSJ1ilFRSpx3JUifAEgio zQPrg0WCZcYZaWEeRmBDhHiKUgtys0sQZV/xSjOwagkzLsBZApPZl4J3PRXQIuZgBaLLvEHWV ySiJCSamCUiXVbuSX88w/9ugOL/beLaLjXy+7lyjXg8dzL+jy+ms9s5slFHw/Om3hn0ZXNdrO SBB4EVTsU8f3YN+WBcM0c2eSljXwXrs0MEZ908OC76xkMDm9P7H4WdZL5wt/bHBxJj7fXm2xv OzmdY46xvHnQpN9X1x2rnqWl+uaZg2jiehGJJdy6/ZdWKbEUZyQaajEXFScCAEYrulB/AgAA X-Env-Sender: yi.y.sun@linux.intel.com X-Msg-Ref: server-12.tower-21.messagelabs.com!1481713769!48240089!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.1.1; banners=-,-,- X-VirusChecked: Checked Received: (qmail 23359 invoked from network); 14 Dec 2016 11:10:16 -0000 Received: from mga09.intel.com (HELO mga09.intel.com) (134.134.136.24) by server-12.tower-21.messagelabs.com with DHE-RSA-AES256-GCM-SHA384 encrypted SMTP; 14 Dec 2016 11:10:16 -0000 Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP; 14 Dec 2016 03:10:15 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,346,1477983600"; d="scan'208";a="39863325" Received: from vmmmba-s2600wft.bj.intel.com ([10.240.193.63]) by orsmga004.jf.intel.com with ESMTP; 14 Dec 2016 03:10:13 -0800 From: Yi Sun To: xen-devel@lists.xenproject.org Date: Wed, 14 Dec 2016 12:07:54 +0800 Message-Id: <1481688484-5093-15-git-send-email-yi.y.sun@linux.intel.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1481688484-5093-1-git-send-email-yi.y.sun@linux.intel.com> References: <1481688484-5093-1-git-send-email-yi.y.sun@linux.intel.com> Cc: 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 v4 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 | 16 ++++++++++++++++ xen/arch/x86/sysctl.c | 24 +++++++++++++++++++++--- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/xen/arch/x86/psr.c b/xen/arch/x86/psr.c index 09da12c..99add7a 100644 --- a/xen/arch/x86/psr.c +++ b/xen/arch/x86/psr.c @@ -548,9 +548,25 @@ static unsigned int l3_cdp_get_max_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, + enum cbm_type type, + uint32_t dat[], uint32_t array_len) +{ + if ( !dat || 3 > array_len || + ( type != PSR_CBM_TYPE_L3_DATA && type != PSR_CBM_TYPE_L3_CODE) ) + return false; + + dat[CBM_LEN] = feat->info.l3_cdp_info.cbm_len; + dat[COS_MAX] = feat->info.l3_cdp_info.cos_max; + dat[CDP_FLAG] |= XEN_SYSCTL_PSR_CAT_L3_CDP; + + return true; +} + struct feat_ops l3_cdp_ops = { .init_feature = l3_cdp_init_feature, .get_max_cos_max = l3_cdp_get_max_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 168ed45..846eeaf 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, dat, 3); - sysctl->u.psr_cat_op.u.l3_info.cbm_len = dat[CBM_LEN]; - sysctl->u.psr_cat_op.u.l3_info.cos_max = dat[COS_MAX]; - sysctl->u.psr_cat_op.u.l3_info.flags = dat[CDP_FLAG]; + if ( !ret ) + { + sysctl->u.psr_cat_op.u.l3_info.cbm_len = dat[CBM_LEN]; + sysctl->u.psr_cat_op.u.l3_info.cos_max = dat[COS_MAX]; + sysctl->u.psr_cat_op.u.l3_info.flags = dat[CDP_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, dat, 3); + if ( !ret ) + { + sysctl->u.psr_cat_op.u.l3_info.cbm_len = dat[CBM_LEN]; + sysctl->u.psr_cat_op.u.l3_info.cos_max = dat[COS_MAX]; + sysctl->u.psr_cat_op.u.l3_info.flags = dat[CDP_FLAG]; + } + } if ( !ret && __copy_field_to_guest(u_sysctl, sysctl, u.psr_cat_op) ) ret = -EFAULT;