diff mbox

[v2,1/3] migration: postcopy_place_page factoring out

Message ID 1497544575-18628-2-git-send-email-a.perevalov@samsung.com (mailing list archive)
State New, archived
Headers show

Commit Message

Alexey Perevalov June 15, 2017, 4:36 p.m. UTC
Need to mark copied pages as closer as possible to the place where it
tracks down. That will be necessary in futher patch.

Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Alexey Perevalov <a.perevalov@samsung.com>
---
 migration/postcopy-ram.c | 13 ++++++++-----
 migration/postcopy-ram.h |  4 ++--
 migration/ram.c          |  4 ++--
 3 files changed, 12 insertions(+), 9 deletions(-)

Comments

Peter Xu June 16, 2017, 8:46 a.m. UTC | #1
On Thu, Jun 15, 2017 at 07:36:13PM +0300, Alexey Perevalov wrote:
> Need to mark copied pages as closer as possible to the place where it
> tracks down. That will be necessary in futher patch.
> 
> Reviewed-by: Juan Quintela <quintela@redhat.com>
> Signed-off-by: Alexey Perevalov <a.perevalov@samsung.com>
> ---
>  migration/postcopy-ram.c | 13 ++++++++-----
>  migration/postcopy-ram.h |  4 ++--
>  migration/ram.c          |  4 ++--
>  3 files changed, 12 insertions(+), 9 deletions(-)
> 
> diff --git a/migration/postcopy-ram.c b/migration/postcopy-ram.c
> index c8c4500..743ca6c 100644
> --- a/migration/postcopy-ram.c
> +++ b/migration/postcopy-ram.c
> @@ -566,9 +566,10 @@ int postcopy_ram_enable_notify(MigrationIncomingState *mis)
>   * returns 0 on success
>   */
>  int postcopy_place_page(MigrationIncomingState *mis, void *host, void *from,
> -                        size_t pagesize)
> +                        RAMBlock *rb)
>  {
>      struct uffdio_copy copy_struct;
> +    size_t pagesize = qemu_ram_pagesize(rb);
>  
>      copy_struct.dst = (uint64_t)(uintptr_t)host;
>      copy_struct.src = (uint64_t)(uintptr_t)from;
> @@ -597,10 +598,12 @@ int postcopy_place_page(MigrationIncomingState *mis, void *host, void *from,
>   * returns 0 on success
>   */
>  int postcopy_place_page_zero(MigrationIncomingState *mis, void *host,
> -                             size_t pagesize)
> +                             RAMBlock *rb)
>  {
> +    size_t pagesize;
>      trace_postcopy_place_page_zero(host);
>  
> +    pagesize = qemu_ram_pagesize(rb);

Nit: we can remove pagesize val since it's only used in below line?

Other than that:

Reviewed-by: Peter Xu <peterx@redhat.com>

>      if (pagesize == getpagesize()) {
>          struct uffdio_zeropage zero_struct;
>          zero_struct.range.start = (uint64_t)(uintptr_t)host;
> @@ -631,7 +634,7 @@ int postcopy_place_page_zero(MigrationIncomingState *mis, void *host,
>              memset(mis->postcopy_tmp_zero_page, '\0', mis->largest_page_size);
>          }
>          return postcopy_place_page(mis, host, mis->postcopy_tmp_zero_page,
> -                                   pagesize);
> +                                   rb);
>      }
>  
>      return 0;
> @@ -694,14 +697,14 @@ int postcopy_ram_enable_notify(MigrationIncomingState *mis)
>  }
>  
>  int postcopy_place_page(MigrationIncomingState *mis, void *host, void *from,
> -                        size_t pagesize)
> +                        RAMBlock *rb)
>  {
>      assert(0);
>      return -1;
>  }
>  
>  int postcopy_place_page_zero(MigrationIncomingState *mis, void *host,
> -                        size_t pagesize)
> +                        RAMBlock *rb)
>  {
>      assert(0);
>      return -1;
> diff --git a/migration/postcopy-ram.h b/migration/postcopy-ram.h
> index 52d51e8..78a3591 100644
> --- a/migration/postcopy-ram.h
> +++ b/migration/postcopy-ram.h
> @@ -72,14 +72,14 @@ void postcopy_discard_send_finish(MigrationState *ms,
>   * returns 0 on success
>   */
>  int postcopy_place_page(MigrationIncomingState *mis, void *host, void *from,
> -                        size_t pagesize);
> +                        RAMBlock *rb);
>  
>  /*
>   * Place a zero page at (host) atomically
>   * returns 0 on success
>   */
>  int postcopy_place_page_zero(MigrationIncomingState *mis, void *host,
> -                             size_t pagesize);
> +                             RAMBlock *rb);
>  
>  /* The current postcopy state is read/set by postcopy_state_get/set
>   * which update it atomically.
> diff --git a/migration/ram.c b/migration/ram.c
> index 8dbdfdb..f50479d 100644
> --- a/migration/ram.c
> +++ b/migration/ram.c
> @@ -2465,10 +2465,10 @@ static int ram_load_postcopy(QEMUFile *f)
>  
>              if (all_zero) {
>                  ret = postcopy_place_page_zero(mis, place_dest,
> -                                               block->page_size);
> +                                               block);
>              } else {
>                  ret = postcopy_place_page(mis, place_dest,
> -                                          place_source, block->page_size);
> +                                          place_source, block);
>              }
>          }
>          if (!ret) {
> -- 
> 1.9.1
>
Dr. David Alan Gilbert June 16, 2017, 4:24 p.m. UTC | #2
* Alexey Perevalov (a.perevalov@samsung.com) wrote:
> Need to mark copied pages as closer as possible to the place where it
> tracks down. That will be necessary in futher patch.
> 
> Reviewed-by: Juan Quintela <quintela@redhat.com>
> Signed-off-by: Alexey Perevalov <a.perevalov@samsung.com>

Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>

> ---
>  migration/postcopy-ram.c | 13 ++++++++-----
>  migration/postcopy-ram.h |  4 ++--
>  migration/ram.c          |  4 ++--
>  3 files changed, 12 insertions(+), 9 deletions(-)
> 
> diff --git a/migration/postcopy-ram.c b/migration/postcopy-ram.c
> index c8c4500..743ca6c 100644
> --- a/migration/postcopy-ram.c
> +++ b/migration/postcopy-ram.c
> @@ -566,9 +566,10 @@ int postcopy_ram_enable_notify(MigrationIncomingState *mis)
>   * returns 0 on success
>   */
>  int postcopy_place_page(MigrationIncomingState *mis, void *host, void *from,
> -                        size_t pagesize)
> +                        RAMBlock *rb)
>  {
>      struct uffdio_copy copy_struct;
> +    size_t pagesize = qemu_ram_pagesize(rb);
>  
>      copy_struct.dst = (uint64_t)(uintptr_t)host;
>      copy_struct.src = (uint64_t)(uintptr_t)from;
> @@ -597,10 +598,12 @@ int postcopy_place_page(MigrationIncomingState *mis, void *host, void *from,
>   * returns 0 on success
>   */
>  int postcopy_place_page_zero(MigrationIncomingState *mis, void *host,
> -                             size_t pagesize)
> +                             RAMBlock *rb)
>  {
> +    size_t pagesize;
>      trace_postcopy_place_page_zero(host);
>  
> +    pagesize = qemu_ram_pagesize(rb);
>      if (pagesize == getpagesize()) {
>          struct uffdio_zeropage zero_struct;
>          zero_struct.range.start = (uint64_t)(uintptr_t)host;
> @@ -631,7 +634,7 @@ int postcopy_place_page_zero(MigrationIncomingState *mis, void *host,
>              memset(mis->postcopy_tmp_zero_page, '\0', mis->largest_page_size);
>          }
>          return postcopy_place_page(mis, host, mis->postcopy_tmp_zero_page,
> -                                   pagesize);
> +                                   rb);
>      }
>  
>      return 0;
> @@ -694,14 +697,14 @@ int postcopy_ram_enable_notify(MigrationIncomingState *mis)
>  }
>  
>  int postcopy_place_page(MigrationIncomingState *mis, void *host, void *from,
> -                        size_t pagesize)
> +                        RAMBlock *rb)
>  {
>      assert(0);
>      return -1;
>  }
>  
>  int postcopy_place_page_zero(MigrationIncomingState *mis, void *host,
> -                        size_t pagesize)
> +                        RAMBlock *rb)
>  {
>      assert(0);
>      return -1;
> diff --git a/migration/postcopy-ram.h b/migration/postcopy-ram.h
> index 52d51e8..78a3591 100644
> --- a/migration/postcopy-ram.h
> +++ b/migration/postcopy-ram.h
> @@ -72,14 +72,14 @@ void postcopy_discard_send_finish(MigrationState *ms,
>   * returns 0 on success
>   */
>  int postcopy_place_page(MigrationIncomingState *mis, void *host, void *from,
> -                        size_t pagesize);
> +                        RAMBlock *rb);
>  
>  /*
>   * Place a zero page at (host) atomically
>   * returns 0 on success
>   */
>  int postcopy_place_page_zero(MigrationIncomingState *mis, void *host,
> -                             size_t pagesize);
> +                             RAMBlock *rb);
>  
>  /* The current postcopy state is read/set by postcopy_state_get/set
>   * which update it atomically.
> diff --git a/migration/ram.c b/migration/ram.c
> index 8dbdfdb..f50479d 100644
> --- a/migration/ram.c
> +++ b/migration/ram.c
> @@ -2465,10 +2465,10 @@ static int ram_load_postcopy(QEMUFile *f)
>  
>              if (all_zero) {
>                  ret = postcopy_place_page_zero(mis, place_dest,
> -                                               block->page_size);
> +                                               block);
>              } else {
>                  ret = postcopy_place_page(mis, place_dest,
> -                                          place_source, block->page_size);
> +                                          place_source, block);
>              }
>          }
>          if (!ret) {
> -- 
> 1.9.1
> 
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
diff mbox

Patch

diff --git a/migration/postcopy-ram.c b/migration/postcopy-ram.c
index c8c4500..743ca6c 100644
--- a/migration/postcopy-ram.c
+++ b/migration/postcopy-ram.c
@@ -566,9 +566,10 @@  int postcopy_ram_enable_notify(MigrationIncomingState *mis)
  * returns 0 on success
  */
 int postcopy_place_page(MigrationIncomingState *mis, void *host, void *from,
-                        size_t pagesize)
+                        RAMBlock *rb)
 {
     struct uffdio_copy copy_struct;
+    size_t pagesize = qemu_ram_pagesize(rb);
 
     copy_struct.dst = (uint64_t)(uintptr_t)host;
     copy_struct.src = (uint64_t)(uintptr_t)from;
@@ -597,10 +598,12 @@  int postcopy_place_page(MigrationIncomingState *mis, void *host, void *from,
  * returns 0 on success
  */
 int postcopy_place_page_zero(MigrationIncomingState *mis, void *host,
-                             size_t pagesize)
+                             RAMBlock *rb)
 {
+    size_t pagesize;
     trace_postcopy_place_page_zero(host);
 
+    pagesize = qemu_ram_pagesize(rb);
     if (pagesize == getpagesize()) {
         struct uffdio_zeropage zero_struct;
         zero_struct.range.start = (uint64_t)(uintptr_t)host;
@@ -631,7 +634,7 @@  int postcopy_place_page_zero(MigrationIncomingState *mis, void *host,
             memset(mis->postcopy_tmp_zero_page, '\0', mis->largest_page_size);
         }
         return postcopy_place_page(mis, host, mis->postcopy_tmp_zero_page,
-                                   pagesize);
+                                   rb);
     }
 
     return 0;
@@ -694,14 +697,14 @@  int postcopy_ram_enable_notify(MigrationIncomingState *mis)
 }
 
 int postcopy_place_page(MigrationIncomingState *mis, void *host, void *from,
-                        size_t pagesize)
+                        RAMBlock *rb)
 {
     assert(0);
     return -1;
 }
 
 int postcopy_place_page_zero(MigrationIncomingState *mis, void *host,
-                        size_t pagesize)
+                        RAMBlock *rb)
 {
     assert(0);
     return -1;
diff --git a/migration/postcopy-ram.h b/migration/postcopy-ram.h
index 52d51e8..78a3591 100644
--- a/migration/postcopy-ram.h
+++ b/migration/postcopy-ram.h
@@ -72,14 +72,14 @@  void postcopy_discard_send_finish(MigrationState *ms,
  * returns 0 on success
  */
 int postcopy_place_page(MigrationIncomingState *mis, void *host, void *from,
-                        size_t pagesize);
+                        RAMBlock *rb);
 
 /*
  * Place a zero page at (host) atomically
  * returns 0 on success
  */
 int postcopy_place_page_zero(MigrationIncomingState *mis, void *host,
-                             size_t pagesize);
+                             RAMBlock *rb);
 
 /* The current postcopy state is read/set by postcopy_state_get/set
  * which update it atomically.
diff --git a/migration/ram.c b/migration/ram.c
index 8dbdfdb..f50479d 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -2465,10 +2465,10 @@  static int ram_load_postcopy(QEMUFile *f)
 
             if (all_zero) {
                 ret = postcopy_place_page_zero(mis, place_dest,
-                                               block->page_size);
+                                               block);
             } else {
                 ret = postcopy_place_page(mis, place_dest,
-                                          place_source, block->page_size);
+                                          place_source, block);
             }
         }
         if (!ret) {