summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuan Quintela <quintela@redhat.com>2017-03-14 13:48:42 +0100
committerJuan Quintela <quintela@redhat.com>2017-04-21 12:25:37 +0200
commit68a098f38652ad7f4883de7beeba0c3dae9b2a0b (patch)
tree450b35265c9380f7d047c5bccb79b9fcb75a3daf
parent9edabd4de6babf36f110c99a05b1558834535ec8 (diff)
downloadqemu-68a098f38652ad7f4883de7beeba0c3dae9b2a0b.tar.gz
ram: Move last_req_rb to RAMState
It was on MigrationState when it is only used inside ram.c for postcopy. Problem is that we need to access it without being able to pass it RAMState directly. Signed-off-by: Juan Quintela <quintela@redhat.com> Reviewed-by: Peter Xu <peterx@redhat.com>
-rw-r--r--include/migration/migration.h2
-rw-r--r--migration/migration.c1
-rw-r--r--migration/ram.c7
3 files changed, 5 insertions, 5 deletions
diff --git a/include/migration/migration.h b/include/migration/migration.h
index 87d0cc51e9..0f7557383b 100644
--- a/include/migration/migration.h
+++ b/include/migration/migration.h
@@ -189,8 +189,6 @@ struct MigrationState
/* Queue of outstanding page requests from the destination */
QemuMutex src_page_req_mutex;
QSIMPLEQ_HEAD(src_page_requests, MigrationSrcPageRequest) src_page_requests;
- /* The RAMBlock used in the last src_page_request */
- RAMBlock *last_req_rb;
/* The semaphore is used to notify COLO thread that failover is finished */
QemuSemaphore colo_exit_sem;
diff --git a/migration/migration.c b/migration/migration.c
index 7f7bab9523..c1730a0cad 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1126,7 +1126,6 @@ MigrationState *migrate_init(const MigrationParams *params)
s->postcopy_after_devices = false;
s->postcopy_requests = 0;
s->migration_thread_running = false;
- s->last_req_rb = NULL;
error_free(s->error);
s->error = NULL;
diff --git a/migration/ram.c b/migration/ram.c
index 2f5cbd1727..cec51b4bdc 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -204,6 +204,8 @@ struct RAMState {
QemuMutex bitmap_mutex;
/* Ram Bitmap protected by RCU */
RAMBitmap *ram_bitmap;
+ /* The RAMBlock used in the last src_page_requests */
+ RAMBlock *last_req_rb;
};
typedef struct RAMState RAMState;
@@ -1226,12 +1228,13 @@ int ram_save_queue_pages(MigrationState *ms, const char *rbname,
ram_addr_t start, ram_addr_t len)
{
RAMBlock *ramblock;
+ RAMState *rs = &ram_state;
ms->postcopy_requests++;
rcu_read_lock();
if (!rbname) {
/* Reuse last RAMBlock */
- ramblock = ms->last_req_rb;
+ ramblock = rs->last_req_rb;
if (!ramblock) {
/*
@@ -1249,7 +1252,7 @@ int ram_save_queue_pages(MigrationState *ms, const char *rbname,
error_report("ram_save_queue_pages no block '%s'", rbname);
goto err;
}
- ms->last_req_rb = ramblock;
+ rs->last_req_rb = ramblock;
}
trace_ram_save_queue_pages(ramblock->idstr, start, len);
if (start+len > ramblock->used_length) {