Re: [PATCH RFC 3/5] KVM: Use rapper functions to create and destroy dirty bitmaps

2010-04-12 Thread Avi Kivity

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

2010-04-11 Thread Avi Kivity

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-11 Thread Takuya Yoshikawa

(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

2010-04-09 Thread Takuya Yoshikawa
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