Re: [Qemu-devel] [PATCH 05/12] arch_init: introduce ram_save_local()

2013-08-04 Thread Lei Li

On 08/03/2013 03:42 AM, Michael R. Hines wrote:

On 07/25/2013 04:18 PM, Lei Li wrote:

Signed-off-by: Lei Li li...@linux.vnet.ibm.com
---
  arch_init.c |   32 
  1 files changed, 32 insertions(+), 0 deletions(-)

diff --git a/arch_init.c b/arch_init.c
index a418071..7eeb52f 100644
--- a/arch_init.c
+++ b/arch_init.c
@@ -757,6 +757,38 @@ static int ram_page_save(QEMUFile *f)
  return bytes_sent;
  }

+static int ram_save_local(QEMUFile *f, void *opaque)
+{
+uint64_t bytes_sent = 0;
+uint64_t total_ram_bytes = ram_bytes_total();
+
+qemu_mutex_lock_ramlist();
+
+while (total_ram_bytes) {
+   void *ram;
+   MemoryRegion *mr;
+
+   bytes_sent = ram_page_save(f);
+   /* No more ram pages. */
+   if (bytes_sent == 0) {
+   return bytes_sent;
+   }
+
+   mr = last_block_local-mr;
+   ram = memory_region_get_ram_ptr(mr) + last_offset_local;
+
+   /* DONTNEED the ram page that has already copied. */
+   qemu_madvise(ram, bytes_sent, QEMU_MADV_DONTNEED);
+   total_ram_bytes -= bytes_sent;
+}
+
+qemu_mutex_unlock_ramlist();
+
+qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
+
+return bytes_sent;
+}
+
  static int load_xbzrle(QEMUFile *f, ram_addr_t addr, void *host)
  {
  int ret, rc = 0;


You need to create a new private structure QEMUFileLocal.

Then override f-save_page and point this to your own function.

See migration-rdma.c for an example.


Yes, I am looking at it. :)



- Michael



--
Lei




Re: [Qemu-devel] [PATCH 05/12] arch_init: introduce ram_save_local()

2013-08-02 Thread Michael R. Hines

On 07/25/2013 04:18 PM, Lei Li wrote:

Signed-off-by: Lei Li li...@linux.vnet.ibm.com
---
  arch_init.c |   32 
  1 files changed, 32 insertions(+), 0 deletions(-)

diff --git a/arch_init.c b/arch_init.c
index a418071..7eeb52f 100644
--- a/arch_init.c
+++ b/arch_init.c
@@ -757,6 +757,38 @@ static int ram_page_save(QEMUFile *f)
  return bytes_sent;
  }

+static int ram_save_local(QEMUFile *f, void *opaque)
+{
+uint64_t bytes_sent = 0;
+uint64_t total_ram_bytes = ram_bytes_total();
+
+qemu_mutex_lock_ramlist();
+
+while (total_ram_bytes) {
+   void *ram;
+   MemoryRegion *mr;
+
+   bytes_sent = ram_page_save(f);
+   /* No more ram pages. */
+   if (bytes_sent == 0) {
+   return bytes_sent;
+   }
+
+   mr = last_block_local-mr;
+   ram = memory_region_get_ram_ptr(mr) + last_offset_local;
+
+   /* DONTNEED the ram page that has already copied. */
+   qemu_madvise(ram, bytes_sent, QEMU_MADV_DONTNEED);
+   total_ram_bytes -= bytes_sent;
+}
+
+qemu_mutex_unlock_ramlist();
+
+qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
+
+return bytes_sent;
+}
+
  static int load_xbzrle(QEMUFile *f, ram_addr_t addr, void *host)
  {
  int ret, rc = 0;


You need to create a new private structure QEMUFileLocal.

Then override f-save_page and point this to your own function.

See migration-rdma.c for an example.

- Michael




[Qemu-devel] [PATCH 05/12] arch_init: introduce ram_save_local()

2013-07-25 Thread Lei Li
Signed-off-by: Lei Li li...@linux.vnet.ibm.com
---
 arch_init.c |   32 
 1 files changed, 32 insertions(+), 0 deletions(-)

diff --git a/arch_init.c b/arch_init.c
index a418071..7eeb52f 100644
--- a/arch_init.c
+++ b/arch_init.c
@@ -757,6 +757,38 @@ static int ram_page_save(QEMUFile *f)
 return bytes_sent;
 }
 
+static int ram_save_local(QEMUFile *f, void *opaque)
+{
+uint64_t bytes_sent = 0;
+uint64_t total_ram_bytes = ram_bytes_total();
+
+qemu_mutex_lock_ramlist();
+
+while (total_ram_bytes) {
+   void *ram;
+   MemoryRegion *mr;
+
+   bytes_sent = ram_page_save(f);
+   /* No more ram pages. */
+   if (bytes_sent == 0) {
+   return bytes_sent;
+   }
+
+   mr = last_block_local-mr;
+   ram = memory_region_get_ram_ptr(mr) + last_offset_local;
+
+   /* DONTNEED the ram page that has already copied. */
+   qemu_madvise(ram, bytes_sent, QEMU_MADV_DONTNEED);
+   total_ram_bytes -= bytes_sent;
+}
+
+qemu_mutex_unlock_ramlist();
+
+qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
+
+return bytes_sent;
+}
+
 static int load_xbzrle(QEMUFile *f, ram_addr_t addr, void *host)
 {
 int ret, rc = 0;
-- 
1.7.7.6