@@ -920,16 +920,32 @@ static DEFINE_PER_CPU(struct desc_ptr, host_gdt);
920
920
static DEFINE_PER_CPU (struct list_head , blocked_vcpu_on_cpu ) ;
921
921
static DEFINE_PER_CPU (spinlock_t , blocked_vcpu_on_cpu_lock ) ;
922
922
923
- static unsigned long * vmx_io_bitmap_a ;
924
- static unsigned long * vmx_io_bitmap_b ;
925
- static unsigned long * vmx_msr_bitmap_legacy ;
926
- static unsigned long * vmx_msr_bitmap_longmode ;
927
- static unsigned long * vmx_msr_bitmap_legacy_x2apic_apicv ;
928
- static unsigned long * vmx_msr_bitmap_longmode_x2apic_apicv ;
929
- static unsigned long * vmx_msr_bitmap_legacy_x2apic ;
930
- static unsigned long * vmx_msr_bitmap_longmode_x2apic ;
931
- static unsigned long * vmx_vmread_bitmap ;
932
- static unsigned long * vmx_vmwrite_bitmap ;
923
+ enum {
924
+ VMX_IO_BITMAP_A ,
925
+ VMX_IO_BITMAP_B ,
926
+ VMX_MSR_BITMAP_LEGACY ,
927
+ VMX_MSR_BITMAP_LONGMODE ,
928
+ VMX_MSR_BITMAP_LEGACY_X2APIC_APICV ,
929
+ VMX_MSR_BITMAP_LONGMODE_X2APIC_APICV ,
930
+ VMX_MSR_BITMAP_LEGACY_X2APIC ,
931
+ VMX_MSR_BITMAP_LONGMODE_X2APIC ,
932
+ VMX_VMREAD_BITMAP ,
933
+ VMX_VMWRITE_BITMAP ,
934
+ VMX_BITMAP_NR
935
+ };
936
+
937
+ static unsigned long * vmx_bitmap [VMX_BITMAP_NR ];
938
+
939
+ #define vmx_io_bitmap_a (vmx_bitmap[VMX_IO_BITMAP_A])
940
+ #define vmx_io_bitmap_b (vmx_bitmap[VMX_IO_BITMAP_B])
941
+ #define vmx_msr_bitmap_legacy (vmx_bitmap[VMX_MSR_BITMAP_LEGACY])
942
+ #define vmx_msr_bitmap_longmode (vmx_bitmap[VMX_MSR_BITMAP_LONGMODE])
943
+ #define vmx_msr_bitmap_legacy_x2apic_apicv (vmx_bitmap[VMX_MSR_BITMAP_LEGACY_X2APIC_APICV])
944
+ #define vmx_msr_bitmap_longmode_x2apic_apicv (vmx_bitmap[VMX_MSR_BITMAP_LONGMODE_X2APIC_APICV])
945
+ #define vmx_msr_bitmap_legacy_x2apic (vmx_bitmap[VMX_MSR_BITMAP_LEGACY_X2APIC])
946
+ #define vmx_msr_bitmap_longmode_x2apic (vmx_bitmap[VMX_MSR_BITMAP_LONGMODE_X2APIC])
947
+ #define vmx_vmread_bitmap (vmx_bitmap[VMX_VMREAD_BITMAP])
948
+ #define vmx_vmwrite_bitmap (vmx_bitmap[VMX_VMWRITE_BITMAP])
933
949
934
950
static bool cpu_has_load_ia32_efer ;
935
951
static bool cpu_has_load_perf_global_ctrl ;
@@ -6287,50 +6303,13 @@ static __init int hardware_setup(void)
6287
6303
for (i = 0 ; i < ARRAY_SIZE (vmx_msr_index ); ++ i )
6288
6304
kvm_define_shared_msr (i , vmx_msr_index [i ]);
6289
6305
6290
- vmx_io_bitmap_a = (unsigned long * )__get_free_page (GFP_KERNEL );
6291
- if (!vmx_io_bitmap_a )
6292
- return r ;
6306
+ for (i = 0 ; i < VMX_BITMAP_NR ; i ++ ) {
6307
+ vmx_bitmap [i ] = (unsigned long * )__get_free_page (GFP_KERNEL );
6308
+ if (!vmx_bitmap [i ])
6309
+ goto out ;
6310
+ }
6293
6311
6294
6312
vmx_io_bitmap_b = (unsigned long * )__get_free_page (GFP_KERNEL );
6295
- if (!vmx_io_bitmap_b )
6296
- goto out ;
6297
-
6298
- vmx_msr_bitmap_legacy = (unsigned long * )__get_free_page (GFP_KERNEL );
6299
- if (!vmx_msr_bitmap_legacy )
6300
- goto out1 ;
6301
-
6302
- vmx_msr_bitmap_legacy_x2apic_apicv =
6303
- (unsigned long * )__get_free_page (GFP_KERNEL );
6304
- if (!vmx_msr_bitmap_legacy_x2apic_apicv )
6305
- goto out2 ;
6306
-
6307
- vmx_msr_bitmap_legacy_x2apic =
6308
- (unsigned long * )__get_free_page (GFP_KERNEL );
6309
- if (!vmx_msr_bitmap_legacy_x2apic )
6310
- goto out3 ;
6311
-
6312
- vmx_msr_bitmap_longmode = (unsigned long * )__get_free_page (GFP_KERNEL );
6313
- if (!vmx_msr_bitmap_longmode )
6314
- goto out4 ;
6315
-
6316
- vmx_msr_bitmap_longmode_x2apic_apicv =
6317
- (unsigned long * )__get_free_page (GFP_KERNEL );
6318
- if (!vmx_msr_bitmap_longmode_x2apic_apicv )
6319
- goto out5 ;
6320
-
6321
- vmx_msr_bitmap_longmode_x2apic =
6322
- (unsigned long * )__get_free_page (GFP_KERNEL );
6323
- if (!vmx_msr_bitmap_longmode_x2apic )
6324
- goto out6 ;
6325
-
6326
- vmx_vmread_bitmap = (unsigned long * )__get_free_page (GFP_KERNEL );
6327
- if (!vmx_vmread_bitmap )
6328
- goto out7 ;
6329
-
6330
- vmx_vmwrite_bitmap = (unsigned long * )__get_free_page (GFP_KERNEL );
6331
- if (!vmx_vmwrite_bitmap )
6332
- goto out8 ;
6333
-
6334
6313
memset (vmx_vmread_bitmap , 0xff , PAGE_SIZE );
6335
6314
memset (vmx_vmwrite_bitmap , 0xff , PAGE_SIZE );
6336
6315
@@ -6348,7 +6327,7 @@ static __init int hardware_setup(void)
6348
6327
6349
6328
if (setup_vmcs_config (& vmcs_config ) < 0 ) {
6350
6329
r = - EIO ;
6351
- goto out9 ;
6330
+ goto out ;
6352
6331
}
6353
6332
6354
6333
if (boot_cpu_has (X86_FEATURE_NX ))
@@ -6485,42 +6464,19 @@ static __init int hardware_setup(void)
6485
6464
6486
6465
return alloc_kvm_area ();
6487
6466
6488
- out9 :
6489
- free_page ((unsigned long )vmx_vmwrite_bitmap );
6490
- out8 :
6491
- free_page ((unsigned long )vmx_vmread_bitmap );
6492
- out7 :
6493
- free_page ((unsigned long )vmx_msr_bitmap_longmode_x2apic );
6494
- out6 :
6495
- free_page ((unsigned long )vmx_msr_bitmap_longmode_x2apic_apicv );
6496
- out5 :
6497
- free_page ((unsigned long )vmx_msr_bitmap_longmode );
6498
- out4 :
6499
- free_page ((unsigned long )vmx_msr_bitmap_legacy_x2apic );
6500
- out3 :
6501
- free_page ((unsigned long )vmx_msr_bitmap_legacy_x2apic_apicv );
6502
- out2 :
6503
- free_page ((unsigned long )vmx_msr_bitmap_legacy );
6504
- out1 :
6505
- free_page ((unsigned long )vmx_io_bitmap_b );
6506
6467
out :
6507
- free_page ((unsigned long )vmx_io_bitmap_a );
6468
+ for (i = 0 ; i < VMX_BITMAP_NR ; i ++ )
6469
+ free_page ((unsigned long )vmx_bitmap [i ]);
6508
6470
6509
6471
return r ;
6510
6472
}
6511
6473
6512
6474
static __exit void hardware_unsetup (void )
6513
6475
{
6514
- free_page ((unsigned long )vmx_msr_bitmap_legacy_x2apic_apicv );
6515
- free_page ((unsigned long )vmx_msr_bitmap_legacy_x2apic );
6516
- free_page ((unsigned long )vmx_msr_bitmap_longmode_x2apic_apicv );
6517
- free_page ((unsigned long )vmx_msr_bitmap_longmode_x2apic );
6518
- free_page ((unsigned long )vmx_msr_bitmap_legacy );
6519
- free_page ((unsigned long )vmx_msr_bitmap_longmode );
6520
- free_page ((unsigned long )vmx_io_bitmap_b );
6521
- free_page ((unsigned long )vmx_io_bitmap_a );
6522
- free_page ((unsigned long )vmx_vmwrite_bitmap );
6523
- free_page ((unsigned long )vmx_vmread_bitmap );
6476
+ int i ;
6477
+
6478
+ for (i = 0 ; i < VMX_BITMAP_NR ; i ++ )
6479
+ free_page ((unsigned long )vmx_bitmap [i ]);
6524
6480
6525
6481
free_kvm_area ();
6526
6482
}
0 commit comments