@@ -2421,9 +2421,20 @@ static void clear_atomic_switch_msr_special(struct vcpu_vmx *vmx,
2421
2421
vm_exit_controls_clearbit (vmx , exit );
2422
2422
}
2423
2423
2424
+ static int find_msr (struct vmx_msrs * m , unsigned int msr )
2425
+ {
2426
+ unsigned int i ;
2427
+
2428
+ for (i = 0 ; i < m -> nr ; ++ i ) {
2429
+ if (m -> val [i ].index == msr )
2430
+ return i ;
2431
+ }
2432
+ return - ENOENT ;
2433
+ }
2434
+
2424
2435
static void clear_atomic_switch_msr (struct vcpu_vmx * vmx , unsigned msr )
2425
2436
{
2426
- unsigned i ;
2437
+ int i ;
2427
2438
struct msr_autoload * m = & vmx -> msr_autoload ;
2428
2439
2429
2440
switch (msr ) {
@@ -2444,11 +2455,8 @@ static void clear_atomic_switch_msr(struct vcpu_vmx *vmx, unsigned msr)
2444
2455
}
2445
2456
break ;
2446
2457
}
2447
- for (i = 0 ; i < m -> guest .nr ; ++ i )
2448
- if (m -> guest .val [i ].index == msr )
2449
- break ;
2450
-
2451
- if (i == m -> guest .nr )
2458
+ i = find_msr (& m -> guest , msr );
2459
+ if (i < 0 )
2452
2460
return ;
2453
2461
-- m -> guest .nr ;
2454
2462
-- m -> host .nr ;
@@ -2472,7 +2480,7 @@ static void add_atomic_switch_msr_special(struct vcpu_vmx *vmx,
2472
2480
static void add_atomic_switch_msr (struct vcpu_vmx * vmx , unsigned msr ,
2473
2481
u64 guest_val , u64 host_val )
2474
2482
{
2475
- unsigned i ;
2483
+ int i ;
2476
2484
struct msr_autoload * m = & vmx -> msr_autoload ;
2477
2485
2478
2486
switch (msr ) {
@@ -2507,16 +2515,13 @@ static void add_atomic_switch_msr(struct vcpu_vmx *vmx, unsigned msr,
2507
2515
wrmsrl (MSR_IA32_PEBS_ENABLE , 0 );
2508
2516
}
2509
2517
2510
- for (i = 0 ; i < m -> guest .nr ; ++ i )
2511
- if (m -> guest .val [i ].index == msr )
2512
- break ;
2513
-
2518
+ i = find_msr (& m -> guest , msr );
2514
2519
if (i == NR_AUTOLOAD_MSRS ) {
2515
2520
printk_once (KERN_WARNING "Not enough msr switch entries. "
2516
2521
"Can't add msr %x\n" , msr );
2517
2522
return ;
2518
- } else if (i == m -> guest . nr ) {
2519
- ++ m -> guest .nr ;
2523
+ } else if (i < 0 ) {
2524
+ i = m -> guest .nr ++ ;
2520
2525
++ m -> host .nr ;
2521
2526
vmcs_write32 (VM_ENTRY_MSR_LOAD_COUNT , m -> guest .nr );
2522
2527
vmcs_write32 (VM_EXIT_MSR_LOAD_COUNT , m -> host .nr );
0 commit comments