免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1917 | 回复: 6
打印 上一主题 下一主题

patch mmu KVM_API_VERSION = 12 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-05 20:10 |只看该作者 |倒序浏览

  1. static int is_largepage_backed(struct kvm_vcpu *vcpu, gfn_t large_gfn)
  2. {
  3.         struct kvm_memory_slot *slot;
  4. +        gfn_t gfn = large_gfn;
  5. +
  6. +        gfn = unalias_gfn(vcpu->kvm, gfn);
  7. +        slot = gfn_to_memslot_unaliased(vcpu->kvm, gfn);
  8. +        if (slot) {
  9. +                int *idx = slot_largepage_idx(gfn, slot);
  10. +                if (*idx || slot->dirty_bitmap)               
  11. +                        return 0;
  12. +        }
  13. -        if (has_wrprotected_page(vcpu->kvm, large_gfn))
  14. -                return 0;

  15.         if (! host_largepage_backed(vcpu->kvm, large_gfn))
  16.                 return 0;

  17. -        slot = gfn_to_memslot(vcpu->kvm, large_gfn);
  18. -        if (slot && slot->dirty_bitmap)
  19. -                return 0;

  20.         return 1;
  21. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2009-12-05 20:19 |只看该作者

  1. static unsigned long * gfn_to_rmap(struct kvm *kvm, gfn_t gfn, int lpage)
  2. {
  3.         struct kvm_memory_slot *slot;
  4.         unsigned long idx;

  5.         slot = gfn_to_memslot(kvm, gfn);
  6. +        BUG_ON(! slot);
  7.         if (! lpage)
  8.                 return &slot->rmap[gfn - slot->base_gfn];

  9. -        idx = (gfn / KVM_PAGES_PER_HPAGE) -
  10. -              (slot->base_gfn / KVM_PAGES_PER_HPAGE);
  11. +        idx = (gfn - slot->base_gfn) / KVM_PAGES_PER_HPAGE;

  12.         return &slot->lpage_info[idx].rmap_pde;
  13. }
复制代码

论坛徽章:
0
3 [报告]
发表于 2009-12-06 10:25 |只看该作者

  1. static int kvm_mmu_zap_page(struct kvm *kvm, struct kvm_mmu_page *sp)
  2. {
  3.         int ret;

  4.         ++kvm->stat.mmu_shadow_zapped;

  5.         ret = mmu_zap_unsync_children(kvm, sp);
  6.         kvm_mmu_page_unlink_children(kvm, sp);
  7.         kvm_mmu_unlink_parents(kvm, sp);

  8.         kvm_flush_remote_tlbs(kvm);

  9.         if (!sp->role.invalid && !sp->role.direct)
  10.                 unaccount_shadowed(kvm, sp->gfn);

  11.         if (sp->unsync)
  12.                 kvm_unlink_unsync_page(kvm, sp);

  13.         if (! sp->root_count) {
  14.                 hlist_del(&sp->hash_link);
  15.                 kvm_mmu_free_page(kvm, sp);
  16. +                ++ret;
  17.         }
  18.         else {
  19.                 sp->role.invalid = 1;
  20.                 list_move(&sp->link, &kvm->arch.active_mmu_pages);
  21.                
  22.                 kvm_reload_remote_mmus(kvm);
  23.         }

  24.         kvm_mmu_reset_last_pte_updated(kvm);
  25.         return ret;
  26. }
复制代码

论坛徽章:
0
4 [报告]
发表于 2009-12-06 10:27 |只看该作者

  1. void kvm_mmu_change_mmu_pages(struct kvm *kvm, unsigned int kvm_nr_mmu_pages)
  2. {
  3.         int used_pages;

  4.         used_pages = kvm->arch.n_alloc_mmu_pages - kvm->arch.n_free_mmu_pages;
  5.         used_pages = max(0, used_pages);

  6.         /*
  7.          * If we set the number of mmu pages to be smaller be than the
  8.          * number of actived pages , we must to free some mmu pages before we
  9.          * change the value
  10.          */

  11.         if (used_pages > kvm_nr_mmu_pages) {
  12.                 while (used_pages > kvm_nr_mmu_pages) {
  13.                         struct kvm_mmu_page *page;

  14.                         page = container_of(kvm->arch.active_mmu_pages.prev, struct kvm_mmu_page, link);
  15. -                        kvm_mmu_zap_page(kvm, page);
  16. -                        used_pages--;
  17. +                        //still dead loop?
  18. +                        used_pages -= kvm_mmu_zap_page(kvm, page);
  19.                 }
  20.                 kvm->arch.n_free_mmu_pages = 0;
  21.         }
  22.         else
  23.                 kvm->arch.n_free_mmu_pages += kvm_nr_mmu_pages - kvm->arch.n_alloc_mmu_pages;

  24.         kvm->arch.n_alloc_mmu_pages = kvm_nr_mmu_pages;
  25. }

复制代码

[ 本帖最后由 rtable 于 2009-12-6 17:20 编辑 ]

tpcc-rcd.rar

942 Bytes, 下载次数: 7

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
5 [报告]
发表于 2009-12-06 15:46 |只看该作者
建议LZ对Patch做一些说明

论坛徽章:
0
6 [报告]
发表于 2009-12-06 17:28 |只看该作者

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
7 [报告]
发表于 2009-12-06 18:54 |只看该作者
楼主把patch发到这里想说明什么呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP