[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 07/25] migration: Move static var in ram_block_from_stream() i
From: |
Peter Xu |
Subject: |
[PATCH v2 07/25] migration: Move static var in ram_block_from_stream() into global |
Date: |
Tue, 1 Mar 2022 16:39:07 +0800 |
Static variable is very unfriendly to threading of ram_block_from_stream().
Move it into MigrationIncomingState.
Make the incoming state pointer to be passed over to ram_block_from_stream() on
both caller sites.
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Signed-off-by: Peter Xu <peterx@redhat.com>
---
migration/migration.h | 3 ++-
migration/ram.c | 13 +++++++++----
2 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/migration/migration.h b/migration/migration.h
index 8445e1d14a..d8b9850eae 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -66,7 +66,8 @@ typedef struct {
/* State for the incoming migration */
struct MigrationIncomingState {
QEMUFile *from_src_file;
-
+ /* Previously received RAM's RAMBlock pointer */
+ RAMBlock *last_recv_block;
/* A hook to allow cleanup at the end of incoming migration */
void *transport_data;
void (*transport_cleanup)(void *data);
diff --git a/migration/ram.c b/migration/ram.c
index 3a216c2340..9516dd655a 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -3185,12 +3185,14 @@ static int load_xbzrle(QEMUFile *f, ram_addr_t addr,
void *host)
*
* Returns a pointer from within the RCU-protected ram_list.
*
+ * @mis: the migration incoming state pointer
* @f: QEMUFile where to read the data from
* @flags: Page flags (mostly to see if it's a continuation of previous block)
*/
-static inline RAMBlock *ram_block_from_stream(QEMUFile *f, int flags)
+static inline RAMBlock *ram_block_from_stream(MigrationIncomingState *mis,
+ QEMUFile *f, int flags)
{
- static RAMBlock *block;
+ RAMBlock *block = mis->last_recv_block;
char id[256];
uint8_t len;
@@ -3217,6 +3219,8 @@ static inline RAMBlock *ram_block_from_stream(QEMUFile
*f, int flags)
return NULL;
}
+ mis->last_recv_block = block;
+
return block;
}
@@ -3669,7 +3673,7 @@ static int ram_load_postcopy(QEMUFile *f)
trace_ram_load_postcopy_loop((uint64_t)addr, flags);
if (flags & (RAM_SAVE_FLAG_ZERO | RAM_SAVE_FLAG_PAGE |
RAM_SAVE_FLAG_COMPRESS_PAGE)) {
- block = ram_block_from_stream(f, flags);
+ block = ram_block_from_stream(mis, f, flags);
if (!block) {
ret = -EINVAL;
break;
@@ -3881,6 +3885,7 @@ void colo_flush_ram_cache(void)
*/
static int ram_load_precopy(QEMUFile *f)
{
+ MigrationIncomingState *mis = migration_incoming_get_current();
int flags = 0, ret = 0, invalid_flags = 0, len = 0, i = 0;
/* ADVISE is earlier, it shows the source has the postcopy capability on */
bool postcopy_advised = postcopy_is_advised();
@@ -3919,7 +3924,7 @@ static int ram_load_precopy(QEMUFile *f)
if (flags & (RAM_SAVE_FLAG_ZERO | RAM_SAVE_FLAG_PAGE |
RAM_SAVE_FLAG_COMPRESS_PAGE | RAM_SAVE_FLAG_XBZRLE)) {
- RAMBlock *block = ram_block_from_stream(f, flags);
+ RAMBlock *block = ram_block_from_stream(mis, f, flags);
host = host_from_ram_block_offset(block, addr);
/*
--
2.32.0
- [PATCH v2 00/25] migration: Postcopy Preemption, Peter Xu, 2022/03/01
- [PATCH v2 01/25] migration: Dump sub-cmd name in loadvm_process_command tp, Peter Xu, 2022/03/01
- [PATCH v2 02/25] migration: Finer grained tracepoints for POSTCOPY_LISTEN, Peter Xu, 2022/03/01
- [PATCH v2 03/25] migration: Tracepoint change in postcopy-run bottom half, Peter Xu, 2022/03/01
- [PATCH v2 04/25] migration: Introduce postcopy channels on dest node, Peter Xu, 2022/03/01
- [PATCH v2 05/25] migration: Dump ramblock and offset too when non-same-page detected, Peter Xu, 2022/03/01
- [PATCH v2 06/25] migration: Add postcopy_thread_create(), Peter Xu, 2022/03/01
- [PATCH v2 07/25] migration: Move static var in ram_block_from_stream() into global,
Peter Xu <=
- [PATCH v2 08/25] migration: Add pss.postcopy_requested status, Peter Xu, 2022/03/01
- [PATCH v2 09/25] migration: Move migrate_allow_multifd and helpers into migration.c, Peter Xu, 2022/03/01
- [PATCH v2 10/25] migration: Enlarge postcopy recovery to capture !-EIO too, Peter Xu, 2022/03/01
- [PATCH v2 11/25] migration: postcopy_pause_fault_thread() never fails, Peter Xu, 2022/03/01
- [PATCH v2 14/25] migration: Add migration_incoming_transport_cleanup(), Peter Xu, 2022/03/01
- [PATCH v2 15/25] migration: Allow migrate-recover to run multiple times, Peter Xu, 2022/03/01
- [PATCH v2 13/25] migration: Move channel setup out of postcopy_try_recover(), Peter Xu, 2022/03/01
- [PATCH v2 16/25] migration: Add postcopy-preempt capability, Peter Xu, 2022/03/01
- [PATCH v2 17/25] migration: Postcopy preemption preparation on channel creation, Peter Xu, 2022/03/01
- [PATCH v2 18/25] migration: Postcopy preemption enablement, Peter Xu, 2022/03/01