The code hopefully is more readable this way.
Also switch have_fixed to bool, seeing that it already is used as a
boolean.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
[switched to use MASK_*]
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
rdmsrl(MSR_MTRRdefType, msr_content);
mtrr_state.def_type = (msr_content & 0xff);
- mtrr_state.enabled = (msr_content & 0xc00) >> 10;
+ mtrr_state.enabled = MASK_EXTR(msr_content, MTRRdefType_E);
+ mtrr_state.fixed_enabled = MASK_EXTR(msr_content, MTRRdefType_FE);
/* Store mtrr_cap for HVM MTRR virtualisation. */
rdmsrl(MSR_MTRRcap, mtrr_state.mtrr_cap);
unsigned int base = 0, step = 0x10000;
printk("%sMTRR fixed ranges %sabled:\n", level,
- mtrr_state.enabled & 1 ? "en" : "dis");
+ mtrr_state.fixed_enabled ? "en" : "dis");
for (; block->ranges; ++block, step >>= 2) {
for (i = 0; i < block->ranges; ++i, fr += 8) {
print_fixed(base, step, fr, level);
print_fixed_last(level);
}
printk("%sMTRR variable ranges %sabled:\n", level,
- mtrr_state.enabled & 2 ? "en" : "dis");
+ mtrr_state.enabled ? "en" : "dis");
width = (paddr_bits - PAGE_SHIFT + 3) / 4;
for (i = 0; i < num_var_ranges; ++i) {
/* Set_mtrr_restore restores the old value of MTRRdefType,
so to set it we fiddle with the saved value */
if ((deftype & 0xff) != mtrr_state.def_type
- || ((deftype & 0xc00) >> 10) != mtrr_state.enabled) {
- deftype = (deftype & ~0xcff) | mtrr_state.def_type | (mtrr_state.enabled << 10);
+ || MASK_EXTR(deftype, MTRRdefType_E) != mtrr_state.enabled
+ || MASK_EXTR(deftype, MTRRdefType_FE) != mtrr_state.fixed_enabled) {
+ deftype = (deftype & ~0xcff) | mtrr_state.def_type |
+ MASK_INSR(mtrr_state.enabled, MTRRdefType_E) |
+ MASK_INSR(mtrr_state.fixed_enabled, MTRRdefType_FE);
change_mask |= MTRR_CHANGE_MASK_DEFTYPE;
}
case MSR_MTRRdefType:
if ( !d->arch.cpuid->basic.mtrr )
goto gp_fault;
- *msr_content = v->arch.hvm_vcpu.mtrr.def_type
- | (v->arch.hvm_vcpu.mtrr.enabled << 10);
+ *msr_content = v->arch.hvm_vcpu.mtrr.def_type |
+ MASK_INSR(v->arch.hvm_vcpu.mtrr.enabled, MTRRdefType_E) |
+ MASK_INSR(v->arch.hvm_vcpu.mtrr.fixed_enabled,
+ MTRRdefType_FE);
break;
case MSR_MTRRfix64K_00000:
if ( !d->arch.cpuid->basic.mtrr )
uint64_t mask = -(uint64_t)PAGE_SIZE << order;
unsigned int seg, num_var_ranges = MASK_EXTR(m->mtrr_cap, MTRRcap_VCNT);
- if ( unlikely(!(m->enabled & 0x2)) )
+ if ( unlikely(!m->enabled) )
return MTRR_TYPE_UNCACHABLE;
pa &= mask;
- if ( (pa < 0x100000) && (m->enabled & 1) )
+ if ( (pa < 0x100000) && m->fixed_enabled )
{
/* Fixed range MTRR takes effect. */
uint32_t addr = (uint32_t)pa, index;
uint64_t msr_content)
{
uint8_t def_type = msr_content & 0xff;
- uint8_t enabled = (msr_content >> 10) & 0x3;
+ bool fixed_enabled = MASK_EXTR(msr_content, MTRRdefType_FE);
+ bool enabled = MASK_EXTR(msr_content, MTRRdefType_E);
if ( unlikely(!valid_mtrr_type(def_type)) )
{
return 0;
}
- if ( m->enabled != enabled || m->def_type != def_type )
+ if ( m->enabled != enabled || m->fixed_enabled != fixed_enabled ||
+ m->def_type != def_type )
{
m->enabled = enabled;
m->def_type = def_type;
+ m->fixed_enabled = fixed_enabled;
memory_type_changed(d);
}
const struct mtrr_state *md = &vd->arch.hvm_vcpu.mtrr;
const struct mtrr_state *ms = &vs->arch.hvm_vcpu.mtrr;
- if ( (md->enabled ^ ms->enabled) & 2 )
+ if ( md->enabled != ms->enabled )
return true;
- if ( md->enabled & 2 )
+ if ( md->enabled )
{
unsigned int num_var_ranges = MASK_EXTR(md->mtrr_cap, MTRRcap_VCNT);
return true;
/* Test fixed ranges. */
- if ( (md->enabled ^ ms->enabled) & 1 )
+ if ( md->fixed_enabled != ms->fixed_enabled )
return true;
- if ( (md->enabled & 1) &&
+ if ( md->fixed_enabled &&
memcmp(md->fixed_ranges, ms->fixed_ranges,
sizeof(md->fixed_ranges)) )
return true;
const struct mtrr_state *mtrr_state = &v->arch.hvm_vcpu.mtrr;
struct hvm_hw_mtrr hw_mtrr = {
.msr_mtrr_def_type = mtrr_state->def_type |
- (mtrr_state->enabled << 10),
+ MASK_INSR(mtrr_state->fixed_enabled,
+ MTRRdefType_FE) |
+ MASK_INSR(mtrr_state->enabled, MTRRdefType_E),
.msr_mtrr_cap = mtrr_state->mtrr_cap,
};
unsigned int i;
#define MSR_MTRRfix4K_F0000 0x0000026e
#define MSR_MTRRfix4K_F8000 0x0000026f
#define MSR_MTRRdefType 0x000002ff
+#define MTRRdefType_FE (1u << 10)
+#define MTRRdefType_E (1u << 11)
#define MSR_IA32_DEBUGCTLMSR 0x000001d9
#define IA32_DEBUGCTLMSR_LBR (1<<0) /* Last Branch Record */
struct mtrr_state {
struct mtrr_var_range *var_ranges;
mtrr_type fixed_ranges[NUM_FIXED_RANGES];
- unsigned char enabled;
- unsigned char have_fixed;
+ bool enabled;
+ bool fixed_enabled;
+ bool have_fixed;
mtrr_type def_type;
u64 mtrr_cap;