Re: [PATCH RFC 3/5] KVM: Use rapper functions to create and destroy dirty bitmaps
On 04/12/2010 05:07 AM, Takuya Yoshikawa wrote: (2010/04/12 2:13), Avi Kivity wrote: On 04/09/2010 12:34 PM, Takuya Yoshikawa wrote: For x86, we will change the allocation and free parts to do_mmap() and do_munmap(). This patch makes it cleaner. Should be done for all architectures. I don't want different ways of creating dirty bitmaps for different architectures. OK. So the only difference for other(generic) implementation would be if we pin bitmaps or not. Well, ppc shouldn't need to pin the bitmap either, I'd think. -- I have a truly marvellous patch that fixes the bug which this signature is too narrow to contain. -- To unsubscribe from this list: send the line unsubscribe kvm in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH RFC 3/5] KVM: Use rapper functions to create and destroy dirty bitmaps
On 04/09/2010 12:34 PM, Takuya Yoshikawa wrote: For x86, we will change the allocation and free parts to do_mmap() and do_munmap(). This patch makes it cleaner. Should be done for all architectures. I don't want different ways of creating dirty bitmaps for different architectures. -- I have a truly marvellous patch that fixes the bug which this signature is too narrow to contain. -- To unsubscribe from this list: send the line unsubscribe kvm in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH RFC 3/5] KVM: Use rapper functions to create and destroy dirty bitmaps
(2010/04/12 2:13), Avi Kivity wrote: On 04/09/2010 12:34 PM, Takuya Yoshikawa wrote: For x86, we will change the allocation and free parts to do_mmap() and do_munmap(). This patch makes it cleaner. Should be done for all architectures. I don't want different ways of creating dirty bitmaps for different architectures. OK. So the only difference for other(generic) implementation would be if we pin bitmaps or not. -- To unsubscribe from this list: send the line unsubscribe kvm in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RFC 3/5] KVM: Use rapper functions to create and destroy dirty bitmaps
For x86, we will change the allocation and free parts to do_mmap() and do_munmap(). This patch makes it cleaner. Signed-off-by: Takuya Yoshikawa yoshikawa.tak...@oss.ntt.co.jp Signed-off-by: Fernando Luis Vazquez Cao ferna...@oss.ntt.co.jp --- virt/kvm/kvm_main.c | 27 --- 1 files changed, 20 insertions(+), 7 deletions(-) diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 5ab581e..f919bd1 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -431,6 +431,12 @@ out_err_nodisable: return ERR_PTR(r); } +static void kvm_destroy_dirty_bitmap(struct kvm_memory_slot *memslot) +{ + vfree(memslot-dirty_bitmap); + memslot-dirty_bitmap = NULL; +} + /* * Free any memory in @free but not in @dont. */ @@ -443,7 +449,7 @@ static void kvm_free_physmem_slot(struct kvm_memory_slot *free, vfree(free-rmap); if (!dont || free-dirty_bitmap != dont-dirty_bitmap) - vfree(free-dirty_bitmap); + kvm_destroy_dirty_bitmap(free); for (i = 0; i KVM_NR_PAGE_SIZES - 1; ++i) { @@ -454,7 +460,6 @@ static void kvm_free_physmem_slot(struct kvm_memory_slot *free, } free-npages = 0; - free-dirty_bitmap = NULL; free-rmap = NULL; } @@ -516,6 +521,18 @@ static int kvm_vm_release(struct inode *inode, struct file *filp) return 0; } +static int kvm_create_dirty_bitmap(struct kvm_memory_slot *memslot) +{ + int dirty_bytes = kvm_dirty_bitmap_bytes(memslot); + + memslot-dirty_bitmap = vmalloc(dirty_bytes); + if (!memslot-dirty_bitmap) + return -ENOMEM; + + memset(memslot-dirty_bitmap, 0, dirty_bytes); + return 0; +} + /* * Allocate some memory and give it an address in the guest physical address * space. @@ -645,12 +662,8 @@ skip_lpage: /* Allocate page dirty bitmap if needed */ if ((new.flags KVM_MEM_LOG_DIRTY_PAGES) !new.dirty_bitmap) { - int dirty_bytes = kvm_dirty_bitmap_bytes(new); - - new.dirty_bitmap = vmalloc(dirty_bytes); - if (!new.dirty_bitmap) + if (kvm_create_dirty_bitmap(new) 0) goto out_free; - memset(new.dirty_bitmap, 0, dirty_bytes); /* destroy any largepage mappings for dirty tracking */ if (old.npages) flush_shadow = 1; -- 1.6.3.3 -- To unsubscribe from this list: send the line unsubscribe kvm in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html