From 622af671894ac83cd50c5891e032835ab3d34493 Mon Sep 17 00:00:00 2001 From: Takuya Yoshikawa Date: Wed, 8 Feb 2012 12:59:10 +0900 Subject: [PATCH] --- yaml --- r: 297151 b: refs/heads/master c: fb03cb6f44236f4bef62a0dda8e025ff5ca51417 h: refs/heads/master i: 297149: a1363a3b14c7fc5b409f615cc305b97b753b5af0 297147: 3a3a458af17660e683e5a104fb5304baf920964e 297143: 7c556f99c59b9bba57a450293e770f3cdd74b81f 297135: 5d6310aea2f4dd4f452576b954aa3beacfc88c24 297119: 61458c068ab64d92eca53e5840bb25bfb795ab15 297087: 5cf3a848a82306a4da37981f3bc5dfe5be85c242 v: v3 --- [refs] | 2 +- trunk/arch/x86/kvm/mmu.c | 3 +-- trunk/include/linux/kvm_host.h | 7 +++++++ trunk/virt/kvm/kvm_main.c | 7 +------ 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/[refs] b/[refs] index 482931438fbd..cb2762a39348 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9eed0735ca6a5cf386a4998ad4b6d52d1e29353f +refs/heads/master: fb03cb6f44236f4bef62a0dda8e025ff5ca51417 diff --git a/trunk/arch/x86/kvm/mmu.c b/trunk/arch/x86/kvm/mmu.c index ae76cc3392e1..37e7f100a0e0 100644 --- a/trunk/arch/x86/kvm/mmu.c +++ b/trunk/arch/x86/kvm/mmu.c @@ -688,8 +688,7 @@ static struct kvm_lpage_info *lpage_info_slot(gfn_t gfn, { unsigned long idx; - idx = (gfn >> KVM_HPAGE_GFN_SHIFT(level)) - - (slot->base_gfn >> KVM_HPAGE_GFN_SHIFT(level)); + idx = gfn_to_index(gfn, slot->base_gfn, level); return &slot->lpage_info[level - 2][idx]; } diff --git a/trunk/include/linux/kvm_host.h b/trunk/include/linux/kvm_host.h index 9698080c902b..7a08496b974a 100644 --- a/trunk/include/linux/kvm_host.h +++ b/trunk/include/linux/kvm_host.h @@ -681,6 +681,13 @@ static inline int memslot_id(struct kvm *kvm, gfn_t gfn) return gfn_to_memslot(kvm, gfn)->id; } +static inline gfn_t gfn_to_index(gfn_t gfn, gfn_t base_gfn, int level) +{ + /* KVM_HPAGE_GFN_SHIFT(PT_PAGE_TABLE_LEVEL) must be 0. */ + return (gfn >> KVM_HPAGE_GFN_SHIFT(level)) - + (base_gfn >> KVM_HPAGE_GFN_SHIFT(level)); +} + static inline unsigned long gfn_to_hva_memslot(struct kvm_memory_slot *slot, gfn_t gfn) { diff --git a/trunk/virt/kvm/kvm_main.c b/trunk/virt/kvm/kvm_main.c index 470e30520fe8..415fe816fc15 100644 --- a/trunk/virt/kvm/kvm_main.c +++ b/trunk/virt/kvm/kvm_main.c @@ -784,15 +784,10 @@ int __kvm_set_memory_region(struct kvm *kvm, int lpages; int level = i + 2; - /* Avoid unused variable warning if no large pages */ - (void)level; - if (new.lpage_info[i]) continue; - lpages = 1 + ((base_gfn + npages - 1) - >> KVM_HPAGE_GFN_SHIFT(level)); - lpages -= base_gfn >> KVM_HPAGE_GFN_SHIFT(level); + lpages = gfn_to_index(base_gfn + npages - 1, base_gfn, level) + 1; new.lpage_info[i] = vzalloc(lpages * sizeof(*new.lpage_info[i]));