qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Juan Quintela <quintela@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Laurent Vivier" <lvivier@redhat.com>,
	"Peter Maydell" <peter.maydell@linaro.org>,
	"Thomas Huth" <thuth@redhat.com>,
	"Corey Minyard" <cminyard@mvista.com>,
	"Daniel P. Berrangé" <berrange@redhat.com>,
	"Eduardo Habkost" <ehabkost@redhat.com>,
	"Juan Quintela" <quintela@redhat.com>,
	"Stefan Weil" <sw@weilnetz.de>,
	"Richard Henderson" <rth@twiddle.net>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
	qemu-arm@nongnu.org, qemu-ppc@nongnu.org,
	"Wei Yang" <richardw.yang@linux.intel.com>,
	"Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"David Gibson" <david@gibson.dropbear.id.au>,
	"Jason Wang" <jasowang@redhat.com>,
	"Stefan Berger" <stefanb@linux.ibm.com>
Subject: [PULL 19/30] migration/postcopy: enable random order target page arrival
Date: Tue, 14 Jan 2020 12:39:15 +0100	[thread overview]
Message-ID: <20200114113926.3556-20-quintela@redhat.com> (raw)
In-Reply-To: <20200114113926.3556-1-quintela@redhat.com>

From: Wei Yang <richardw.yang@linux.intel.com>

After using number of target page received to track one host page, we
could have the capability to handle random order target page arrival in
one host page.

This is a preparation for enabling compress during postcopy.

Signed-off-by: Wei Yang <richardw.yang@linux.intel.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 migration/ram.c | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/migration/ram.c b/migration/ram.c
index 460abfa2c3..a7414170e5 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -4050,7 +4050,7 @@ static int ram_load_postcopy(QEMUFile *f)
     MigrationIncomingState *mis = migration_incoming_get_current();
     /* Temporary page that is later 'placed' */
     void *postcopy_host_page = mis->postcopy_tmp_page;
-    void *last_host = NULL;
+    void *this_host = NULL;
     bool all_zero = false;
     int target_pages = 0;
 
@@ -4097,24 +4097,26 @@ static int ram_load_postcopy(QEMUFile *f)
              * that's moved into place later.
              * The migration protocol uses,  possibly smaller, target-pages
              * however the source ensures it always sends all the components
