#include <linux/slab.h>
#include <linux/spinlock.h>
#include <linux/once.h>
#include <linux/random.h>
#include <linux/module.h>
struct once_work { … };
static void once_deferred(struct work_struct *w)
{ … }
static void once_disable_jump(struct static_key_true *key, struct module *mod)
{ … }
static DEFINE_SPINLOCK(once_lock);
bool __do_once_start(bool *done, unsigned long *flags)
__acquires(once_lock)
{ … }
EXPORT_SYMBOL(…);
void __do_once_done(bool *done, struct static_key_true *once_key,
unsigned long *flags, struct module *mod)
__releases(once_lock)
{ … }
EXPORT_SYMBOL(…);
static DEFINE_MUTEX(once_mutex);
bool __do_once_sleepable_start(bool *done)
__acquires(once_mutex)
{ … }
EXPORT_SYMBOL(…);
void __do_once_sleepable_done(bool *done, struct static_key_true *once_key,
struct module *mod)
__releases(once_mutex)
{ … }
EXPORT_SYMBOL(…);