diff options
author | Hyman Huang(黄勇) <huangy81@chinatelecom.cn> | 2021-06-29 16:01:21 +0000 |
---|---|---|
committer | Juan Quintela <quintela@redhat.com> | 2021-11-01 22:56:43 +0100 |
commit | 15eb2d644cbda3dd2ad5989e273b211e83c16623 (patch) | |
tree | a655a537ad64242f457279a2cf4cb6e9fc8a6999 /migration | |
parent | 71864eadd9a9933ef7e9460ae2fc93b3af98a181 (diff) | |
download | qemu-15eb2d644cbda3dd2ad5989e273b211e83c16623.zip qemu-15eb2d644cbda3dd2ad5989e273b211e83c16623.tar.gz qemu-15eb2d644cbda3dd2ad5989e273b211e83c16623.tar.bz2 |
migration/dirtyrate: adjust order of registering thread
registering get_dirtyrate thread in advance so that both
page-sampling and dirty-ring mode can be covered.
Signed-off-by: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
Message-Id: <d7727581a8e86d4a42fc3eacf7f310419b9ebf7e.1624040308.git.huangy81@chinatelecom.cn>
Reviewed-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
Diffstat (limited to 'migration')
-rw-r--r-- | migration/dirtyrate.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/migration/dirtyrate.c b/migration/dirtyrate.c index e0a27a9..a9bdd60 100644 --- a/migration/dirtyrate.c +++ b/migration/dirtyrate.c @@ -352,7 +352,6 @@ static void calculate_dirtyrate(struct DirtyRateConfig config) int64_t msec = 0; int64_t initial_time; - rcu_register_thread(); rcu_read_lock(); initial_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME); if (!record_ramblock_hash_info(&block_dinfo, config, &block_count)) { @@ -375,7 +374,6 @@ static void calculate_dirtyrate(struct DirtyRateConfig config) out: rcu_read_unlock(); free_ramblock_dirty_info(block_dinfo, block_count); - rcu_unregister_thread(); } void *get_dirtyrate_thread(void *arg) @@ -383,6 +381,7 @@ void *get_dirtyrate_thread(void *arg) struct DirtyRateConfig config = *(struct DirtyRateConfig *)arg; int ret; int64_t start_time; + rcu_register_thread(); ret = dirtyrate_set_state(&CalculatingState, DIRTY_RATE_STATUS_UNSTARTED, DIRTY_RATE_STATUS_MEASURING); @@ -401,6 +400,8 @@ void *get_dirtyrate_thread(void *arg) if (ret == -1) { error_report("change dirtyrate state failed."); } + + rcu_unregister_thread(); return NULL; } |