37#include <sys/kernel.h>
40#include <sys/callout.h>
42#include <sys/malloc.h>
43#include <machine/stdarg.h>
52 MALLOC_DECLARE(M_NG_SSCFU); \
55#define MEMZALLOC(PTR, CAST, SIZE) \
56 ((PTR) = (CAST)malloc((SIZE), M_NG_SSCFU, M_NOWAIT | M_ZERO))
60#define SIG_ALLOC(PTR) \
61 MEMZALLOC(PTR, struct sscfu_sig *, sizeof(struct sscfu_sig))
62#define SIG_FREE(PTR) \
68 MALLOC_DEFINE(M_NG_SSCFU_INS, "sscfu_ins", "SSCFU instances"); \
69 MALLOC_DEFINE(M_NG_SSCFU_SIG, "sscfu_sig", "SSCFU signals"); \
72#define MEMZALLOC(PTR, CAST, SIZE) \
73 ((PTR) = (CAST)malloc((SIZE), M_NG_SSCFU_INS, M_NOWAIT | M_ZERO))
75 free(PTR, M_NG_SSCFU_INS)
77#define SIG_ALLOC(PTR) \
78 ((PTR) = malloc(sizeof(struct sscfu_sig), \
79 M_NG_SSCFU_SIG, M_NOWAIT | M_ZERO))
80#define SIG_FREE(PTR) \
81 free(PTR, M_NG_SSCFU_SIG)
89typedef TAILQ_HEAD(sscfu_sigq, sscfu_sig) sscfu_sigq_head_t;
90#define SIGQ_INIT(Q) TAILQ_INIT(Q)
91#define SIGQ_APPEND(Q, S) TAILQ_INSERT_TAIL(Q, S, link)
93#define SIGQ_GET(Q) ng_sscfu_sigq_get((Q))
95#define DECL_SIGQ_GET \
96static __inline struct sscfu_sig * \
97ng_sscfu_sigq_get(struct sscfu_sigq *q) \
99 struct sscfu_sig *s; \
101 s = TAILQ_FIRST(q); \
103 TAILQ_REMOVE(q, s, link); \
107#define SIGQ_CLEAR(Q) \
109 struct sscfu_sig *_s1, *_s2; \
111 _s1 = TAILQ_FIRST(Q); \
112 while (_s1 != NULL) { \
113 _s2 = TAILQ_NEXT(_s1, link); \
125#define MBUF_FREE(M) m_freem(M)
128#define ASSERT(S) KASSERT(S, (#S))
typedef TAILQ_HEAD(sscfu_sigq, sscfu_sig) sscfu_sigq_head_t
typedef TAILQ_ENTRY(sscfu_sig) sscfu_sigq_link_t