All of lore.kernel.org
 help / color / mirror / Atom feed
From: Juan Quintela <quintela@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Fam Zheng" <fam@euphon.net>,
	"Peter Maydell" <peter.maydell@linaro.org>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	"Jason Wang" <jasowang@redhat.com>,
	"Mark Cave-Ayland" <mark.cave-ayland@ilande.co.uk>,
	"Peter Xu" <peterx@redhat.com>,
	"Philippe Mathieu-Daudé" <f4bug@amsat.org>,
	"Gerd Hoffmann" <kraxel@redhat.com>,
	"Ani Sinha" <ani@anisinha.ca>,
	"Edgar E. Iglesias" <edgar.iglesias@gmail.com>,
	"Eric Blake" <eblake@redhat.com>,
	"Hannes Reinecke" <hare@suse.com>,
	"Vikram Garhwal" <fnu.vikram@xilinx.com>,
	qemu-block@nongnu.org, "Juan Quintela" <quintela@redhat.com>,
	"Daniel Henrique Barboza" <danielhb413@gmail.com>,
	"Markus Armbruster" <armbru@redhat.com>,
	"Artyom Tarasenko" <atar4qemu@gmail.com>,
	"Pavel Pisa" <pisa@cmp.felk.cvut.cz>,
	"Alistair Francis" <alistair@alistair23.me>,
	"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
	"Greg Kurz" <groug@kaod.org>,
	qemu-arm@nongnu.org, "Cédric Le Goater" <clg@kaod.org>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Stafford Horne" <shorne@gmail.com>,
	"David Gibson" <david@gibson.dropbear.id.au>,
	"Laurent Vivier" <laurent@vivier.eu>,
	"Andrew Baumann" <Andrew.Baumann@microsoft.com>,
	qemu-ppc@nongnu.org, "Igor Mammedov" <imammedo@redhat.com>,
	"Aurelien Jarno" <aurelien@aurel32.net>
Subject: [PULL 36/38] migration: Add postcopy_has_request()
Date: Thu, 27 Jan 2022 16:05:46 +0100	[thread overview]
Message-ID: <20220127150548.20595-37-quintela@redhat.com> (raw)
In-Reply-To: <20220127150548.20595-1-quintela@redhat.com>

From: Peter Xu <peterx@redhat.com>

Add a helper to detect whether postcopy has pending request.

Since at it, cleanup the code a bit, e.g. in unqueue_page() we shouldn't need
to check it again on queue empty because we're the only one (besides cleanup
code, which should never run during this process) that will take a request off
the list, so the request list can only grow but not shrink under the hood.

Signed-off-by: Peter Xu <peterx@redhat.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 | 43 +++++++++++++++++++++++++++----------------
 1 file changed, 27 insertions(+), 16 deletions(-)

diff --git a/migration/ram.c b/migration/ram.c
index 58adcaf430..eb9db4f777 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -355,6 +355,12 @@ static RAMState *ram_state;
 
 static NotifierWithReturnList precopy_notifier_list;
 
