@@ -161,10 +161,8 @@ static void update_mtrr(struct kvm_vcpu *vcpu, u32 msr)
161
161
/* variable range MTRRs. */
162
162
is_fixed = false;
163
163
index = (msr - 0x200 ) / 2 ;
164
- start = (((u64 )mtrr_state -> var_ranges [index ].base_hi ) << 32 ) +
165
- (mtrr_state -> var_ranges [index ].base_lo & PAGE_MASK );
166
- mask = (((u64 )mtrr_state -> var_ranges [index ].mask_hi ) << 32 ) +
167
- (mtrr_state -> var_ranges [index ].mask_lo & PAGE_MASK );
164
+ start = mtrr_state -> var_ranges [index ].base & PAGE_MASK ;
165
+ mask = mtrr_state -> var_ranges [index ].mask & PAGE_MASK ;
168
166
mask |= ~0ULL << cpuid_maxphyaddr (vcpu );
169
167
170
168
end = ((start & mask ) | ~mask ) + 1 ;
@@ -195,17 +193,13 @@ int kvm_mtrr_set_msr(struct kvm_vcpu *vcpu, u32 msr, u64 data)
195
193
vcpu -> arch .pat = data ;
196
194
else { /* Variable MTRRs */
197
195
int idx , is_mtrr_mask ;
198
- u64 * pt ;
199
196
200
197
idx = (msr - 0x200 ) / 2 ;
201
198
is_mtrr_mask = msr - 0x200 - 2 * idx ;
202
199
if (!is_mtrr_mask )
203
- pt =
204
- (u64 * )& vcpu -> arch .mtrr_state .var_ranges [idx ].base_lo ;
200
+ vcpu -> arch .mtrr_state .var_ranges [idx ].base = data ;
205
201
else
206
- pt =
207
- (u64 * )& vcpu -> arch .mtrr_state .var_ranges [idx ].mask_lo ;
208
- * pt = data ;
202
+ vcpu -> arch .mtrr_state .var_ranges [idx ].mask = data ;
209
203
}
210
204
211
205
update_mtrr (vcpu , msr );
@@ -243,17 +237,13 @@ int kvm_mtrr_get_msr(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata)
243
237
* pdata = vcpu -> arch .pat ;
244
238
else { /* Variable MTRRs */
245
239
int idx , is_mtrr_mask ;
246
- u64 * pt ;
247
240
248
241
idx = (msr - 0x200 ) / 2 ;
249
242
is_mtrr_mask = msr - 0x200 - 2 * idx ;
250
243
if (!is_mtrr_mask )
251
- pt =
252
- (u64 * )& vcpu -> arch .mtrr_state .var_ranges [idx ].base_lo ;
244
+ * pdata = vcpu -> arch .mtrr_state .var_ranges [idx ].base ;
253
245
else
254
- pt =
255
- (u64 * )& vcpu -> arch .mtrr_state .var_ranges [idx ].mask_lo ;
256
- * pdata = * pt ;
246
+ * pdata = vcpu -> arch .mtrr_state .var_ranges [idx ].mask ;
257
247
}
258
248
259
249
return 0 ;
@@ -305,13 +295,11 @@ static int get_mtrr_type(struct kvm_mtrr *mtrr_state,
305
295
for (i = 0 ; i < num_var_ranges ; ++ i ) {
306
296
unsigned short start_state , end_state ;
307
297
308
- if (!(mtrr_state -> var_ranges [i ].mask_lo & (1 << 11 )))
298
+ if (!(mtrr_state -> var_ranges [i ].mask & (1 << 11 )))
309
299
continue ;
310
300
311
- base = (((u64 )mtrr_state -> var_ranges [i ].base_hi ) << 32 ) +
312
- (mtrr_state -> var_ranges [i ].base_lo & PAGE_MASK );
313
- mask = (((u64 )mtrr_state -> var_ranges [i ].mask_hi ) << 32 ) +
314
- (mtrr_state -> var_ranges [i ].mask_lo & PAGE_MASK );
301
+ base = mtrr_state -> var_ranges [i ].base & PAGE_MASK ;
302
+ mask = mtrr_state -> var_ranges [i ].mask & PAGE_MASK ;
315
303
316
304
start_state = ((start & mask ) == (base & mask ));
317
305
end_state = ((end & mask ) == (base & mask ));
@@ -321,7 +309,7 @@ static int get_mtrr_type(struct kvm_mtrr *mtrr_state,
321
309
if ((start & mask ) != (base & mask ))
322
310
continue ;
323
311
324
- curr_match = mtrr_state -> var_ranges [i ].base_lo & 0xff ;
312
+ curr_match = mtrr_state -> var_ranges [i ].base & 0xff ;
325
313
if (prev_match == 0xFF ) {
326
314
prev_match = curr_match ;
327
315
continue ;
0 commit comments