]> xenbits.xensource.com Git - xen.git/commitdiff
x86/mtrr: introduce mask to get VCNT from MTRRcap MSR
authorRoger Pau Monné <roger.pau@citrix.com>
Thu, 5 Jul 2018 13:28:56 +0000 (15:28 +0200)
committerJan Beulich <jbeulich@suse.com>
Thu, 5 Jul 2018 13:28:56 +0000 (15:28 +0200)
No functional change.

Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
xen/arch/x86/cpu/mtrr/main.c
xen/arch/x86/hvm/mtrr.c
xen/include/asm-x86/msr-index.h

index 56f71a6e1f3df67bb74085d65ce83bf2270aa1f0..e9df53f00d616713b0a3d9c692d84bebba6ab0bc 100644 (file)
@@ -95,7 +95,7 @@ static void __init set_num_var_ranges(void)
                config = 2;
        else if (is_cpu(CENTAUR))
                config = 8;
-       num_var_ranges = config & 0xff;
+       num_var_ranges = MASK_EXTR(config, MTRRcap_VCNT);
 }
 
 static void __init init_table(void)
index c78e5c17ad54c531ea2eb0d713a74201b12ad1ac..c2927fb4373e9322e8dbeae3109895ba94a6c366 100644 (file)
@@ -78,7 +78,7 @@ static uint8_t __read_mostly pat_entry_tbl[PAT_TYPE_NUMS] =
 bool_t is_var_mtrr_overlapped(const struct mtrr_state *m)
 {
     unsigned int seg, i;
-    unsigned int num_var_ranges = (uint8_t)m->mtrr_cap;
+    unsigned int num_var_ranges = MASK_EXTR(m->mtrr_cap, MTRRcap_VCNT);
 
     for ( i = 0; i < num_var_ranges; i++ )
     {
@@ -193,7 +193,7 @@ static int get_mtrr_type(const struct mtrr_state *m,
    uint8_t     overlap_mtrr = 0;
    uint8_t     overlap_mtrr_pos = 0;
    uint64_t    mask = -(uint64_t)PAGE_SIZE << order;
-   unsigned int seg, num_var_ranges = m->mtrr_cap & 0xff;
+   unsigned int seg, num_var_ranges = MASK_EXTR(m->mtrr_cap, MTRRcap_VCNT);
 
    if ( unlikely(!(m->enabled & 0x2)) )
        return MTRR_TYPE_UNCACHABLE;
@@ -483,7 +483,7 @@ bool mtrr_pat_not_equal(const struct vcpu *vd, const struct vcpu *vs)
 
     if ( md->enabled & 2 )
     {
-        unsigned int num_var_ranges = (uint8_t)md->mtrr_cap;
+        unsigned int num_var_ranges = MASK_EXTR(md->mtrr_cap, MTRRcap_VCNT);
 
         /* Test default type MSR. */
         if ( md->def_type != ms->def_type )
@@ -499,7 +499,7 @@ bool mtrr_pat_not_equal(const struct vcpu *vd, const struct vcpu *vs)
             return true;
 
         /* Test variable ranges. */
-        if ( num_var_ranges != (uint8_t)ms->mtrr_cap ||
+        if ( num_var_ranges != MASK_EXTR(ms->mtrr_cap, MTRRcap_VCNT) ||
              memcmp(md->var_ranges, ms->var_ranges,
                     num_var_ranges * sizeof(*md->var_ranges)) )
             return true;
index 8fbccc88a7697217be2c7d005bacd500104184b7..95bb66916c5c9caef4057c089a6d386f27842494 100644 (file)
@@ -60,6 +60,8 @@
 #define ATM_LNC_C6_AUTO_DEMOTE         (1UL << 25)
 
 #define MSR_MTRRcap                    0x000000fe
+#define MTRRcap_VCNT                   0x000000ff
+
 #define MSR_IA32_BBL_CR_CTL            0x00000119
 
 #define MSR_IA32_SYSENTER_CS           0x00000174