summaryrefslogtreecommitdiffstats
path: root/include/linux/once.h
blob: 2a83b538dd6ac23b87bc93e57fbfef4ff7aafab1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#ifndef _LINUX_ONCE_H
#define _LINUX_ONCE_H

#include <linux/types.h>
#include <linux/jump_label.h>

bool __get_random_once(void *buf, int nbytes, bool *done,
		       struct static_key *once_key);

#define get_random_once(buf, nbytes)					\
	({								\
		bool ___ret = false;					\
		static bool ___done = false;				\
		static struct static_key ___once_key =			\
			STATIC_KEY_INIT_TRUE;				\
		if (static_key_true(&___once_key))			\
			___ret = __get_random_once((buf),		\
						   (nbytes),		\
						   &___done,		\
						   &___once_key);	\
		___ret;							\
	})

#endif /* _LINUX_ONCE_H */