aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/kvm/kvm.h
diff options
context:
space:
mode:
authorAvi Kivity <avi@qumranet.com>2007-06-07 12:18:30 -0400
committerAvi Kivity <avi@qumranet.com>2007-07-16 05:05:46 -0400
commitd9e368d61263055eceac2966bb7ea31b89da3425 (patch)
tree9d507b851ea7bd667cdd50dde640e47e0d4773e9 /drivers/kvm/kvm.h
parent39c3b86e5c193e09f69f0e99c93600a4999ffc60 (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.h8
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);
530void kvm_resched(struct kvm_vcpu *vcpu); 537void kvm_resched(struct kvm_vcpu *vcpu);
531void kvm_load_guest_fpu(struct kvm_vcpu *vcpu); 538void kvm_load_guest_fpu(struct kvm_vcpu *vcpu);
532void kvm_put_guest_fpu(struct kvm_vcpu *vcpu); 539void kvm_put_guest_fpu(struct kvm_vcpu *vcpu);
540void kvm_flush_remote_tlbs(struct kvm *kvm);
533 541
534int kvm_read_guest(struct kvm_vcpu *vcpu, 542int kvm_read_guest(struct kvm_vcpu *vcpu,
535 gva_t addr, 543 gva_t addr,