xref: /dragonfly/sys/sys/serialize2.h (revision 0db87cb7)
1 #ifndef _SYS_SERIALIZE2_H_
2 #define _SYS_SERIALIZE2_H_
3 
4 #ifndef _KERNEL
5 #error "kernel only header file"
6 #endif
7 
8 #ifndef _SYS_PARAM_H_
9 #include <sys/param.h>
10 #endif
11 
12 #ifndef _SYS_SYSTM_H_
13 #include <sys/systm.h>
14 #endif
15 
16 #ifndef _SYS_SERIALIZE_H_
17 #include <sys/serialize.h>
18 #endif
19 
20 static __inline void
21 lwkt_serialize_array_enter(lwkt_serialize_t *_arr, int _arrcnt, int _s)
22 {
23 	KASSERT(_s < _arrcnt, ("nothing to be serialized"));
24 	while (_s < _arrcnt)
25 		lwkt_serialize_enter(_arr[_s++]);
26 }
27 
28 static __inline int
29 lwkt_serialize_array_try(lwkt_serialize_t *_arr, int _arrcnt, int _s)
30 {
31 	int _i;
32 
33 	KASSERT(_s < _arrcnt, ("nothing to be serialized"));
34 	for (_i = _s; _i < _arrcnt; ++_i) {
35 		if (!lwkt_serialize_try(_arr[_i])) {
36 			while (--_i >= _s)
37 				lwkt_serialize_exit(_arr[_i]);
38 			return 0;
39 		}
40 	}
41 	return 1;
42 }
43 
44 static __inline void
45 lwkt_serialize_array_exit(lwkt_serialize_t *_arr, int _arrcnt, int _s)
46 {
47 	KASSERT(_arrcnt > _s, ("nothing to be deserialized"));
48 	while (--_arrcnt >= _s)
49 		lwkt_serialize_exit(_arr[_arrcnt]);
50 }
51 
52 #endif	/* !_SYS_SERIALIZE2_H_ */
53