lkml.org 
[lkml]   [2009]   [Nov]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH 07/11] Retry fault before vmentry
On 11/01/2009 01:56 PM, Gleb Natapov wrote:
> When page is swapped in it is mapped into guest memory only after guest
> tries to access it again and generate another fault. To save this fault
> we can map it immediately since we know that guest is going to access
> the page.
>
>
>
> diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h
> index 9fe2ecd..b1fe61f 100644
> --- a/arch/x86/kvm/paging_tmpl.h
> +++ b/arch/x86/kvm/paging_tmpl.h
> @@ -375,7 +375,7 @@ static u64 *FNAME(fetch)(struct kvm_vcpu *vcpu, gva_t addr,
> * Returns: 1 if we need to emulate the instruction, 0 otherwise, or
> * a negative value on error.
> */
> -static int FNAME(page_fault)(struct kvm_vcpu *vcpu, gva_t addr,
> +static int FNAME(page_fault)(struct kvm_vcpu *vcpu, gpa_t cr3, gva_t addr,
> u32 error_code)
> {
> int write_fault = error_code& PFERR_WRITE_MASK;
> @@ -388,6 +388,7 @@ static int FNAME(page_fault)(struct kvm_vcpu *vcpu, gva_t addr,
> pfn_t pfn;
> int level = PT_PAGE_TABLE_LEVEL;
> unsigned long mmu_seq;
> + gpa_t curr_cr3 = vcpu->arch.cr3;
>
> pgprintk("%s: addr %lx err %x\n", __func__, addr, error_code);
> kvm_mmu_audit(vcpu, "pre page fault");
> @@ -396,6 +397,13 @@ static int FNAME(page_fault)(struct kvm_vcpu *vcpu, gva_t addr,
> if (r)
> return r;
>
> + if (curr_cr3 != cr3) {
> + vcpu->arch.cr3 = cr3;
> + paging_new_cr3(vcpu);
> + if (kvm_mmu_reload(vcpu))
> + goto switch_cr3;
> + }
> +
>

This is a little frightening. I can't put my finger on anything
though. But playing with cr3 under the guest's feet worries me.

--
error compiling committee.c: too many arguments to function



\
 
 \ /
  Last update: 2009-11-02 14:05    [W:0.182 / U:2.664 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site