+/* Whether postcopy has queued requests? */
+static bool postcopy_has_request(RAMState *rs)
+{
+    return !QSIMPLEQ_EMPTY_ATOMIC(&rs->src_page_requests);
+}
+
 void precopy_infrastructure_init(void)
 {
     notifier_with_return_list_init(&precopy_notifier_list);
@@ -1539,28 +1545,33 @@ static bool find_dirty_block(RAMState *rs, PageSearchStatus *pss, bool *again)
  */
 static RAMBlock *unqueue_page(RAMState *rs, ram_addr_t *offset)
 {
+    struct RAMSrcPageRequest *entry;
     RAMBlock *block = NULL;
 
-    if (QSIMPLEQ_EMPTY_ATOMIC(&rs->src_page_requests)) {
+    if (!postcopy_has_request(rs)) {
         return NULL;
     }
 
     QEMU_LOCK_GUARD(&rs->src_page_req_mutex);
-    if (!QSIMPLEQ_EMPTY(&rs->src_page_requests)) {
-        struct RAMSrcPageRequest *entry =
-                                QSIMPLEQ_FIRST(&rs->src_page_requests);
-        block = entry->rb;
-        *offset = entry->offset;
 
-        if (entry->len > TARGET_PAGE_SIZE) {
-            entry->len -= TARGET_PAGE_SIZE;
-            entry->offset += TARGET_PAGE_SIZE;
-        } else {
-            memory_region_unref(block->mr);
-            QSIMPLEQ_REMOVE_HEAD(&rs->src_page_requests, next_req);
-            g_free(entry);
-            migration_consume_urgent_request();
-        }
+    /*
+     * This should _never_ change even after we take the lock, because no one
+     * should be taking anything off the request list other than us.
+     */
+    assert(postcopy_has_request(rs));
+
+    entry = QSIMPLEQ_FIRST(&rs->src_page_requests);
+    block = entry->rb;
+    *offset = entry->offset;
+
+    if (entry->len > TARGET_PAGE_SIZE) {
+        entry->len -= TARGET_PAGE_SIZE;
+        entry->offset += TARGET_PAGE_SIZE;
+    } else {
+        memory_region_unref(block->mr);
+        QSIMPLEQ_REMOVE_HEAD(&rs->src_page_requests, next_req);
+        g_free(entry);
+        migration_consume_urgent_request();
     }
 
     return block;
@@ -2992,7 +3003,7 @@ 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 ||
-                !QSIMPLEQ_EMPTY(&rs->src_page_requests)) {
+               postcopy_has_request(rs)) {
             int pages;
 
             if (qemu_file_get_error(f)) {
-- 
2.34.1



  parent reply	other threads:[~2022-01-27 16:27 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-27 15:05 [PULL 00/38] Migration 20220127 patches Juan Quintela
2022-01-27 15:05 ` [PULL 01/38] migration: All this fields are unsigned Juan Quintela
2022-01-27 15:05 ` [PULL 02/38] migration: We only need last_stage in two places Juan Quintela
2022-01-27 15:05 ` [PULL 03/38] migration: ram_release_pages() always receive 1 page as argument Juan Quintela
2022-01-27 15:05 ` [PULL 04/38] migration: Remove masking for compression Juan Quintela
2022-01-27 15:05 ` [PULL 05/38] migration: simplify do_compress_ram_page Juan Quintela
2022-01-27 15:05 ` [PULL 06/38] migration: Move ram_release_pages() call to save_zero_page_to_file() Juan Quintela
2022-01-27 15:05 ` [PULL 07/38] multifd: Use proper maximum compression values Juan Quintela
2022-01-27 15:05 ` [PULL 08/38] multifd: Move iov from pages to params Juan Quintela
2022-01-27 15:05 ` [PULL 09/38] multifd: Make zlib use iov's Juan Quintela
2022-01-27 15:05 ` [PULL 10/38] multifd: Make zstd " Juan Quintela
2022-01-27 15:05 ` [PULL 11/38] multifd: Remove send_write() method Juan Quintela
2022-01-27 15:05 ` [PULL 12/38] multifd: Use a single writev on the send side Juan Quintela
2022-01-27 15:05 ` [PULL 13/38] multifd: Unfold "used" variable by its value Juan Quintela
2022-01-27 15:05 ` [PULL 14/38] multifd: Use normal pages array on the send side Juan Quintela
2022-01-27 15:05 ` [PULL 15/38] multifd: Use normal pages array on the recv side Juan Quintela
2022-01-27 15:05 ` [PULL 16/38] multifd: recv side only needs the RAMBlock host address Juan Quintela
2022-01-27 15:05 ` [PULL 17/38] multifd: Rename pages_used to normal_pages Juan Quintela
2022-01-27 15:05 ` [PULL 18/38] Remove unnecessary minimum_version_id_old fields Juan Quintela
2022-02-15 17:13   ` Peter Maydell
2022-02-15 17:34     ` Cédric Le Goater
2022-02-15 17:59       ` Peter Maydell
2022-01-27 15:05 ` [PULL 19/38] migration/migration.c: Add missed default error handler for migration state Juan Quintela
2022-01-27 15:05 ` [PULL 20/38] migration/migration.c: Avoid COLO boot in postcopy migration Juan Quintela
2022-01-27 15:05 ` [PULL 21/38] migration/migration.c: Remove the MIGRATION_STATUS_ACTIVE when migration finished Juan Quintela
2022-01-27 15:05 ` [PULL 22/38] migration: Report the error returned when save_live_iterate fails Juan Quintela
2022-01-27 15:05 ` [PULL 23/38] migration: Add canary to VMSTATE_END_OF_LIST Juan Quintela
2022-01-27 15:05 ` [PULL 24/38] migration: Perform vmsd structure check during tests Juan Quintela
2022-01-27 15:05 ` [PULL 25/38] migration/ram: clean up unused comment Juan Quintela
2022-01-27 15:05 ` [PULL 26/38] migration: Drop dead code of ram_debug_dump_bitmap() Juan Quintela
2022-01-27 15:05 ` [PULL 27/38] migration: Don't return for postcopy_chunk_hostpages() Juan Quintela
2022-01-27 15:05 ` [PULL 28/38] migration: Drop postcopy_chunk_hostpages() Juan Quintela
2022-01-27 15:05 ` [PULL 29/38] migration: Do chunk page in postcopy_each_ram_send_discard() Juan Quintela
2022-01-27 15:05 ` [PULL 30/38] migration: Drop return code for disgard ram process Juan Quintela
2022-01-27 15:05 ` [PULL 31/38] migration: Don't return for postcopy_send_discard_bm_ram() Juan Quintela
2022-01-27 15:05 ` [PULL 32/38] migration: Introduce ram_transferred_add() Juan Quintela
2022-01-27 15:05 ` [PULL 33/38] migration: Tally pre-copy, downtime and post-copy bytes independently Juan Quintela
2022-01-27 15:05 ` [PULL 34/38] migration: No off-by-one for pss->page update in host page size Juan Quintela
2022-01-27 15:05 ` [PULL 35/38] migration: Enable UFFD_FEATURE_THREAD_ID even without blocktime feat Juan Quintela
2022-01-27 15:05 ` Juan Quintela [this message]
2022-01-27 15:05 ` [PULL 37/38] migration: Simplify unqueue_page() Juan Quintela
2022-01-27 15:05 ` [PULL 38/38] migration: Move temp page setup and cleanup into separate functions Juan Quintela
2022-01-28 11:05 ` [PULL 00/38] Migration 20220127 patches Peter Maydell
2022-01-31  9:03   ` 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=20220127150548.20595-37-quintela@redhat.com \
    --to=quintela@redhat.com \
    --cc=Andrew.Baumann@microsoft.com \
    --cc=alistair@alistair23.me \
    --cc=ani@anisinha.ca \
    --cc=armbru@redhat.com \
    --cc=atar4qemu@gmail.com \
    --cc=aurelien@aurel32.net \
    --cc=clg@kaod.org \
    --cc=danielhb413@gmail.com \
    --cc=david@gibson.dropbear.id.au \
    --cc=dgilbert@redhat.com \
    --cc=eblake@redhat.com \
    --cc=edgar.iglesias@gmail.com \
    --cc=f4bug@amsat.org \
    --cc=fam@euphon.net \
    --cc=fnu.vikram@xilinx.com \
    --cc=groug@kaod.org \
    --cc=hare@suse.com \
    --cc=imammedo@redhat.com \
    --cc=jasowang@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=laurent@vivier.eu \
    --cc=mark.cave-ayland@ilande.co.uk \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=peterx@redhat.com \
    --cc=pisa@cmp.felk.cvut.cz \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=shorne@gmail.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.