Changeset View
Changeset View
Standalone View
Standalone View
head/sys/riscv/include/counter.h
Show All 40 Lines | |||||
#define counter_enter() critical_enter() | #define counter_enter() critical_enter() | ||||
#define counter_exit() critical_exit() | #define counter_exit() critical_exit() | ||||
#ifdef IN_SUBR_COUNTER_C | #ifdef IN_SUBR_COUNTER_C | ||||
static inline uint64_t | static inline uint64_t | ||||
counter_u64_read_one(uint64_t *p, int cpu) | counter_u64_read_one(uint64_t *p, int cpu) | ||||
{ | { | ||||
return (*(uint64_t *)((char *)p + sizeof(struct pcpu) * cpu)); | return (*(uint64_t *)((char *)p + UMA_PCPU_ALLOC_SIZE * cpu)); | ||||
} | } | ||||
static inline uint64_t | static inline uint64_t | ||||
counter_u64_fetch_inline(uint64_t *p) | counter_u64_fetch_inline(uint64_t *p) | ||||
{ | { | ||||
uint64_t r; | uint64_t r; | ||||
int i; | int i; | ||||
r = 0; | r = 0; | ||||
for (i = 0; i < mp_ncpus; i++) | for (i = 0; i < mp_ncpus; i++) | ||||
r += counter_u64_read_one((uint64_t *)p, i); | r += counter_u64_read_one((uint64_t *)p, i); | ||||
return (r); | return (r); | ||||
} | } | ||||
/* XXXKIB might interrupt increment */ | /* XXXKIB might interrupt increment */ | ||||
static void | static void | ||||
counter_u64_zero_one_cpu(void *arg) | counter_u64_zero_one_cpu(void *arg) | ||||
{ | { | ||||
*((uint64_t *)((char *)arg + sizeof(struct pcpu) * | *((uint64_t *)((char *)arg + UMA_PCPU_ALLOC_SIZE * | ||||
PCPU_GET(cpuid))) = 0; | PCPU_GET(cpuid))) = 0; | ||||
} | } | ||||
static inline void | static inline void | ||||
counter_u64_zero_inline(counter_u64_t c) | counter_u64_zero_inline(counter_u64_t c) | ||||
{ | { | ||||
smp_rendezvous(smp_no_rendezvous_barrier, counter_u64_zero_one_cpu, | smp_rendezvous(smp_no_rendezvous_barrier, counter_u64_zero_one_cpu, | ||||
Show All 19 Lines |