diff options
author | Mathias Krause <minipli@googlemail.com> | 2012-08-29 19:30:19 -0400 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2012-09-05 05:42:09 -0400 |
commit | 772e031899fdf3c7636d66aae9b0b57d1aaebb93 (patch) | |
tree | 967c68a299a10e634409d6f03d9d15e96073bc87 /arch | |
parent | f1d248315afc55771c3991b934014daa154d05f1 (diff) |
KVM: VMX: constify lookup tables
We use vmcs_field_to_offset_table[], kvm_vmx_segment_fields[] and
kvm_vmx_exit_handlers[] as lookup tables only -- make them r/o.
Signed-off-by: Mathias Krause <minipli@googlemail.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/kvm/vmx.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 248c2b490e9b..d62b4139a292 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c | |||
@@ -450,7 +450,7 @@ static inline struct vcpu_vmx *to_vmx(struct kvm_vcpu *vcpu) | |||
450 | #define FIELD64(number, name) [number] = VMCS12_OFFSET(name), \ | 450 | #define FIELD64(number, name) [number] = VMCS12_OFFSET(name), \ |
451 | [number##_HIGH] = VMCS12_OFFSET(name)+4 | 451 | [number##_HIGH] = VMCS12_OFFSET(name)+4 |
452 | 452 | ||
453 | static unsigned short vmcs_field_to_offset_table[] = { | 453 | static const unsigned short vmcs_field_to_offset_table[] = { |
454 | FIELD(VIRTUAL_PROCESSOR_ID, virtual_processor_id), | 454 | FIELD(VIRTUAL_PROCESSOR_ID, virtual_processor_id), |
455 | FIELD(GUEST_ES_SELECTOR, guest_es_selector), | 455 | FIELD(GUEST_ES_SELECTOR, guest_es_selector), |
456 | FIELD(GUEST_CS_SELECTOR, guest_cs_selector), | 456 | FIELD(GUEST_CS_SELECTOR, guest_cs_selector), |
@@ -666,7 +666,7 @@ static struct vmx_capability { | |||
666 | .ar_bytes = GUEST_##seg##_AR_BYTES, \ | 666 | .ar_bytes = GUEST_##seg##_AR_BYTES, \ |
667 | } | 667 | } |
668 | 668 | ||
669 | static struct kvm_vmx_segment_field { | 669 | static const struct kvm_vmx_segment_field { |
670 | unsigned selector; | 670 | unsigned selector; |
671 | unsigned base; | 671 | unsigned base; |
672 | unsigned limit; | 672 | unsigned limit; |
@@ -2695,7 +2695,7 @@ static __exit void hardware_unsetup(void) | |||
2695 | 2695 | ||
2696 | static void fix_pmode_dataseg(struct kvm_vcpu *vcpu, int seg, struct kvm_segment *save) | 2696 | static void fix_pmode_dataseg(struct kvm_vcpu *vcpu, int seg, struct kvm_segment *save) |
2697 | { | 2697 | { |
2698 | struct kvm_vmx_segment_field *sf = &kvm_vmx_segment_fields[seg]; | 2698 | const struct kvm_vmx_segment_field *sf = &kvm_vmx_segment_fields[seg]; |
2699 | struct kvm_segment tmp = *save; | 2699 | struct kvm_segment tmp = *save; |
2700 | 2700 | ||
2701 | if (!(vmcs_readl(sf->base) == tmp.base && tmp.s)) { | 2701 | if (!(vmcs_readl(sf->base) == tmp.base && tmp.s)) { |
@@ -2764,7 +2764,7 @@ static gva_t rmode_tss_base(struct kvm *kvm) | |||
2764 | 2764 | ||
2765 | static void fix_rmode_seg(int seg, struct kvm_segment *save) | 2765 | static void fix_rmode_seg(int seg, struct kvm_segment *save) |
2766 | { | 2766 | { |
2767 | struct kvm_vmx_segment_field *sf = &kvm_vmx_segment_fields[seg]; | 2767 | const struct kvm_vmx_segment_field *sf = &kvm_vmx_segment_fields[seg]; |
2768 | 2768 | ||
2769 | vmcs_write16(sf->selector, save->base >> 4); | 2769 | vmcs_write16(sf->selector, save->base >> 4); |
2770 | vmcs_write32(sf->base, save->base & 0xffff0); | 2770 | vmcs_write32(sf->base, save->base & 0xffff0); |
@@ -3202,7 +3202,7 @@ static void vmx_set_segment(struct kvm_vcpu *vcpu, | |||
3202 | struct kvm_segment *var, int seg) | 3202 | struct kvm_segment *var, int seg) |
3203 | { | 3203 | { |
3204 | struct vcpu_vmx *vmx = to_vmx(vcpu); | 3204 | struct vcpu_vmx *vmx = to_vmx(vcpu); |
3205 | struct kvm_vmx_segment_field *sf = &kvm_vmx_segment_fields[seg]; | 3205 | const struct kvm_vmx_segment_field *sf = &kvm_vmx_segment_fields[seg]; |
3206 | u32 ar; | 3206 | u32 ar; |
3207 | 3207 | ||
3208 | vmx_segment_cache_clear(vmx); | 3208 | vmx_segment_cache_clear(vmx); |
@@ -3572,7 +3572,7 @@ out: | |||
3572 | 3572 | ||
3573 | static void seg_setup(int seg) | 3573 | static void seg_setup(int seg) |
3574 | { | 3574 | { |
3575 | struct kvm_vmx_segment_field *sf = &kvm_vmx_segment_fields[seg]; | 3575 | const struct kvm_vmx_segment_field *sf = &kvm_vmx_segment_fields[seg]; |
3576 | unsigned int ar; | 3576 | unsigned int ar; |
3577 | 3577 | ||
3578 | vmcs_write16(sf->selector, 0); | 3578 | vmcs_write16(sf->selector, 0); |
@@ -5655,7 +5655,7 @@ static int handle_vmptrst(struct kvm_vcpu *vcpu) | |||
5655 | * may resume. Otherwise they set the kvm_run parameter to indicate what needs | 5655 | * may resume. Otherwise they set the kvm_run parameter to indicate what needs |
5656 | * to be done to userspace and return 0. | 5656 | * to be done to userspace and return 0. |
5657 | */ | 5657 | */ |
5658 | static int (*kvm_vmx_exit_handlers[])(struct kvm_vcpu *vcpu) = { | 5658 | static int (*const kvm_vmx_exit_handlers[])(struct kvm_vcpu *vcpu) = { |
5659 | [EXIT_REASON_EXCEPTION_NMI] = handle_exception, | 5659 | [EXIT_REASON_EXCEPTION_NMI] = handle_exception, |
5660 | [EXIT_REASON_EXTERNAL_INTERRUPT] = handle_external_interrupt, | 5660 | [EXIT_REASON_EXTERNAL_INTERRUPT] = handle_external_interrupt, |
5661 | [EXIT_REASON_TRIPLE_FAULT] = handle_triple_fault, | 5661 | [EXIT_REASON_TRIPLE_FAULT] = handle_triple_fault, |