cregit-Linux how code gets into the kernel

Release 4.15 include/linux/completion.h

Directory: include/linux
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __LINUX_COMPLETION_H

#define __LINUX_COMPLETION_H

/*
 * (C) Copyright 2001 Linus Torvalds
 *
 * Atomic wait-for-completion handler data structures.
 * See kernel/sched/completion.c for details.
 */

#include <linux/wait.h>

/*
 * struct completion - structure used to maintain state for a "completion"
 *
 * This is the opaque structure used to maintain the state for a "completion".
 * Completions currently use a FIFO to queue threads that have to wait for
 * the "completion" event.
 *
 * See also:  complete(), wait_for_completion() (and friends _timeout,
 * _interruptible, _interruptible_timeout, and _killable), init_completion(),
 * reinit_completion(), and macros DECLARE_COMPLETION(),
 * DECLARE_COMPLETION_ONSTACK().
 */

struct completion {
	
unsigned int done;
	
wait_queue_head_t wait;
};


#define init_completion_map(x, m) __init_completion(x)

#define init_completion(x) __init_completion(x)

static inline void complete_acquire(struct completion *x) {}

Contributors

PersonTokensPropCommitsCommitProp
Byungchul Park11100.00%1100.00%
Total11100.00%1100.00%


static inline void complete_release(struct completion *x) {}

Contributors

PersonTokensPropCommitsCommitProp
Byungchul Park11100.00%1100.00%
Total11100.00%1100.00%

#define COMPLETION_INITIALIZER(work) \ { 0, __WAIT_QUEUE_HEAD_INITIALIZER((work).wait) } #define COMPLETION_INITIALIZER_ONSTACK_MAP(work, map) \ (*({ init_completion_map(&(work), &(map)); &(work); })) #define COMPLETION_INITIALIZER_ONSTACK(work) \ (*({ init_completion(&work); &work; })) /** * DECLARE_COMPLETION - declare and initialize a completion structure * @work: identifier for the completion structure * * This macro declares and initializes a completion structure. Generally used * for static declarations. You should use the _ONSTACK variant for automatic * variables. */ #define DECLARE_COMPLETION(work) \ struct completion work = COMPLETION_INITIALIZER(work) /* * Lockdep needs to run a non-constant initializer for on-stack * completions - so we use the _ONSTACK() variant for those that * are on the kernel stack: */ /** * DECLARE_COMPLETION_ONSTACK - declare and initialize a completion structure * @work: identifier for the completion structure * * This macro declares and initializes a completion structure on the kernel * stack. */ #ifdef CONFIG_LOCKDEP # define DECLARE_COMPLETION_ONSTACK(work) \ struct completion work = COMPLETION_INITIALIZER_ONSTACK(work) # define DECLARE_COMPLETION_ONSTACK_MAP(work, map) \ struct completion work = COMPLETION_INITIALIZER_ONSTACK_MAP(work, map) #else # define DECLARE_COMPLETION_ONSTACK(work) DECLARE_COMPLETION(work) # define DECLARE_COMPLETION_ONSTACK_MAP(work, map) DECLARE_COMPLETION(work) #endif /** * init_completion - Initialize a dynamically allocated completion * @x: pointer to completion structure that is to be initialized * * This inline function will initialize a dynamically created completion * structure. */
static inline void __init_completion(struct completion *x) { x->done = 0; init_waitqueue_head(&x->wait); }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds2492.31%133.33%
Byungchul Park13.85%133.33%
Wolfram Sang13.85%133.33%
Total26100.00%3100.00%

/** * reinit_completion - reinitialize a completion structure * @x: pointer to completion structure that is to be reinitialized * * This inline function should be used to reinitialize a completion structure so it can * be reused. This is especially important after complete_all() is used. */
static inline void reinit_completion(struct completion *x) { x->done = 0; }

Contributors

PersonTokensPropCommitsCommitProp
Wolfram Sang1794.44%150.00%
Linus Torvalds15.56%150.00%
Total18100.00%2100.00%

extern void wait_for_completion(struct completion *); extern void wait_for_completion_io(struct completion *); extern int wait_for_completion_interruptible(struct completion *x); extern int wait_for_completion_killable(struct completion *x); extern unsigned long wait_for_completion_timeout(struct completion *x, unsigned long timeout); extern unsigned long wait_for_completion_io_timeout(struct completion *x, unsigned long timeout); extern long wait_for_completion_interruptible_timeout( struct completion *x, unsigned long timeout); extern long wait_for_completion_killable_timeout( struct completion *x, unsigned long timeout); extern bool try_wait_for_completion(struct completion *x); extern bool completion_done(struct completion *x); extern void complete(struct completion *); extern void complete_all(struct completion *); #endif

Overall Contributors

PersonTokensPropCommitsCommitProp
Ingo Molnar8827.33%529.41%
Linus Torvalds7222.36%15.88%
Byungchul Park6821.12%211.76%
Vladimir Davydov247.45%15.88%
Wolfram Sang216.52%15.88%
David Chinner206.21%15.88%
Sage Weil144.35%15.88%
Matthew Wilcox103.11%15.88%
Randy Dunlap20.62%15.88%
Peter Zijlstra10.31%15.88%
Greg Kroah-Hartman10.31%15.88%
Boqun Feng10.31%15.88%
Total322100.00%17100.00%
Directory: include/linux
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.