34#include <sys/kernel.h>
40#include <sys/sysctl.h>
43#define IN_SUBR_COUNTER_C
44#include <sys/counter.h>
50 counter_u64_zero_inline(c);
57 return (counter_u64_fetch_inline(c));
82 error = SYSCTL_OUT(req, &out,
sizeof(uint64_t));
84 if (error || !req->newptr)
101 out =
malloc(arg2 *
sizeof(uint64_t), M_TEMP, M_WAITOK);
102 for (
int i = 0; i < arg2; i++)
105 error = SYSCTL_OUT(req, out, arg2 *
sizeof(uint64_t));
108 if (error || !req->newptr)
114 for (
int i = 0; i < arg2; i++)
138 if ((u_int)(now - cr->cr_ticks) >=
hz) {
143 if ((cr->cr_lock == 0) &&
144 atomic_cmpset_acq_int(&cr->cr_lock, 0, 1)) {
149 if ((u_int)(now - cr->cr_ticks) >=
hz) {
157 atomic_store_rel_int(&cr->cr_lock, 0);
167 counter_u64_add(cr->cr_rate, 1);
168 if (cr->cr_over != 0)
171 val = cr->cr_over = -1;
void *() malloc(size_t size, struct malloc_type *mtp, int flags)
void free(void *addr, struct malloc_type *mtp)
void counter_u64_free(counter_u64_t c)
uint64_t counter_u64_fetch(counter_u64_t c)
counter_u64_t counter_u64_alloc(int flags)
int64_t counter_ratecheck(struct counter_rate *cr, int64_t limit)
int sysctl_handle_counter_u64_array(SYSCTL_HANDLER_ARGS)
void counter_u64_zero(counter_u64_t c)
int sysctl_handle_counter_u64(SYSCTL_HANDLER_ARGS)
void counter_u64_sysuninit(void *arg)
void counter_u64_sysinit(void *arg)