KVM: MMU: introduce kvm_zap_rmapp
Split kvm_unmap_rmapp and introduce kvm_zap_rmapp which will be used in the later patch Signed-off-by: Xiao Guangrong <guangrong.xiao@linux.intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
d77aa73c70
commit
6a49f85c7a
@ -1349,24 +1349,28 @@ static bool rmap_write_protect(struct kvm *kvm, u64 gfn)
|
|||||||
return write_protected;
|
return write_protected;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool kvm_zap_rmapp(struct kvm *kvm, unsigned long *rmapp)
|
||||||
|
{
|
||||||
|
u64 *sptep;
|
||||||
|
struct rmap_iterator iter;
|
||||||
|
bool flush = false;
|
||||||
|
|
||||||
|
while ((sptep = rmap_get_first(*rmapp, &iter))) {
|
||||||
|
BUG_ON(!(*sptep & PT_PRESENT_MASK));
|
||||||
|
rmap_printk("%s: spte %p %llx.\n", __func__, sptep, *sptep);
|
||||||
|
|
||||||
|
drop_spte(kvm, sptep);
|
||||||
|
flush = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return flush;
|
||||||
|
}
|
||||||
|
|
||||||
static int kvm_unmap_rmapp(struct kvm *kvm, unsigned long *rmapp,
|
static int kvm_unmap_rmapp(struct kvm *kvm, unsigned long *rmapp,
|
||||||
struct kvm_memory_slot *slot, gfn_t gfn, int level,
|
struct kvm_memory_slot *slot, gfn_t gfn, int level,
|
||||||
unsigned long data)
|
unsigned long data)
|
||||||
{
|
{
|
||||||
u64 *sptep;
|
return kvm_zap_rmapp(kvm, rmapp);
|
||||||
struct rmap_iterator iter;
|
|
||||||
int need_tlb_flush = 0;
|
|
||||||
|
|
||||||
while ((sptep = rmap_get_first(*rmapp, &iter))) {
|
|
||||||
BUG_ON(!(*sptep & PT_PRESENT_MASK));
|
|
||||||
rmap_printk("kvm_rmap_unmap_hva: spte %p %llx gfn %llx (%d)\n",
|
|
||||||
sptep, *sptep, gfn, level);
|
|
||||||
|
|
||||||
drop_spte(kvm, sptep);
|
|
||||||
need_tlb_flush = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return need_tlb_flush;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int kvm_set_pte_rmapp(struct kvm *kvm, unsigned long *rmapp,
|
static int kvm_set_pte_rmapp(struct kvm *kvm, unsigned long *rmapp,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user