Changeset View
Changeset View
Standalone View
Standalone View
head/sys/powerpc/include/counter.h
Show First 20 Lines • Show All 44 Lines • ▼ Show 20 Lines | |||||
#define counter_enter() do {} while (0) | #define counter_enter() do {} while (0) | ||||
#define counter_exit() do {} while (0) | #define counter_exit() do {} while (0) | ||||
#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; | ||||
CPU_FOREACH(i) | CPU_FOREACH(i) | ||||
r += counter_u64_read_one((uint64_t *)p, i); | r += counter_u64_read_one((uint64_t *)p, i); | ||||
return (r); | return (r); | ||||
} | } | ||||
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 26 Lines | |||||
#define counter_exit() critical_exit() | #define counter_exit() critical_exit() | ||||
#ifdef IN_SUBR_COUNTER_C | #ifdef IN_SUBR_COUNTER_C | ||||
/* XXXKIB non-atomic 64bit read */ | /* XXXKIB non-atomic 64bit read */ | ||||
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 non-atomic 64bit store, might interrupt increment */ | /* XXXKIB non-atomic 64bit store, 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 21 Lines |