-             * of a host page in order.
+             * of a host page in one chunk.
              */
             page_buffer = postcopy_host_page +
                           ((uintptr_t)host & (block->page_size - 1));
             /* If all TP are zero then we can optimise the place */
             if (target_pages == 1) {
                 all_zero = true;
+                this_host = (void *)QEMU_ALIGN_DOWN((uintptr_t)host,
+                                                    block->page_size);
             } else {
                 /* not the 1st TP within the HP */
-                if (host != (last_host + TARGET_PAGE_SIZE)) {
-                    error_report("Non-sequential target page %p/%p",
-                                  host, last_host);
+                if (QEMU_ALIGN_DOWN((uintptr_t)host, block->page_size) !=
+                    (uintptr_t)this_host) {
+                    error_report("Non-same host page %p/%p",
+                                  host, this_host);
                     ret = -EINVAL;
                     break;
                 }
             }
 
-
             /*
              * If it's the last part of a host page then we place the host
              * page
@@ -4125,7 +4127,6 @@ static int ram_load_postcopy(QEMUFile *f)
             }
             place_source = postcopy_host_page;
         }
-        last_host = host;
 
         switch (flags & ~RAM_SAVE_FLAG_CONTINUE) {
         case RAM_SAVE_FLAG_ZERO:
@@ -4178,7 +4179,8 @@ static int ram_load_postcopy(QEMUFile *f)
 
         if (!ret && place_needed) {
             /* This gets called at the last target page in the host page */
-            void *place_dest = host + TARGET_PAGE_SIZE - block->page_size;
+            void *place_dest = (void *)QEMU_ALIGN_DOWN((uintptr_t)host,
+                                                       block->page_size);
 
             if (all_zero) {
                 ret = postcopy_place_page_zero(mis, place_dest,
-- 
2.24.1



  parent reply	other threads:[~2020-01-14 11:54 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-14 11:38 [PULL 00/30] Migration pull patches (3rd try) Juan Quintela
2020-01-14 11:38 ` [PULL 01/30] multifd: Initialize local variable Juan Quintela
2020-01-14 12:00   ` Daniel P. Berrangé
2020-01-14 11:38 ` [PULL 02/30] migration-test: Add migration multifd test Juan Quintela
2020-01-14 11:38 ` [PULL 03/30] migration: Make sure that we don't call write() in case of error Juan Quintela
2020-01-14 11:39 ` [PULL 04/30] migration-test: introduce functions to handle string parameters Juan Quintela
2020-01-14 11:39 ` [PULL 05/30] migration-test: ppc64: fix FORTH test program Juan Quintela
2020-01-14 11:39 ` [PULL 06/30] runstate: ignore finishmigrate -> prelaunch transition Juan Quintela
2020-01-14 11:39 ` [PULL 07/30] ram.c: remove unneeded labels Juan Quintela
2020-01-14 11:39 ` [PULL 08/30] migration: Rate limit inside host pages Juan Quintela
2020-01-14 11:39 ` [PULL 09/30] migration: Fix incorrect integer->float conversion caught by clang Juan Quintela
2020-01-14 11:39 ` [PULL 10/30] migration: Fix the re-run check of the migrate-incoming command Juan Quintela
2020-01-14 11:39 ` [PULL 11/30] misc: use QEMU_IS_ALIGNED Juan Quintela
2020-01-14 11:39 ` [PULL 12/30] migration: add savevm_state_handler_remove() Juan Quintela
2020-01-14 11:39 ` [PULL 13/30] migration: savevm_state_handler_insert: constant-time element insertion Juan Quintela
2020-01-14 11:39 ` [PULL 14/30] migration/ram: Yield periodically to the main loop Juan Quintela
2020-01-14 11:39 ` [PULL 15/30] migration/postcopy: reduce memset when it is zero page and matches_target_page_size Juan Quintela
2020-01-14 11:39 ` [PULL 16/30] migration/postcopy: wait for decompress thread in precopy Juan Quintela
2020-01-14 11:39 ` [PULL 17/30] migration/postcopy: count target page number to decide the place_needed Juan Quintela
2020-01-14 11:39 ` [PULL 18/30] migration/postcopy: set all_zero to true on the first target page Juan Quintela
2020-01-14 11:39 ` Juan Quintela [this message]
2020-01-14 11:39 ` [PULL 20/30] migration/postcopy: enable compress during postcopy Juan Quintela
2020-01-14 11:39 ` [PULL 21/30] migration/multifd: clean pages after filling packet Juan Quintela
2020-01-14 11:39 ` [PULL 22/30] migration/multifd: not use multifd during postcopy Juan Quintela
2020-01-14 11:39 ` [PULL 23/30] migration/multifd: fix nullptr access in terminating multifd threads Juan Quintela
2020-01-14 11:39 ` [PULL 24/30] migration/multifd: fix destroyed mutex " Juan Quintela
2020-01-14 11:39 ` [PULL 25/30] Bug #1829242 correction Juan Quintela
2020-01-14 11:39 ` [PULL 26/30] migration: Define VMSTATE_INSTANCE_ID_ANY Juan Quintela
2020-01-14 11:39 ` [PULL 27/30] migration: Change SaveStateEntry.instance_id into uint32_t Juan Quintela
2020-01-14 11:39 ` [PULL 28/30] apic: Use 32bit APIC ID for migration instance ID Juan Quintela
2020-01-14 11:39 ` [PULL 29/30] migration: Support QLIST migration Juan Quintela
2020-01-14 11:39 ` [PULL 30/30] multifd: Allocate uint64_t instead of ram_addr_t Juan Quintela
2020-01-14 12:02   ` Daniel P. Berrangé
2020-01-14 12:44 ` [PULL 00/30] Migration pull patches (3rd try) Juan Quintela

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200114113926.3556-20-quintela@redhat.com \
    --to=quintela@redhat.com \
    --cc=berrange@redhat.com \
    --cc=cminyard@mvista.com \
    --cc=david@gibson.dropbear.id.au \
    --cc=dgilbert@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=jasowang@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=richardw.yang@linux.intel.com \
    --cc=rth@twiddle.net \
    --cc=stefanb@linux.ibm.com \
    --cc=sw@weilnetz.de \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).