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>
This commit is contained in:
Paolo Bonzini 2023-04-27 10:47:58 +02:00 committed by Juan Quintela
parent 294e5a4034
commit 7757b55eed
2 changed files with 17 additions and 0 deletions

View File

@ -40,6 +40,11 @@ static inline uint64_t stat64_get(const Stat64 *s)
return qatomic_read__nocheck(&s->value); 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) static inline void stat64_add(Stat64 *s, uint64_t value)
{ {
qatomic_add(&s->value, value); qatomic_add(&s->value, value);
@ -62,6 +67,7 @@ static inline void stat64_max(Stat64 *s, uint64_t value)
} }
#else #else
uint64_t stat64_get(const Stat64 *s); 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_min_slow(Stat64 *s, uint64_t value);
bool stat64_max_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); bool stat64_add32_carry(Stat64 *s, uint32_t low, uint32_t high);

View File

@ -57,6 +57,17 @@ uint64_t stat64_get(const Stat64 *s)
return ((uint64_t)high << 32) | low; 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) bool stat64_add32_carry(Stat64 *s, uint32_t low, uint32_t high)
{ {
uint32_t old; uint32_t old;