#include <linux/closure.h>
#include <linux/debugfs.h>
#include <linux/export.h>
#include <linux/rcupdate.h>
#include <linux/seq_file.h>
#include <linux/sched/debug.h>
static inline void closure_put_after_sub_checks(int flags)
{ … }
static inline void closure_put_after_sub(struct closure *cl, int flags)
{ … }
void closure_sub(struct closure *cl, int v)
{ … }
EXPORT_SYMBOL(…);
void closure_put(struct closure *cl)
{ … }
EXPORT_SYMBOL(…);
void __closure_wake_up(struct closure_waitlist *wait_list)
{ … }
EXPORT_SYMBOL(…);
bool closure_wait(struct closure_waitlist *waitlist, struct closure *cl)
{ … }
EXPORT_SYMBOL(…);
struct closure_syncer { … };
static CLOSURE_CALLBACK(closure_sync_fn)
{ … }
void __sched __closure_sync(struct closure *cl)
{ … }
EXPORT_SYMBOL(…);
void __sched closure_return_sync(struct closure *cl)
{ … }
EXPORT_SYMBOL(…);
int __sched __closure_sync_timeout(struct closure *cl, unsigned long timeout)
{ … }
EXPORT_SYMBOL(…);
#ifdef CONFIG_DEBUG_CLOSURES
static LIST_HEAD(closure_list);
static DEFINE_SPINLOCK(closure_list_lock);
void closure_debug_create(struct closure *cl)
{ … }
EXPORT_SYMBOL(…);
void closure_debug_destroy(struct closure *cl)
{ … }
EXPORT_SYMBOL(…);
static int debug_show(struct seq_file *f, void *data)
{ … }
DEFINE_SHOW_ATTRIBUTE(…);
static int __init closure_debug_init(void)
{ … }
late_initcall(…) …
#endif