Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 315898
b: refs/heads/master
c: 8e22f95
h: refs/heads/master
v: v3
  • Loading branch information
Xiao Guangrong authored and Avi Kivity committed Jul 11, 2012
1 parent 54da9b9 commit b3ab7e6
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 17 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: d13bc5b5a1f9eafd59331baa1d1d32e1867f57b5
refs/heads/master: 8e22f955fb65c5930cc4c5a863cce4e27d0e4a3c
45 changes: 29 additions & 16 deletions trunk/arch/x86/kvm/mmu.c
Original file line number Diff line number Diff line change
Expand Up @@ -1050,7 +1050,33 @@ static void drop_spte(struct kvm *kvm, u64 *sptep)
rmap_remove(kvm, sptep);
}

/* Return true if the spte is dropped. */

static bool __drop_large_spte(struct kvm *kvm, u64 *sptep)
{
if (is_large_pte(*sptep)) {
WARN_ON(page_header(__pa(sptep))->role.level ==
PT_PAGE_TABLE_LEVEL);
drop_spte(kvm, sptep);
--kvm->stat.lpages;
return true;
}

return false;
}

static void drop_large_spte(struct kvm_vcpu *vcpu, u64 *sptep)
{
if (__drop_large_spte(vcpu->kvm, sptep))
kvm_flush_remote_tlbs(vcpu->kvm);
}

/*
* Write-protect on the specified @sptep due to dirty page logging or
* protecting shadow page table. @flush indicates whether tlb need be
* flushed.
*
* Return true if the spte is dropped.
*/
static bool spte_write_protect(struct kvm *kvm, u64 *sptep, bool *flush)
{
u64 spte = *sptep;
Expand All @@ -1061,13 +1087,9 @@ static bool spte_write_protect(struct kvm *kvm, u64 *sptep, bool *flush)
rmap_printk("rmap_write_protect: spte %p %llx\n", sptep, *sptep);

*flush |= true;
if (is_large_pte(spte)) {
WARN_ON(page_header(__pa(sptep))->role.level ==
PT_PAGE_TABLE_LEVEL);
drop_spte(kvm, sptep);
--kvm->stat.lpages;

if (__drop_large_spte(kvm, sptep))
return true;
}

spte = spte & ~PT_WRITABLE_MASK;
mmu_spte_update(sptep, spte);
Expand Down Expand Up @@ -1878,15 +1900,6 @@ static void link_shadow_page(u64 *sptep, struct kvm_mmu_page *sp)
mmu_spte_set(sptep, spte);
}

static void drop_large_spte(struct kvm_vcpu *vcpu, u64 *sptep)
{
if (is_large_pte(*sptep)) {
drop_spte(vcpu->kvm, sptep);
--vcpu->kvm->stat.lpages;
kvm_flush_remote_tlbs(vcpu->kvm);
}
}

static void validate_direct_spte(struct kvm_vcpu *vcpu, u64 *sptep,
unsigned direct_access)
{
Expand Down

0 comments on commit b3ab7e6

Please sign in to comment.