__direct_map函数分析

本文详细分析了KVM虚拟化中用于直接映射的__direct_map函数,该函数根据vcpu、虚拟地址、写权限、页表级别、guest OS和host OS的页帧号等参数,遍历并设置影子页表。在找到指定级别的页表项时,设置相应的页表条目,并处理空页表项,确保页表的正确建立和更新。
摘要由CSDN通过智能技术生成

static int __direct_map(struct kvm_vcpu *vcpu, gpa_t v, int write,
   int level, gfn_t gfn, pfn_t pfn)

/*

vcpu:对应vcpu的kvm_vcpu结构指针。

v:对应guestos物理地址在页帧的偏移量。

write:

level:设定页表的级别

gfn:guest os 的页帧号

pfn : host os 的页帧号。

 

*/

 
{
 struct kvm_shadow_walk_iterator iterator;
 struct kvm_mmu_page *sp;
 int pt_write = 0;
 gfn_t pseudo_gfn;

 for_each_shadow_entry(vcpu, (u64)gfn << PAGE_SHIFT, iterator) {

 

/*

循环遍历guest os页帧号在影子页表中的页表项。

*/
  if (iterator.level == level) {

 

/*

如果等于要设置的页表级别,设置对应的页表。

*/
   mmu_set_spte(vcpu, iterator.sptep, ACC_ALL, ACC_ALL,
         0, write, 1, &pt_write,
         level, gfn, pfn, false, true);
   direct_pte_prefetch(vcpu, iterator.sptep);
   ++vcpu->stat.pf_fixed;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值