diff options
author | Richard Braun <rbraun@sceen.net> | 2018-02-06 20:35:30 +0100 |
---|---|---|
committer | Richard Braun <rbraun@sceen.net> | 2018-02-07 01:08:53 +0100 |
commit | c302412778d43f1ed6223349911013d43eadfdcd (patch) | |
tree | fb2bc13f0ab076b71be0771feb7794f28bdee103 /kern/syscnt.h | |
parent | 9d02354096ece1c4e0c91109a377d62f65f87b0e (diff) |
kern/syscnt: new syscnt_set method
Diffstat (limited to 'kern/syscnt.h')
-rw-r--r-- | kern/syscnt.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/kern/syscnt.h b/kern/syscnt.h index 2200456..fb00b75 100644 --- a/kern/syscnt.h +++ b/kern/syscnt.h @@ -53,6 +53,12 @@ void syscnt_register(struct syscnt *syscnt, const char *name); #ifdef ATOMIC_HAVE_64B_OPS static inline void +syscnt_set(struct syscnt *syscnt, uint64_t value) +{ + atomic_store(&syscnt->value, value, ATOMIC_RELAXED); +} + +static inline void syscnt_add(struct syscnt *syscnt, int64_t delta) { atomic_add(&syscnt->value, delta, ATOMIC_RELAXED); @@ -67,6 +73,16 @@ syscnt_read(const struct syscnt *syscnt) #else /* ATOMIC_HAVE_64B_OPS */ static inline void +syscnt_set(struct syscnt *syscnt, uint64_t value) +{ + unsigned long flags; + + spinlock_lock_intr_save(&syscnt->lock, &flags); + syscnt->value = value; + spinlock_unlock_intr_restore(&syscnt->lock, flags); +} + +static inline void syscnt_add(struct syscnt *syscnt, int64_t delta) { unsigned long flags; |