* [Qemu-devel] [PATCH v2 0/2] migration: cleanup ram_load @ 2019-07-25 0:20 Wei Yang 2019-07-25 0:20 ` [Qemu-devel] [PATCH v2 1/2] migration: return -EINVAL directly when version_id mismatch Wei Yang ` (2 more replies) 0 siblings, 3 replies; 4+ messages in thread From: Wei Yang @ 2019-07-25 0:20 UTC (permalink / raw) To: qemu-devel; +Cc: Wei Yang, dgilbert, quintela Two cleanup for ram_load: * return -EINVAL for version_id mismatch * extract ram_load_precopy for better readability v2: fix a comment Wei Yang (2): migration: return -EINVAL directly when version_id mismatch migration: extract ram_load_precopy migration/ram.c | 73 +++++++++++++++++++++++++++++++------------------ 1 file changed, 46 insertions(+), 27 deletions(-) -- 2.17.1 ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Qemu-devel] [PATCH v2 1/2] migration: return -EINVAL directly when version_id mismatch 2019-07-25 0:20 [Qemu-devel] [PATCH v2 0/2] migration: cleanup ram_load Wei Yang @ 2019-07-25 0:20 ` Wei Yang 2019-07-25 0:20 ` [Qemu-devel] [PATCH v2 2/2] migration: extract ram_load_precopy Wei Yang 2019-08-07 17:54 ` [Qemu-devel] [PATCH v2 0/2] migration: cleanup ram_load Dr. David Alan Gilbert 2 siblings, 0 replies; 4+ messages in thread From: Wei Yang @ 2019-07-25 0:20 UTC (permalink / raw) To: qemu-devel; +Cc: Wei Yang, dgilbert, quintela It is not reasonable to continue when version_id mismatch. Signed-off-by: Wei Yang <richardw.yang@linux.intel.com> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> --- migration/ram.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/migration/ram.c b/migration/ram.c index 66792568e2..69c8a6bb0f 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -4217,7 +4217,7 @@ static int ram_load(QEMUFile *f, void *opaque, int version_id) seq_iter++; if (version_id != 4) { - ret = -EINVAL; + return -EINVAL; } if (!migrate_use_compression()) { -- 2.17.1 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [Qemu-devel] [PATCH v2 2/2] migration: extract ram_load_precopy 2019-07-25 0:20 [Qemu-devel] [PATCH v2 0/2] migration: cleanup ram_load Wei Yang 2019-07-25 0:20 ` [Qemu-devel] [PATCH v2 1/2] migration: return -EINVAL directly when version_id mismatch Wei Yang @ 2019-07-25 0:20 ` Wei Yang 2019-08-07 17:54 ` [Qemu-devel] [PATCH v2 0/2] migration: cleanup ram_load Dr. David Alan Gilbert 2 siblings, 0 replies; 4+ messages in thread From: Wei Yang @ 2019-07-25 0:20 UTC (permalink / raw) To: qemu-devel; +Cc: Wei Yang, dgilbert, quintela After cleanup, it would be clear to audience there are two cases ram_load: * precopy * postcopy And it is not necessary to check postcopy_running on each iteration for precopy. Signed-off-by: Wei Yang <richardw.yang@linux.intel.com> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> --- v2: fix a comment --- migration/ram.c | 73 +++++++++++++++++++++++++++++++------------------ 1 file changed, 46 insertions(+), 27 deletions(-) diff --git a/migration/ram.c b/migration/ram.c index 69c8a6bb0f..bee6a88c6d 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -4201,40 +4201,26 @@ static void colo_flush_ram_cache(void) trace_colo_flush_ram_cache_end(); } -static int ram_load(QEMUFile *f, void *opaque, int version_id) +/** + * ram_load_precopy: load pages in precopy case + * + * Returns 0 for success or -errno in case of error + * + * Called in precopy mode by ram_load(). + * rcu_read_lock is taken prior to this being called. + * + * @f: QEMUFile where to send the data + */ +static int ram_load_precopy(QEMUFile *f) { - int flags = 0, ret = 0, invalid_flags = 0; - static uint64_t seq_iter; - int len = 0; - /* - * If system is running in postcopy mode, page inserts to host memory must - * be atomic - */ - bool postcopy_running = postcopy_is_running(); + int flags = 0, ret = 0, invalid_flags = 0, len = 0; /* ADVISE is earlier, it shows the source has the postcopy capability on */ bool postcopy_advised = postcopy_is_advised(); - - seq_iter++; - - if (version_id != 4) { - return -EINVAL; - } - if (!migrate_use_compression()) { invalid_flags |= RAM_SAVE_FLAG_COMPRESS_PAGE; } - /* This RCU critical section can be very long running. - * When RCU reclaims in the code start to become numerous, - * it will be necessary to reduce the granularity of this - * critical section. - */ - rcu_read_lock(); - - if (postcopy_running) { - ret = ram_load_postcopy(f); - } - while (!postcopy_running && !ret && !(flags & RAM_SAVE_FLAG_EOS)) { + while (!ret && !(flags & RAM_SAVE_FLAG_EOS)) { ram_addr_t addr, total_ram_bytes; void *host = NULL; uint8_t ch; @@ -4391,6 +4377,39 @@ static int ram_load(QEMUFile *f, void *opaque, int version_id) } } + return ret; +} + +static int ram_load(QEMUFile *f, void *opaque, int version_id) +{ + int ret = 0; + static uint64_t seq_iter; + /* + * If system is running in postcopy mode, page inserts to host memory must + * be atomic + */ + bool postcopy_running = postcopy_is_running(); + + seq_iter++; + + if (version_id != 4) { + return -EINVAL; + } + + /* + * This RCU critical section can be very long running. + * When RCU reclaims in the code start to become numerous, + * it will be necessary to reduce the granularity of this + * critical section. + */ + rcu_read_lock(); + + if (postcopy_running) { + ret = ram_load_postcopy(f); + } else { + ret = ram_load_precopy(f); + } + ret |= wait_for_decompress_done(); rcu_read_unlock(); trace_ram_load_complete(ret, seq_iter); -- 2.17.1 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH v2 0/2] migration: cleanup ram_load 2019-07-25 0:20 [Qemu-devel] [PATCH v2 0/2] migration: cleanup ram_load Wei Yang 2019-07-25 0:20 ` [Qemu-devel] [PATCH v2 1/2] migration: return -EINVAL directly when version_id mismatch Wei Yang 2019-07-25 0:20 ` [Qemu-devel] [PATCH v2 2/2] migration: extract ram_load_precopy Wei Yang @ 2019-08-07 17:54 ` Dr. David Alan Gilbert 2 siblings, 0 replies; 4+ messages in thread From: Dr. David Alan Gilbert @ 2019-08-07 17:54 UTC (permalink / raw) To: Wei Yang; +Cc: qemu-devel, quintela * Wei Yang (richardw.yang@linux.intel.com) wrote: > Two cleanup for ram_load: > > * return -EINVAL for version_id mismatch > * extract ram_load_precopy for better readability > > v2: fix a comment Queued > Wei Yang (2): > migration: return -EINVAL directly when version_id mismatch > migration: extract ram_load_precopy > > migration/ram.c | 73 +++++++++++++++++++++++++++++++------------------ > 1 file changed, 46 insertions(+), 27 deletions(-) > > -- > 2.17.1 > > -- Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2019-08-07 17:55 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2019-07-25 0:20 [Qemu-devel] [PATCH v2 0/2] migration: cleanup ram_load Wei Yang 2019-07-25 0:20 ` [Qemu-devel] [PATCH v2 1/2] migration: return -EINVAL directly when version_id mismatch Wei Yang 2019-07-25 0:20 ` [Qemu-devel] [PATCH v2 2/2] migration: extract ram_load_precopy Wei Yang 2019-08-07 17:54 ` [Qemu-devel] [PATCH v2 0/2] migration: cleanup ram_load Dr. David Alan Gilbert
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).