1*16038816SMartin Matuska /*
2*16038816SMartin Matuska  * CDDL HEADER START
3*16038816SMartin Matuska  *
4*16038816SMartin Matuska  * This file and its contents are supplied under the terms of the
5*16038816SMartin Matuska  * Common Development and Distribution License ("CDDL"), version 1.0.
6*16038816SMartin Matuska  * You may only use this file in accordance with the terms of version
7*16038816SMartin Matuska  * 1.0 of the CDDL.
8*16038816SMartin Matuska  *
9*16038816SMartin Matuska  * A full copy of the text of the CDDL should have accompanied this
10*16038816SMartin Matuska  * source.  A copy of the CDDL is also available via the Internet at
11*16038816SMartin Matuska  * http://www.illumos.org/license/CDDL.
12*16038816SMartin Matuska  *
13*16038816SMartin Matuska  * CDDL HEADER END
14*16038816SMartin Matuska  */
15*16038816SMartin Matuska 
16*16038816SMartin Matuska /*
17*16038816SMartin Matuska  * wmsum counters are a reduced version of aggsum counters, optimized for
18*16038816SMartin Matuska  * write-mostly scenarios.  They do not provide optimized read functions,
19*16038816SMartin Matuska  * but instead allow much cheaper add function.  The primary usage is
20*16038816SMartin Matuska  * infrequently read statistic counters, not requiring exact precision.
21*16038816SMartin Matuska  *
22*16038816SMartin Matuska  * In user-space due to lack of better implementation mapped to aggsum.
23*16038816SMartin Matuska  */
24*16038816SMartin Matuska 
25*16038816SMartin Matuska #ifndef	_SYS_WMSUM_H
26*16038816SMartin Matuska #define	_SYS_WMSUM_H
27*16038816SMartin Matuska 
28*16038816SMartin Matuska #include <sys/aggsum.h>
29*16038816SMartin Matuska 
30*16038816SMartin Matuska #ifdef	__cplusplus
31*16038816SMartin Matuska extern "C" {
32*16038816SMartin Matuska #endif
33*16038816SMartin Matuska 
34*16038816SMartin Matuska #define	wmsum_t	aggsum_t
35*16038816SMartin Matuska 
36*16038816SMartin Matuska static inline void
wmsum_init(wmsum_t * ws,uint64_t value)37*16038816SMartin Matuska wmsum_init(wmsum_t *ws, uint64_t value)
38*16038816SMartin Matuska {
39*16038816SMartin Matuska 
40*16038816SMartin Matuska 	aggsum_init(ws, value);
41*16038816SMartin Matuska }
42*16038816SMartin Matuska 
43*16038816SMartin Matuska static inline void
wmsum_fini(wmsum_t * ws)44*16038816SMartin Matuska wmsum_fini(wmsum_t *ws)
45*16038816SMartin Matuska {
46*16038816SMartin Matuska 
47*16038816SMartin Matuska 	aggsum_fini(ws);
48*16038816SMartin Matuska }
49*16038816SMartin Matuska 
50*16038816SMartin Matuska static inline uint64_t
wmsum_value(wmsum_t * ws)51*16038816SMartin Matuska wmsum_value(wmsum_t *ws)
52*16038816SMartin Matuska {
53*16038816SMartin Matuska 
54*16038816SMartin Matuska 	return (aggsum_value(ws));
55*16038816SMartin Matuska }
56*16038816SMartin Matuska 
57*16038816SMartin Matuska static inline void
wmsum_add(wmsum_t * ws,int64_t delta)58*16038816SMartin Matuska wmsum_add(wmsum_t *ws, int64_t delta)
59*16038816SMartin Matuska {
60*16038816SMartin Matuska 
61*16038816SMartin Matuska 	aggsum_add(ws, delta);
62*16038816SMartin Matuska }
63*16038816SMartin Matuska 
64*16038816SMartin Matuska #ifdef	__cplusplus
65*16038816SMartin Matuska }
66*16038816SMartin Matuska #endif
67*16038816SMartin Matuska 
68*16038816SMartin Matuska #endif /* _SYS_WMSUM_H */
69