diff mbox

[2/6] ram_find_and_save_block: change calling convention

Message ID 1423778591-12590-3-git-send-email-quintela@redhat.com
State New
Headers show

Commit Message

Juan Quintela Feb. 12, 2015, 10:03 p.m. UTC
Add a parameter to pass the number of bytes written, and make it return
the number of pages written instead.

Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 arch_init.c | 44 ++++++++++++++++++++++----------------------
 1 file changed, 22 insertions(+), 22 deletions(-)

Comments

Amit Shah Feb. 24, 2015, 10:05 a.m. UTC | #1
On (Thu) 12 Feb 2015 [23:03:07], Juan Quintela wrote:
> Add a parameter to pass the number of bytes written, and make it return
> the number of pages written instead.
> 
> Signed-off-by: Juan Quintela <quintela@redhat.com>
> ---
>  arch_init.c | 44 ++++++++++++++++++++++----------------------
>  1 file changed, 22 insertions(+), 22 deletions(-)
> 
> diff --git a/arch_init.c b/arch_init.c
> index 0066cf5..1133b26 100644
> --- a/arch_init.c
> +++ b/arch_init.c
> @@ -650,14 +650,19 @@ static int ram_save_page(QEMUFile *f, RAMBlock* block, ram_addr_t offset,
>      return bytes_sent;
>  }
> 
> -/*
> - * ram_find_and_save_block: Finds a page to send and sends it to f
> +/**
> + * ram_find_and_save_block: Finds a dirty page and sends it to f
>   *
> - * Returns:  The number of bytes written.
> + * Returns:  The number of pages written
>   *           0 means no dirty pages
> + *
> + * @f: QEMUFile where to send the data
> + * @last_stage: if we are at the completion stage
> + * @bytes_transferred: increase it with the number of transferred bytes
>   */
> 
> -static int ram_find_and_save_block(QEMUFile *f, bool last_stage)
> +static int ram_find_and_save_block(QEMUFile *f, bool last_stage,
> +                                   uint64_t *bytes_transferred)
>  {
>      RAMBlock *block = last_seen_block;
>      ram_addr_t offset = last_offset;
> @@ -696,7 +701,9 @@ static int ram_find_and_save_block(QEMUFile *f, bool last_stage)
>      last_seen_block = block;
>      last_offset = offset;
> 
> -    return bytes_sent;
> +    *bytes_transferred += bytes_sent;
> +
> +    return (bytes_sent != 0);

Shouldn't page be counted here?

>  }
> 
>  static uint64_t bytes_transferred;
> @@ -869,7 +876,7 @@ static int ram_save_iterate(QEMUFile *f, void *opaque)
>      int ret;
>      int i;
>      int64_t t0;
> -    int total_sent = 0;
> +    int pages_sent = 0;
> 
>      qemu_mutex_lock_ramlist();
> 
> @@ -882,14 +889,14 @@ static int ram_save_iterate(QEMUFile *f, void *opaque)
>      t0 = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
>      i = 0;
>      while ((ret = qemu_file_rate_limit(f)) == 0) {
> -        int bytes_sent;
> +        int pages;

Let's make these unsigned right from the start; we're counting
positive numbers.

		Amit
diff mbox

Patch

diff --git a/arch_init.c b/arch_init.c
index 0066cf5..1133b26 100644
--- a/arch_init.c
+++ b/arch_init.c
@@ -650,14 +650,19 @@  static int ram_save_page(QEMUFile *f, RAMBlock* block, ram_addr_t offset,
     return bytes_sent;
 }

-/*
- * ram_find_and_save_block: Finds a page to send and sends it to f
+/**
+ * ram_find_and_save_block: Finds a dirty page and sends it to f
  *
- * Returns:  The number of bytes written.
+ * Returns:  The number of pages written
  *           0 means no dirty pages
+ *
+ * @f: QEMUFile where to send the data
+ * @last_stage: if we are at the completion stage
+ * @bytes_transferred: increase it with the number of transferred bytes
  */

-static int ram_find_and_save_block(QEMUFile *f, bool last_stage)
+static int ram_find_and_save_block(QEMUFile *f, bool last_stage,
+                                   uint64_t *bytes_transferred)
 {
     RAMBlock *block = last_seen_block;
     ram_addr_t offset = last_offset;
@@ -696,7 +701,9 @@  static int ram_find_and_save_block(QEMUFile *f, bool last_stage)
     last_seen_block = block;
     last_offset = offset;

-    return bytes_sent;
+    *bytes_transferred += bytes_sent;
+
+    return (bytes_sent != 0);
 }

 static uint64_t bytes_transferred;
@@ -869,7 +876,7 @@  static int ram_save_iterate(QEMUFile *f, void *opaque)
     int ret;
     int i;
     int64_t t0;
-    int total_sent = 0;
+    int pages_sent = 0;

     qemu_mutex_lock_ramlist();

@@ -882,14 +889,14 @@  static int ram_save_iterate(QEMUFile *f, void *opaque)
     t0 = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
     i = 0;
     while ((ret = qemu_file_rate_limit(f)) == 0) {
-        int bytes_sent;
+        int pages;

-        bytes_sent = ram_find_and_save_block(f, false);
-        /* no more blocks to sent */
-        if (bytes_sent == 0) {
+        pages = ram_find_and_save_block(f, false, &bytes_transferred);
+        /* no more pages to sent */
+        if (pages == 0) {
             break;
         }
-        total_sent += bytes_sent;
+        pages_sent += pages;
         acct_info.iterations++;
         check_guest_throttling();
         /* we want to check in the 1st loop, just in case it was the 1st time
@@ -916,12 +923,6 @@  static int ram_save_iterate(QEMUFile *f, void *opaque)
      */
     ram_control_after_iterate(f, RAM_CONTROL_ROUND);

-    bytes_transferred += total_sent;
-
-    /*
-     * Do not count these 8 bytes into total_sent, so that we can
-     * return 0 if no page had been dirtied.
-     */
     qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
     bytes_transferred += 8;

@@ -930,7 +931,7 @@  static int ram_save_iterate(QEMUFile *f, void *opaque)
         return ret;
     }

-    return total_sent;
+    return pages_sent;
 }

 static int ram_save_complete(QEMUFile *f, void *opaque)
@@ -944,14 +945,13 @@  static int ram_save_complete(QEMUFile *f, void *opaque)

     /* flush all remaining blocks regardless of rate limiting */
     while (true) {
-        int bytes_sent;
+        int pages;

-        bytes_sent = ram_find_and_save_block(f, true);
+        pages = ram_find_and_save_block(f, true, &bytes_transferred);
         /* no more blocks to sent */
-        if (bytes_sent == 0) {
+        if (pages == 0) {
             break;
         }
-        bytes_transferred += bytes_sent;
     }

     ram_control_after_iterate(f, RAM_CONTROL_FINISH);