mirror of https://github.com/xqemu/xqemu.git
migration: Move postcopy stuff to postcopy-ram.c
Yes, we don't have a good place to put that stuff. Signed-off-by: Juan Quintela <quintela@redhat.com> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
This commit is contained in:
parent
aa3544c371
commit
bac3b21218
|
@ -61,28 +61,6 @@ enum mig_rp_message_type {
|
||||||
|
|
||||||
typedef QLIST_HEAD(, LoadStateEntry) LoadStateEntry_Head;
|
typedef QLIST_HEAD(, LoadStateEntry) LoadStateEntry_Head;
|
||||||
|
|
||||||
/* The current postcopy state is read/set by postcopy_state_get/set
|
|
||||||
* which update it atomically.
|
|
||||||
* The state is updated as postcopy messages are received, and
|
|
||||||
* in general only one thread should be writing to the state at any one
|
|
||||||
* time, initially the main thread and then the listen thread;
|
|
||||||
* Corner cases are where either thread finishes early and/or errors.
|
|
||||||
* The state is checked as messages are received to ensure that
|
|
||||||
* the source is sending us messages in the correct order.
|
|
||||||
* The state is also used by the RAM reception code to know if it
|
|
||||||
* has to place pages atomically, and the cleanup code at the end of
|
|
||||||
* the main thread to know if it has to delay cleanup until the end
|
|
||||||
* of postcopy.
|
|
||||||
*/
|
|
||||||
typedef enum {
|
|
||||||
POSTCOPY_INCOMING_NONE = 0, /* Initial state - no postcopy */
|
|
||||||
POSTCOPY_INCOMING_ADVISE,
|
|
||||||
POSTCOPY_INCOMING_DISCARD,
|
|
||||||
POSTCOPY_INCOMING_LISTENING,
|
|
||||||
POSTCOPY_INCOMING_RUNNING,
|
|
||||||
POSTCOPY_INCOMING_END
|
|
||||||
} PostcopyState;
|
|
||||||
|
|
||||||
/* State for the incoming migration */
|
/* State for the incoming migration */
|
||||||
struct MigrationIncomingState {
|
struct MigrationIncomingState {
|
||||||
QEMUFile *from_src_file;
|
QEMUFile *from_src_file;
|
||||||
|
@ -339,8 +317,4 @@ void global_state_store_running(void);
|
||||||
void migration_page_queue_free(void);
|
void migration_page_queue_free(void);
|
||||||
int ram_save_queue_pages(const char *rbname, ram_addr_t start, ram_addr_t len);
|
int ram_save_queue_pages(const char *rbname, ram_addr_t start, ram_addr_t len);
|
||||||
uint64_t ram_pagesize_summary(void);
|
uint64_t ram_pagesize_summary(void);
|
||||||
|
|
||||||
PostcopyState postcopy_state_get(void);
|
|
||||||
/* Set the state and return the old state */
|
|
||||||
PostcopyState postcopy_state_set(PostcopyState new_state);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -78,13 +78,6 @@ static NotifierList migration_state_notifiers =
|
||||||
|
|
||||||
static bool deferred_incoming;
|
static bool deferred_incoming;
|
||||||
|
|
||||||
/*
|
|
||||||
* Current state of incoming postcopy; note this is not part of
|
|
||||||
* MigrationIncomingState since it's state is used during cleanup
|
|
||||||
* at the end as MIS is being freed.
|
|
||||||
*/
|
|
||||||
static PostcopyState incoming_postcopy_state;
|
|
||||||
|
|
||||||
/* When we add fault tolerance, we could have several
|
/* When we add fault tolerance, we could have several
|
||||||
migrations at once. For now we don't need to add
|
migrations at once. For now we don't need to add
|
||||||
dynamic creation of migration */
|
dynamic creation of migration */
|
||||||
|
@ -2098,14 +2091,3 @@ void migrate_fd_connect(MigrationState *s)
|
||||||
s->migration_thread_running = true;
|
s->migration_thread_running = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
PostcopyState postcopy_state_get(void)
|
|
||||||
{
|
|
||||||
return atomic_mb_read(&incoming_postcopy_state);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Set the state and return the old state */
|
|
||||||
PostcopyState postcopy_state_set(PostcopyState new_state)
|
|
||||||
{
|
|
||||||
return atomic_xchg(&incoming_postcopy_state, new_state);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -784,3 +784,21 @@ void postcopy_discard_send_finish(MigrationState *ms, PostcopyDiscardState *pds)
|
||||||
|
|
||||||
g_free(pds);
|
g_free(pds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Current state of incoming postcopy; note this is not part of
|
||||||
|
* MigrationIncomingState since it's state is used during cleanup
|
||||||
|
* at the end as MIS is being freed.
|
||||||
|
*/
|
||||||
|
static PostcopyState incoming_postcopy_state;
|
||||||
|
|
||||||
|
PostcopyState postcopy_state_get(void)
|
||||||
|
{
|
||||||
|
return atomic_mb_read(&incoming_postcopy_state);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set the state and return the old state */
|
||||||
|
PostcopyState postcopy_state_set(PostcopyState new_state)
|
||||||
|
{
|
||||||
|
return atomic_xchg(&incoming_postcopy_state, new_state);
|
||||||
|
}
|
||||||
|
|
|
@ -81,6 +81,28 @@ int postcopy_place_page(MigrationIncomingState *mis, void *host, void *from,
|
||||||
int postcopy_place_page_zero(MigrationIncomingState *mis, void *host,
|
int postcopy_place_page_zero(MigrationIncomingState *mis, void *host,
|
||||||
size_t pagesize);
|
size_t pagesize);
|
||||||
|
|
||||||
|
/* The current postcopy state is read/set by postcopy_state_get/set
|
||||||
|
* which update it atomically.
|
||||||
|
* The state is updated as postcopy messages are received, and
|
||||||
|
* in general only one thread should be writing to the state at any one
|
||||||
|
* time, initially the main thread and then the listen thread;
|
||||||
|
* Corner cases are where either thread finishes early and/or errors.
|
||||||
|
* The state is checked as messages are received to ensure that
|
||||||
|
* the source is sending us messages in the correct order.
|
||||||
|
* The state is also used by the RAM reception code to know if it
|
||||||
|
* has to place pages atomically, and the cleanup code at the end of
|
||||||
|
* the main thread to know if it has to delay cleanup until the end
|
||||||
|
* of postcopy.
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
POSTCOPY_INCOMING_NONE = 0, /* Initial state - no postcopy */
|
||||||
|
POSTCOPY_INCOMING_ADVISE,
|
||||||
|
POSTCOPY_INCOMING_DISCARD,
|
||||||
|
POSTCOPY_INCOMING_LISTENING,
|
||||||
|
POSTCOPY_INCOMING_RUNNING,
|
||||||
|
POSTCOPY_INCOMING_END
|
||||||
|
} PostcopyState;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Allocate a page of memory that can be mapped at a later point in time
|
* Allocate a page of memory that can be mapped at a later point in time
|
||||||
* using postcopy_place_page
|
* using postcopy_place_page
|
||||||
|
@ -88,4 +110,8 @@ int postcopy_place_page_zero(MigrationIncomingState *mis, void *host,
|
||||||
*/
|
*/
|
||||||
void *postcopy_get_tmp_page(MigrationIncomingState *mis);
|
void *postcopy_get_tmp_page(MigrationIncomingState *mis);
|
||||||
|
|
||||||
|
PostcopyState postcopy_state_get(void);
|
||||||
|
/* Set the state and return the old state */
|
||||||
|
PostcopyState postcopy_state_set(PostcopyState new_state);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue