aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/net.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/net.h')
-rw-r--r--include/linux/net.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/include/linux/net.h b/include/linux/net.h
index ca9ec8540905..a489705f6fa3 100644
--- a/include/linux/net.h
+++ b/include/linux/net.h
@@ -239,6 +239,31 @@ do { \
239#define net_random() prandom_u32() 239#define net_random() prandom_u32()
240#define net_srandom(seed) prandom_seed((__force u32)(seed)) 240#define net_srandom(seed) prandom_seed((__force u32)(seed))
241 241
242bool __net_get_random_once(void *buf, int nbytes, bool *done,
243 struct static_key *done_key);
244
245#ifdef HAVE_JUMP_LABEL
246#define ___NET_RANDOM_STATIC_KEY_INIT ((struct static_key) \
247 { .enabled = ATOMIC_INIT(0), .entries = (void *)1 })
248#else /* !HAVE_JUMP_LABEL */
249#define ___NET_RANDOM_STATIC_KEY_INIT STATIC_KEY_INIT_FALSE
250#endif /* HAVE_JUMP_LABEL */
251
252/* BE CAREFUL: this function is not interrupt safe */
253#define net_get_random_once(buf, nbytes) \
254 ({ \
255 bool ___ret = false; \
256 static bool ___done = false; \
257 static struct static_key ___done_key = \
258 ___NET_RANDOM_STATIC_KEY_INIT; \
259 if (!static_key_true(&___done_key)) \
260 ___ret = __net_get_random_once(buf, \
261 nbytes, \
262 &___done, \
263 &___done_key); \
264 ___ret; \
265 })
266
242int kernel_sendmsg(struct socket *sock, struct msghdr *msg, struct kvec *vec, 267int kernel_sendmsg(struct socket *sock, struct msghdr *msg, struct kvec *vec,
243 size_t num, size_t len); 268 size_t num, size_t len);
244int kernel_recvmsg(struct socket *sock, struct msghdr *msg, struct kvec *vec, 269int kernel_recvmsg(struct socket *sock, struct msghdr *msg, struct kvec *vec,