提交 49b26e26 编写于 作者: X Xiao Guangrong 提交者: Marcelo Tosatti

KVM: MMU: do not record gfn in kvm_mmu_pte_write

No need to record the gfn to verifier the pte has the same mode as
current vcpu, it's because we only speculatively update the pte only
if the pte and vcpu have the same mode
Signed-off-by: NXiao Guangrong <xiaoguangrong@cn.fujitsu.com>
Signed-off-by: NAvi Kivity <avi@redhat.com>
上级 48c0e4e9
...@@ -336,7 +336,6 @@ struct kvm_vcpu_arch { ...@@ -336,7 +336,6 @@ struct kvm_vcpu_arch {
gfn_t last_pte_gfn; gfn_t last_pte_gfn;
struct { struct {
gfn_t gfn; /* presumed gfn during guest pte update */
pfn_t pfn; /* pfn corresponding to that gfn */ pfn_t pfn; /* pfn corresponding to that gfn */
unsigned long mmu_seq; unsigned long mmu_seq;
} update_pte; } update_pte;
......
...@@ -3228,7 +3228,6 @@ static void mmu_guess_page_from_pte_write(struct kvm_vcpu *vcpu, gpa_t gpa, ...@@ -3228,7 +3228,6 @@ static void mmu_guess_page_from_pte_write(struct kvm_vcpu *vcpu, gpa_t gpa,
kvm_release_pfn_clean(pfn); kvm_release_pfn_clean(pfn);
return; return;
} }
vcpu->arch.update_pte.gfn = gfn;
vcpu->arch.update_pte.pfn = pfn; vcpu->arch.update_pte.pfn = pfn;
} }
...@@ -3275,9 +3274,8 @@ void kvm_mmu_pte_write(struct kvm_vcpu *vcpu, gpa_t gpa, ...@@ -3275,9 +3274,8 @@ void kvm_mmu_pte_write(struct kvm_vcpu *vcpu, gpa_t gpa,
/* /*
* Assume that the pte write on a page table of the same type * Assume that the pte write on a page table of the same type
* as the current vcpu paging mode. This is nearly always true * as the current vcpu paging mode since we update the sptes only
* (might be false while changing modes). Note it is verified later * when they have the same mode.
* by update_pte().
*/ */
if ((is_pae(vcpu) && bytes == 4) || !new) { if ((is_pae(vcpu) && bytes == 4) || !new) {
/* Handle a 32-bit guest writing two halves of a 64-bit gpte */ /* Handle a 32-bit guest writing two halves of a 64-bit gpte */
......
...@@ -339,8 +339,6 @@ static void FNAME(update_pte)(struct kvm_vcpu *vcpu, struct kvm_mmu_page *sp, ...@@ -339,8 +339,6 @@ static void FNAME(update_pte)(struct kvm_vcpu *vcpu, struct kvm_mmu_page *sp,
pgprintk("%s: gpte %llx spte %p\n", __func__, (u64)gpte, spte); pgprintk("%s: gpte %llx spte %p\n", __func__, (u64)gpte, spte);
pte_access = sp->role.access & FNAME(gpte_access)(vcpu, gpte); pte_access = sp->role.access & FNAME(gpte_access)(vcpu, gpte);
if (gpte_to_gfn(gpte) != vcpu->arch.update_pte.gfn)
return;
pfn = vcpu->arch.update_pte.pfn; pfn = vcpu->arch.update_pte.pfn;
if (is_error_pfn(pfn)) if (is_error_pfn(pfn))
return; return;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册