aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2023-04-27 10:47:58 +0200
committerJuan Quintela <quintela@redhat.com>2023-04-27 16:39:43 +0200
commit7757b55eedd5d571d0b0c5f570b01dc3ca910a62 (patch)
treef68e6c52f6bd2a45b89f0eb950693f0aa50c8d57
parent294e5a4034e81b3d8db03b4e0f691386f20d6ed3 (diff)
downloadqemu-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.h6
-rw-r--r--util/stats64.c11
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;