* [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 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.