diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2023-04-27 10:47:58 +0200 |
---|---|---|
committer | Juan Quintela <quintela@redhat.com> | 2023-04-27 16:39:43 +0200 |
commit | 7757b55eedd5d571d0b0c5f570b01dc3ca910a62 (patch) | |
tree | f68e6c52f6bd2a45b89f0eb950693f0aa50c8d57 | |
parent | 294e5a4034e81b3d8db03b4e0f691386f20d6ed3 (diff) | |
download | qemu-7757b55eedd5d571d0b0c5f570b01dc3ca910a62.zip qemu-7757b55eedd5d571d0b0c5f570b01dc3ca910a62.tar.gz qemu-7757b55eedd5d571d0b0c5f570b01dc3ca910a62.tar.bz2 |
stat64: Add stat64_set() operation
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Juan Quintela <quintela@redhat.com>
-rw-r--r-- | include/qemu/stats64.h | 6 | ||||
-rw-r--r-- | util/stats64.c | 11 |
2 files changed, 17 insertions, 0 deletions
diff --git a/include/qemu/stats64.h b/include/qemu/stats64.h index 8024022..99b5cb7 100644 --- a/include/qemu/stats64.h +++ b/include/qemu/stats64.h @@ -40,6 +40,11 @@ static inline uint64_t stat64_get(const Stat64 *s) return qatomic_read__nocheck(&s->value); } +static inline void stat64_set(Stat64 *s, uint64_t value) +{ + qatomic_set__nocheck(&s->value, value); +} + static inline void stat64_add(Stat64 *s, uint64_t value) { qatomic_add(&s->value, value); @@ -62,6 +67,7 @@ static inline void stat64_max(Stat64 *s, uint64_t value) } #else uint64_t stat64_get(const Stat64 *s); +void stat64_set(Stat64 *s, uint64_t value); bool stat64_min_slow(Stat64 *s, uint64_t value); bool stat64_max_slow(Stat64 *s, uint64_t value); bool stat64_add32_carry(Stat64 *s, uint32_t low, uint32_t high); diff --git a/util/stats64.c b/util/stats64.c index 897613c..0973601 100644 --- a/util/stats64.c +++ b/util/stats64.c @@ -57,6 +57,17 @@ uint64_t stat64_get(const Stat64 *s) return ((uint64_t)high << 32) | low; } +void stat64_set(Stat64 *s, uint64_t val) +{ + while (!stat64_wrtrylock(s)) { + cpu_relax(); + } + + qatomic_set(&s->high, val >> 32); + qatomic_set(&s->low, val); + stat64_wrunlock(s); +} + bool stat64_add32_carry(Stat64 *s, uint32_t low, uint32_t high) { uint32_t old; |