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