diff options
author | Avi Kivity <avi@qumranet.com> | 2007-06-07 12:18:30 -0400 |
---|---|---|
committer | Avi Kivity <avi@qumranet.com> | 2007-07-16 05:05:46 -0400 |
commit | d9e368d61263055eceac2966bb7ea31b89da3425 (patch) | |
tree | 9d507b851ea7bd667cdd50dde640e47e0d4773e9 /drivers/kvm/kvm.h | |
parent | 39c3b86e5c193e09f69f0e99c93600a4999ffc60 (diff) |
KVM: Flush remote tlbs when reducing shadow pte permissions
When a vcpu causes a shadow tlb entry to have reduced permissions, it
must also clear the tlb on remote vcpus. We do that by:
- setting a bit on the vcpu that requests a tlb flush before the next entry
- if the vcpu is currently executing, we send an ipi to make sure it
exits before we continue
Signed-off-by: Avi Kivity <avi@qumranet.com>
Diffstat (limited to 'drivers/kvm/kvm.h')
-rw-r--r-- | drivers/kvm/kvm.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/kvm/kvm.h b/drivers/kvm/kvm.h index 528a56b1790e..b08272bce213 100644 --- a/drivers/kvm/kvm.h +++ b/drivers/kvm/kvm.h | |||
@@ -84,6 +84,11 @@ | |||
84 | #define KVM_PIO_PAGE_OFFSET 1 | 84 | #define KVM_PIO_PAGE_OFFSET 1 |
85 | 85 | ||
86 | /* | 86 | /* |
87 | * vcpu->requests bit members | ||
88 | */ | ||
89 | #define KVM_TLB_FLUSH 0 | ||
90 | |||
91 | /* | ||
87 | * Address types: | 92 | * Address types: |
88 | * | 93 | * |
89 | * gva - guest virtual address | 94 | * gva - guest virtual address |
@@ -272,6 +277,8 @@ struct kvm_vcpu { | |||
272 | u64 host_tsc; | 277 | u64 host_tsc; |
273 | struct kvm_run *run; | 278 | struct kvm_run *run; |
274 | int interrupt_window_open; | 279 | int interrupt_window_open; |
280 | int guest_mode; | ||
281 | unsigned long requests; | ||
275 | unsigned long irq_summary; /* bit vector: 1 per word in irq_pending */ | 282 | unsigned long irq_summary; /* bit vector: 1 per word in irq_pending */ |
276 | #define NR_IRQ_WORDS KVM_IRQ_BITMAP_SIZE(unsigned long) | 283 | #define NR_IRQ_WORDS KVM_IRQ_BITMAP_SIZE(unsigned long) |
277 | unsigned long irq_pending[NR_IRQ_WORDS]; | 284 | unsigned long irq_pending[NR_IRQ_WORDS]; |
@@ -530,6 +537,7 @@ void save_msrs(struct vmx_msr_entry *e, int n); | |||
530 | void kvm_resched(struct kvm_vcpu *vcpu); | 537 | void kvm_resched(struct kvm_vcpu *vcpu); |
531 | void kvm_load_guest_fpu(struct kvm_vcpu *vcpu); | 538 | void kvm_load_guest_fpu(struct kvm_vcpu *vcpu); |
532 | void kvm_put_guest_fpu(struct kvm_vcpu *vcpu); | 539 | void kvm_put_guest_fpu(struct kvm_vcpu *vcpu); |
540 | void kvm_flush_remote_tlbs(struct kvm *kvm); | ||
533 | 541 | ||
534 | int kvm_read_guest(struct kvm_vcpu *vcpu, | 542 | int kvm_read_guest(struct kvm_vcpu *vcpu, |
535 | gva_t addr, | 543 | gva_t addr, |