From patchwork Thu Jan 19 06:01:16 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yi Sun X-Patchwork-Id: 9525237 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 DA5B360437 for ; Thu, 19 Jan 2017 06:05:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C6EFC2860C for ; Thu, 19 Jan 2017 06:05:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BB90E28641; Thu, 19 Jan 2017 06:05:44 +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 6513E2860C for ; Thu, 19 Jan 2017 06:05:44 +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 1cU5om-0007FN-1a; Thu, 19 Jan 2017 06:03:28 +0000 Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cU5ok-0007BL-54 for xen-devel@lists.xenproject.org; Thu, 19 Jan 2017 06:03:26 +0000 Received: from [85.158.137.68] by server-12.bemta-3.messagelabs.com id 7C/B3-16730-DA650885; Thu, 19 Jan 2017 06:03:25 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrALMWRWlGSWpSXmKPExsVywNykWHdtWEO EwZZffBbft0xmcmD0OPzhCksAYxRrZl5SfkUCa8aOaZdZC15IVjx8N429gXGPUBcjF4eQwHRG ic+LHrJ2MXJySAjwShxZNgPK9pf4fPkdM0RRA6PEkj87mUESbALqEo+/9jCB2CICShL3Vk1mA iliFuhmklj5cCsLSEJYIFxifcd7NhCbRUBVYvGLb2BTeQU8JN42dLFDbJCTOHlsMlicEyh+Zf 4FsLiQgLvElhWXmCYw8i5gZFjFqFGcWlSWWqRrbKCXVJSZnlGSm5iZo2toYKyXm1pcnJiempO YVKyXnJ+7iREYEvUMDIw7GDtP+B1ilORgUhLltbdsiBDiS8pPqcxILM6ILyrNSS0+xCjDwaEk wTsnFCgnWJSanlqRlpkDDE6YtAQHj5IIbxVImre4IDG3ODMdInWKUVFKnDcKJCEAksgozYNrg 0XEJUZZKWFeRgYGBiGegtSi3MwSVPlXjOIcjErCvN9BpvBk5pXATX8FtJgJaLGVcj3I4pJEhJ RUAyPD9B7WzQvjriotL+HtO1E4e0m7efzBVp1jIdwKEmLVXy0OKC5+kVjUvurMG91QfZ9yw7k SAm++35v9oGXa2fmHN8psKpWa3P6k7ZvXvR12ztNsmRK+9eZxyvx/w28o2Wj1bE8CT5fvtcRp 7tdbWOYIfuTYyya/x9PyX5PHNoN7uz7tCdJU+anEUpyRaKjFXFScCACqizNcgwIAAA== X-Env-Sender: yi.y.sun@linux.intel.com X-Msg-Ref: server-13.tower-31.messagelabs.com!1484805800!80652688!3 X-Originating-IP: [192.55.52.115] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 9.1.1; banners=-,-,- X-VirusChecked: Checked Received: (qmail 3617 invoked from network); 19 Jan 2017 06:03:24 -0000 Received: from mga14.intel.com (HELO mga14.intel.com) (192.55.52.115) by server-13.tower-31.messagelabs.com with DHE-RSA-AES256-GCM-SHA384 encrypted SMTP; 19 Jan 2017 06:03:24 -0000 Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 18 Jan 2017 22:03:14 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,252,1477983600"; d="scan'208";a="215119544" Received: from vmmmba-s2600wft.bj.intel.com ([10.240.193.63]) by fmsmga004.fm.intel.com with ESMTP; 18 Jan 2017 22:03:12 -0800 From: Yi Sun To: xen-devel@lists.xenproject.org Date: Thu, 19 Jan 2017 14:01:16 +0800 Message-Id: <1484805686-7249-15-git-send-email-yi.y.sun@linux.intel.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1484805686-7249-1-git-send-email-yi.y.sun@linux.intel.com> References: <1484805686-7249-1-git-send-email-yi.y.sun@linux.intel.com> Cc: wei.liu2@citrix.com, konrad.wilk@oracle.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 RESEND v5 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 --- v5: - rename 'dat[]' to 'data[]' - remove type check in callback function. --- 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 a979128..b856761 100644 --- a/xen/arch/x86/psr.c +++ b/xen/arch/x86/psr.c @@ -262,6 +262,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 = 0xFFFF; break; @@ -516,8 +520,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 d90db78..a4c8cfe 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;