diff options
| author | Peter Xu <peterx@redhat.com> | 2022-10-11 17:55:51 -0400 |
|---|---|---|
| committer | Juan Quintela <quintela@redhat.com> | 2022-12-15 10:30:37 +0100 |
| commit | 23b7576d7879cdc93e3328e1a9228e8843780012 (patch) | |
| tree | ef2bd156267ac39a812f728e54d7a17fcd4337bf /migration/migration.c | |
| parent | f3321554ef7e3adc3be6f697185d3bd50d60e30e (diff) | |
| download | focaccia-qemu-23b7576d7879cdc93e3328e1a9228e8843780012.tar.gz focaccia-qemu-23b7576d7879cdc93e3328e1a9228e8843780012.zip | |
migration: Use atomic ops properly for page accountings
To prepare for thread-safety on page accountings, at least below counters
need to be accessed only atomically, they are:
ram_counters.transferred
ram_counters.duplicate
ram_counters.normal
ram_counters.postcopy_bytes
There are a lot of other counters but they won't be accessed outside
migration thread, then they're still safe to be accessed without atomic
ops.
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Signed-off-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/migration.c')
| -rw-r--r-- | migration/migration.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/migration/migration.c b/migration/migration.c index f485eea5fb..de83c50f51 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -1049,13 +1049,13 @@ static void populate_ram_info(MigrationInfo *info, MigrationState *s) info->has_ram = true; info->ram = g_malloc0(sizeof(*info->ram)); - info->ram->transferred = ram_counters.transferred; + info->ram->transferred = stat64_get(&ram_atomic_counters.transferred); info->ram->total = ram_bytes_total(); - info->ram->duplicate = ram_counters.duplicate; + info->ram->duplicate = stat64_get(&ram_atomic_counters.duplicate); /* legacy value. It is not used anymore */ info->ram->skipped = 0; - info->ram->normal = ram_counters.normal; - info->ram->normal_bytes = ram_counters.normal * page_size; + info->ram->normal = stat64_get(&ram_atomic_counters.normal); + info->ram->normal_bytes = info->ram->normal * page_size; info->ram->mbps = s->mbps; info->ram->dirty_sync_count = ram_counters.dirty_sync_count; info->ram->dirty_sync_missed_zero_copy = @@ -1066,7 +1066,7 @@ static void populate_ram_info(MigrationInfo *info, MigrationState *s) info->ram->pages_per_second = s->pages_per_second; info->ram->precopy_bytes = ram_counters.precopy_bytes; info->ram->downtime_bytes = ram_counters.downtime_bytes; - info->ram->postcopy_bytes = ram_counters.postcopy_bytes; + info->ram->postcopy_bytes = stat64_get(&ram_atomic_counters.postcopy_bytes); if (migrate_use_xbzrle()) { info->has_xbzrle_cache = true; |