diff options
author | Joerg Roedel <joerg.roedel@amd.com> | 2010-07-01 10:00:11 -0400 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2010-08-01 03:47:30 -0400 |
commit | 828554136bbacae6e39fc31b9cd7e7c660ad7530 (patch) | |
tree | 4e2ec85ff33c9c1e7245e83ed8e4fa3791007ef7 /virt/kvm/kvm_main.c | |
parent | 95c87e2b4460a488ec7ce42f273893e410ab385a (diff) |
KVM: Remove unnecessary divide operations
This patch converts unnecessary divide and modulo operations
in the KVM large page related code into logical operations.
This allows to convert gfn_t to u64 while not breaking 32
bit builds.
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Diffstat (limited to 'virt/kvm/kvm_main.c')
-rw-r--r-- | virt/kvm/kvm_main.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index ec2e3c6ac7ed..a60b6b053b6f 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c | |||
@@ -626,9 +626,9 @@ int __kvm_set_memory_region(struct kvm *kvm, | |||
626 | if (new.lpage_info[i]) | 626 | if (new.lpage_info[i]) |
627 | continue; | 627 | continue; |
628 | 628 | ||
629 | lpages = 1 + (base_gfn + npages - 1) / | 629 | lpages = 1 + ((base_gfn + npages - 1) |
630 | KVM_PAGES_PER_HPAGE(level); | 630 | >> KVM_HPAGE_GFN_SHIFT(level)); |
631 | lpages -= base_gfn / KVM_PAGES_PER_HPAGE(level); | 631 | lpages -= base_gfn >> KVM_HPAGE_GFN_SHIFT(level); |
632 | 632 | ||
633 | new.lpage_info[i] = vmalloc(lpages * sizeof(*new.lpage_info[i])); | 633 | new.lpage_info[i] = vmalloc(lpages * sizeof(*new.lpage_info[i])); |
634 | 634 | ||
@@ -638,9 +638,9 @@ int __kvm_set_memory_region(struct kvm *kvm, | |||
638 | memset(new.lpage_info[i], 0, | 638 | memset(new.lpage_info[i], 0, |
639 | lpages * sizeof(*new.lpage_info[i])); | 639 | lpages * sizeof(*new.lpage_info[i])); |
640 | 640 | ||
641 | if (base_gfn % KVM_PAGES_PER_HPAGE(level)) | 641 | if (base_gfn & (KVM_PAGES_PER_HPAGE(level) - 1)) |
642 | new.lpage_info[i][0].write_count = 1; | 642 | new.lpage_info[i][0].write_count = 1; |
643 | if ((base_gfn+npages) % KVM_PAGES_PER_HPAGE(level)) | 643 | if ((base_gfn+npages) & (KVM_PAGES_PER_HPAGE(level) - 1)) |
644 | new.lpage_info[i][lpages - 1].write_count = 1; | 644 | new.lpage_info[i][lpages - 1].write_count = 1; |
645 | ugfn = new.userspace_addr >> PAGE_SHIFT; | 645 | ugfn = new.userspace_addr >> PAGE_SHIFT; |
646 | /* | 646 | /* |