srp_compat.h revision 1.2
1
2#ifndef _SRP_COMPAT_H_
3#define _SRP_COMPAT_H_
4
5#include <sys/srp.h>
6#include <sys/queue.h>
7
8/*
9 * SRPL glue.
10 */
11
12#define srp_get_locked(_s)	((_s)->ref)
13#define srp_enter(_sr, _s)	srp_get_locked(_s)
14#define srp_leave(_sr)		((void)_sr)
15
16#define srp_update_locked(_gc, _s, _v) do {				\
17	void *ov;							\
18									\
19	ov = (_s)->ref;							\
20	(_s)->ref = _v;							\
21									\
22	if (ov != NULL)							\
23		((_gc)->srp_gc_dtor)((_gc)->srp_gc_cookie, ov);		\
24} while (0)
25
26#define SRPL_INIT(_sl)			SLIST_INIT(_sl)
27#define SRPL_HEAD(name, entry)		SLIST_HEAD(name, entry)
28#define SRPL_ENTRY(type)		SLIST_ENTRY(type)
29
30#define SRPL_ENTER(_sr, _sl)		SLIST_FIRST(_sl);
31#define SRPL_NEXT(_sr, _e, _ENTRY)	SLIST_NEXT(_e, _ENTRY)
32#define SRPL_LEAVE(_sr)			((void)_sr)
33
34#define SRPL_EMPTY_LOCKED(_sl)	SLIST_EMPTY(_sl)
35#define SRPL_FOREACH_SAFE_LOCKED(_c, _sl, _ENTRY, _tc)			\
36		SLIST_FOREACH_SAFE(_c, _sl, _ENTRY, _tc)
37
38#define SRPL_INSERT_HEAD_LOCKED(_rc, _sl, _e, _ENTRY)			\
39	do {								\
40		(_rc)->srpl_ref((_rc)->srpl_cookie, _e);		\
41		SLIST_INSERT_HEAD(_sl, _e, _ENTRY);			\
42	} while (0)
43
44#define SRPL_REMOVE_LOCKED(_rc, _sl, _e, _type, _ENTRY)			\
45	do {								\
46		SLIST_REMOVE(_sl, _e, _type, _ENTRY);			\
47		((_rc)->srpl_gc.srp_gc_dtor)((_rc)->srpl_gc.srp_gc_cookie, _e);\
48	} while (0)
49
50#endif /* _SRP_COMPAT_H_ */
51