xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Yi Sun <yi.y.sun@linux.intel.com>
To: xen-devel@lists.xenproject.org
Cc: "Wei Liu" <wei.liu2@citrix.com>,
	"Yi Sun" <yi.y.sun@linux.intel.com>,
	"Andrew Cooper" <andrew.cooper3@citrix.com>,
	"Jan Beulich" <jbeulich@suse.com>,
	"Chao Peng" <chao.p.peng@linux.intel.com>,
	"Roger Pau Monné" <roger.pau@citrix.com>
Subject: [PATCH v5 04/16] x86: a few optimizations to psr codes
Date: Sat, 30 Sep 2017 09:39:14 +0800	[thread overview]
Message-ID: <1506735566-5706-5-git-send-email-yi.y.sun@linux.intel.com> (raw)
In-Reply-To: <1506735566-5706-1-git-send-email-yi.y.sun@linux.intel.com>

This patch refines psr codes:
1. Change type of 'cat_init_feature' to 'bool' to remove the pointless
   returning of error code.
2. Move printk in 'cat_init_feature' to reduce a return path.
3. Define a local variable 'ebx' in 'psr_cpu_init' to reduce calling of
   'cpuid_count_leaf()'.
4. Change type of 'write_msr()' to 'uint32_t'. This is needed by later patch:
   "x86: implement set value flow for MBA".

Signed-off-by: Yi Sun <yi.y.sun@linux.intel.com>
---
CC: Jan Beulich <jbeulich@suse.com>
CC: Andrew Cooper <andrew.cooper3@citrix.com>
CC: Wei Liu <wei.liu2@citrix.com>
CC: Roger Pau Monné <roger.pau@citrix.com>
CC: Chao Peng <chao.p.peng@linux.intel.com>

v1:
    - create this patch to make codes clearer.
      (suggested by Jan Beulich and Roger Pau Monné)
---
 xen/arch/x86/psr.c | 55 +++++++++++++++++++++++++++++-------------------------
 1 file changed, 30 insertions(+), 25 deletions(-)

diff --git a/xen/arch/x86/psr.c b/xen/arch/x86/psr.c
index ac2ae32..c8db0c1 100644
--- a/xen/arch/x86/psr.c
+++ b/xen/arch/x86/psr.c
@@ -117,7 +117,7 @@ static const struct feat_props {
                           uint32_t data[], unsigned int array_len);
 
     /* write_msr is used to write out feature MSR register. */
-    void (*write_msr)(unsigned int cos, uint32_t val, enum psr_type type);
+    uint32_t (*write_msr)(unsigned int cos, uint32_t val, enum psr_type type);
 } *feat_props[FEAT_TYPE_NUM];
 
 /*
@@ -273,10 +273,10 @@ static bool psr_check_cbm(unsigned int cbm_len, unsigned long cbm)
 }
 
 /* CAT common functions implementation. */
