Message ID | 41ce794acd0714c69e212ff43ddea09cd9a47eec.1738171076.git.maciej.szmigiero@oracle.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Multifd ���� device state transfer support with VFIO consumer | expand |
On 1/30/25 11:08, Maciej S. Szmigiero wrote: > From: "Maciej S. Szmigiero" <maciej.szmigiero@oracle.com> > > So it can be safety accessed from multiple threads. > > Signed-off-by: Maciej S. Szmigiero <maciej.szmigiero@oracle.com> > --- > hw/vfio/migration.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c > index f5df5ef17080..cbb1e0b6f852 100644 > --- a/hw/vfio/migration.c > +++ b/hw/vfio/migration.c > @@ -416,7 +416,7 @@ static ssize_t vfio_save_block(QEMUFile *f, VFIOMigration *migration) > qemu_put_be64(f, VFIO_MIG_FLAG_DEV_DATA_STATE); > qemu_put_be64(f, data_size); > qemu_put_buffer(f, migration->data_buffer, data_size); > - bytes_transferred += data_size; > + qatomic_add(&bytes_transferred, data_size); bytes_transferred should of type : aligned_uint64_t > > trace_vfio_save_block(migration->vbasedev->name, data_size); > > @@ -1038,12 +1038,12 @@ static int vfio_block_migration(VFIODevice *vbasedev, Error *err, Error **errp) > > int64_t vfio_mig_bytes_transferred(void) > { > - return bytes_transferred; > + return qatomic_read(&bytes_transferred); please use qatomic_read_u64() > } > > void vfio_reset_bytes_transferred(void) > { > - bytes_transferred = 0; > + qatomic_set(&bytes_transferred, 0); and qatomic_set_u64(). No need to resend for that (yet) but it might explain the test issues. Thanks, C. > } > > /* >
diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c index f5df5ef17080..cbb1e0b6f852 100644 --- a/hw/vfio/migration.c +++ b/hw/vfio/migration.c @@ -416,7 +416,7 @@ static ssize_t vfio_save_block(QEMUFile *f, VFIOMigration *migration) qemu_put_be64(f, VFIO_MIG_FLAG_DEV_DATA_STATE); qemu_put_be64(f, data_size); qemu_put_buffer(f, migration->data_buffer, data_size); - bytes_transferred += data_size; + qatomic_add(&bytes_transferred, data_size); trace_vfio_save_block(migration->vbasedev->name, data_size); @@ -1038,12 +1038,12 @@ static int vfio_block_migration(VFIODevice *vbasedev, Error *err, Error **errp) int64_t vfio_mig_bytes_transferred(void) { - return bytes_transferred; + return qatomic_read(&bytes_transferred); } void vfio_reset_bytes_transferred(void) { - bytes_transferred = 0; + qatomic_set(&bytes_transferred, 0); } /*