aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/include/asm
diff options
context:
space:
mode:
authorGleb Natapov <gleb@redhat.com>2010-10-14 05:22:53 -0400
committerAvi Kivity <avi@redhat.com>2011-01-12 04:23:17 -0500
commit7c90705bf2a373aa238661bdb6446f27299ef489 (patch)
treed3d00b4413b0d33254d53bbb3285be82444494d9 /arch/x86/include/asm
parent631bc4878220932fe67fc46fc7cf7cccdb1ec597 (diff)
KVM: Inject asynchronous page fault into a PV guest if page is swapped out.
Send async page fault to a PV guest if it accesses swapped out memory. Guest will choose another task to run upon receiving the fault. Allow async page fault injection only when guest is in user mode since otherwise guest may be in non-sleepable context and will not be able to reschedule. Vcpu will be halted if guest will fault on the same page again or if vcpu executes kernel code. Acked-by: Rik van Riel <riel@redhat.com> Signed-off-by: Gleb Natapov <gleb@redhat.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Diffstat (limited to 'arch/x86/include/asm')
-rw-r--r--arch/x86/include/asm/kvm_host.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
index 0d7039804b4c..167375cc49ff 100644
--- a/arch/x86/include/asm/kvm_host.h
+++ b/arch/x86/include/asm/kvm_host.h
@@ -421,6 +421,7 @@ struct kvm_vcpu_arch {
421 gfn_t gfns[roundup_pow_of_two(ASYNC_PF_PER_VCPU)]; 421 gfn_t gfns[roundup_pow_of_two(ASYNC_PF_PER_VCPU)];
422 struct gfn_to_hva_cache data; 422 struct gfn_to_hva_cache data;
423 u64 msr_val; 423 u64 msr_val;
424 u32 id;
424 } apf; 425 } apf;
425}; 426};
426 427
@@ -596,6 +597,7 @@ struct kvm_x86_ops {
596}; 597};
597 598
598struct kvm_arch_async_pf { 599struct kvm_arch_async_pf {
600 u32 token;
599 gfn_t gfn; 601 gfn_t gfn;
600}; 602};
601 603
@@ -819,6 +821,7 @@ void kvm_arch_async_page_present(struct kvm_vcpu *vcpu,
819 struct kvm_async_pf *work); 821 struct kvm_async_pf *work);
820void kvm_arch_async_page_ready(struct kvm_vcpu *vcpu, 822void kvm_arch_async_page_ready(struct kvm_vcpu *vcpu,
821 struct kvm_async_pf *work); 823 struct kvm_async_pf *work);
824bool kvm_arch_can_inject_async_page_present(struct kvm_vcpu *vcpu);
822extern bool kvm_find_async_pf_gfn(struct kvm_vcpu *vcpu, gfn_t gfn); 825extern bool kvm_find_async_pf_gfn(struct kvm_vcpu *vcpu, gfn_t gfn);
823 826
824#endif /* _ASM_X86_KVM_HOST_H */ 827#endif /* _ASM_X86_KVM_HOST_H */