-static int cat_init_feature(const struct cpuid_leaf *regs,
-                            struct feat_node *feat,
-                            struct psr_socket_info *info,
-                            enum psr_feat_type type)
+static bool cat_init_feature(const struct cpuid_leaf *regs,
+                             struct feat_node *feat,
+                             struct psr_socket_info *info,
+                             enum psr_feat_type type)
 {
     const char *const cat_feat_name[FEAT_TYPE_NUM] = {
         [FEAT_TYPE_L3_CAT] = "L3 CAT",
@@ -286,7 +286,7 @@ static int cat_init_feature(const struct cpuid_leaf *regs,
 
     /* No valid value so do not enable feature. */
     if ( !regs->a || !regs->d )
-        return -ENOENT;
+        return false;
 
     feat->cbm_len = (regs->a & CAT_CBM_LEN_MASK) + 1;
     feat->cos_max = min(opt_cos_max, regs->d & CAT_COS_MAX_MASK);
@@ -296,7 +296,7 @@ static int cat_init_feature(const struct cpuid_leaf *regs,
     case FEAT_TYPE_L3_CAT:
     case FEAT_TYPE_L2_CAT:
         if ( feat->cos_max < 1 )
-            return -ENOENT;
+            return false;
 
         /* We reserve cos=0 as default cbm (all bits within cbm_len are 1). */
         feat->cos_reg_val[0] = cat_default_val(feat->cbm_len);
@@ -313,7 +313,7 @@ static int cat_init_feature(const struct cpuid_leaf *regs,
         uint64_t val;
 
         if ( feat->cos_max < 3 )
-            return -ENOENT;
+            return false;
 
         /* Cut half of cos_max when CDP is enabled. */
         feat->cos_max = (feat->cos_max - 1) >> 1;
@@ -332,20 +332,18 @@ static int cat_init_feature(const struct cpuid_leaf *regs,
     }
 
     default:
-        return -ENOENT;
+        return false;
     }
 
     /* Add this feature into array. */
     info->features[type] = feat;
 
-    if ( !opt_cpu_info )
-        return 0;
-
-    printk(XENLOG_INFO "%s: enabled on socket %u, cos_max:%u, cbm_len:%u\n",
-           cat_feat_name[type], cpu_to_socket(smp_processor_id()),
-           feat->cos_max, feat->cbm_len);
+    if ( opt_cpu_info )
+        printk(XENLOG_INFO "%s: enabled on socket %u, cos_max:%u, cbm_len:%u\n",
+               cat_feat_name[type], cpu_to_socket(smp_processor_id()),
+               feat->cos_max, feat->cbm_len);
 
-    return 0;
+    return true;
 }
 
 static bool cat_get_feat_info(const struct feat_node *feat,
@@ -362,10 +360,12 @@ static bool cat_get_feat_info(const struct feat_node *feat,
 }
 
 /* L3 CAT props */
-static void l3_cat_write_msr(unsigned int cos, uint32_t val,
-                             enum psr_type type)
+static uint32_t l3_cat_write_msr(unsigned int cos, uint32_t val,
+                                 enum psr_type type)
 {
     wrmsrl(MSR_IA32_PSR_L3_MASK(cos), val);
+
+    return val;
 }
 
 static const struct feat_props l3_cat_props = {
@@ -388,13 +388,15 @@ static bool l3_cdp_get_feat_info(const struct feat_node *feat,
     return true;
 }
 
-static void l3_cdp_write_msr(unsigned int cos, uint32_t val,
-                             enum psr_type type)
+static uint32_t l3_cdp_write_msr(unsigned int cos, uint32_t val,
+                                 enum psr_type type)
 {
     wrmsrl(((type == PSR_TYPE_L3_DATA) ?
             MSR_IA32_PSR_L3_MASK_DATA(cos) :
             MSR_IA32_PSR_L3_MASK_CODE(cos)),
            val);
+
+    return val;
 }
 
 static const struct feat_props l3_cdp_props = {
@@ -407,10 +409,12 @@ static const struct feat_props l3_cdp_props = {
 };
 
 /* L2 CAT props */
-static void l2_cat_write_msr(unsigned int cos, uint32_t val,
-                             enum psr_type type)
+static uint32_t l2_cat_write_msr(unsigned int cos, uint32_t val,
+                                 enum psr_type type)
 {
     wrmsrl(MSR_IA32_PSR_L2_MASK(cos), val);
+
+    return val;
 }
 
 static const struct feat_props l2_cat_props = {
@@ -1410,6 +1414,7 @@ static void psr_cpu_init(void)
     unsigned int socket, cpu = smp_processor_id();
     struct feat_node *feat;
     struct cpuid_leaf regs;
+    uint32_t ebx;
 
     if ( !psr_alloc_feat_enabled() || !boot_cpu_has(X86_FEATURE_PQE) )
         goto assoc_init;
@@ -1428,7 +1433,8 @@ static void psr_cpu_init(void)
     spin_lock_init(&info->ref_lock);
 
     cpuid_count_leaf(PSR_CPUID_LEVEL_CAT, 0, &regs);
-    if ( regs.b & PSR_RESOURCE_TYPE_L3 )
+    ebx = regs.b;
+    if ( ebx & PSR_RESOURCE_TYPE_L3 )
     {
         cpuid_count_leaf(PSR_CPUID_LEVEL_CAT, 1, &regs);
 
@@ -1449,8 +1455,7 @@ static void psr_cpu_init(void)
         }
     }
 
-    cpuid_count_leaf(PSR_CPUID_LEVEL_CAT, 0, &regs);
-    if ( regs.b & PSR_RESOURCE_TYPE_L2 )
+    if ( ebx & PSR_RESOURCE_TYPE_L2 )
     {
         cpuid_count_leaf(PSR_CPUID_LEVEL_CAT, 2, &regs);
 
-- 
1.9.1


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

  parent reply	other threads:[~2017-09-30  1:59 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-30  1:39 [PATCH v5 00/16] Enable Memory Bandwidth Allocation in Xen Yi Sun
2017-09-30  1:39 ` [PATCH v5 01/16] docs: create Memory Bandwidth Allocation (MBA) feature document Yi Sun
2017-10-06 14:59   ` Roger Pau Monné
2017-09-30  1:39 ` [PATCH v5 02/16] Rename PSR sysctl/domctl interfaces and xsm policy to make them be general Yi Sun
2017-10-05 11:36   ` Wei Liu
2017-10-06 16:53   ` Roger Pau Monné
2017-10-09  8:12     ` Jan Beulich
2017-09-30  1:39 ` [PATCH v5 03/16] x86: rename 'cbm_type' to 'psr_type' to make it general Yi Sun
2017-09-30  1:39 ` Yi Sun [this message]
2017-10-06 16:59   ` [PATCH v5 04/16] x86: a few optimizations to psr codes Roger Pau Monné
2017-09-30  1:39 ` [PATCH v5 05/16] x86: implement data structure and CPU init flow for MBA Yi Sun
2017-10-06 17:13   ` Roger Pau Monné
2017-09-30  1:39 ` [PATCH v5 06/16] x86: implement get hw info " Yi Sun
2017-10-06 17:16   ` Roger Pau Monné
2017-09-30  1:39 ` [PATCH v5 07/16] x86: implement get value interface " Yi Sun
2017-09-30  1:39 ` [PATCH v5 08/16] x86: implement set value flow " Yi Sun
2017-10-06 17:18   ` Roger Pau Monné
2017-09-30  1:39 ` [PATCH v5 09/16] tools: create general interfaces to support psr allocation features Yi Sun
2017-10-05 11:31   ` Wei Liu
2017-10-06 17:20   ` Roger Pau Monné
2017-09-30  1:39 ` [PATCH v5 10/16] tools: implement the new libxc get hw info interface Yi Sun
2017-10-05 11:31   ` Wei Liu
2017-10-06 17:25   ` Roger Pau Monné
2017-09-30  1:39 ` [PATCH v5 11/16] tools: implement the new libxl " Yi Sun
2017-10-05 11:31   ` Wei Liu
2017-09-30  1:39 ` [PATCH v5 12/16] tools: implement the new xl " Yi Sun
2017-10-05 11:31   ` Wei Liu
2017-09-30  1:39 ` [PATCH v5 13/16] tools: rename 'xc_psr_cat_type' to 'xc_psr_type' Yi Sun
2017-09-30  1:39 ` [PATCH v5 14/16] tools: implement new generic get value interface and MBA get value command Yi Sun
2017-10-06 17:30   ` Roger Pau Monné
2017-09-30  1:39 ` [PATCH v5 15/16] tools: implement new generic set value interface and MBA set " Yi Sun
2017-10-05 11:31   ` Wei Liu
2017-10-06 17:33   ` Roger Pau Monné
2017-09-30  1:39 ` [PATCH v5 16/16] docs: add MBA description in docs Yi Sun
2017-10-05 11:27 ` [PATCH v5 00/16] Enable Memory Bandwidth Allocation in Xen Wei Liu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1506735566-5706-5-git-send-email-yi.y.sun@linux.intel.com \
    --to=yi.y.sun@linux.intel.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=chao.p.peng@linux.intel.com \
    --cc=jbeulich@suse.com \
    --cc=roger.pau@citrix.com \
    --cc=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).