cregit-Linux how code gets into the kernel

Release 4.12 include/linux/poll.h

Directory: include/linux
#ifndef _LINUX_POLL_H

#define _LINUX_POLL_H


#include <linux/compiler.h>
#include <linux/ktime.h>
#include <linux/wait.h>
#include <linux/string.h>
#include <linux/fs.h>
#include <linux/sysctl.h>
#include <linux/uaccess.h>
#include <uapi/linux/poll.h>

extern struct ctl_table epoll_table[]; /* for sysctl */
/* ~832 bytes of stack space used max in sys_select/sys_poll before allocating
   additional memory. */

#define MAX_STACK_ALLOC 832

#define FRONTEND_STACK_ALLOC	256

#define SELECT_STACK_ALLOC	FRONTEND_STACK_ALLOC

#define POLL_STACK_ALLOC	FRONTEND_STACK_ALLOC

#define WQUEUES_STACK_ALLOC	(MAX_STACK_ALLOC - FRONTEND_STACK_ALLOC)

#define N_INLINE_POLL_ENTRIES	(WQUEUES_STACK_ALLOC / sizeof(struct poll_table_entry))


#define DEFAULT_POLLMASK (POLLIN | POLLOUT | POLLRDNORM | POLLWRNORM)

struct poll_table_struct;

/* 
 * structures and helpers for f_op->poll implementations
 */

typedef void (*poll_queue_proc)(struct file *, wait_queue_head_t *, struct poll_table_struct *);

/*
 * Do not touch the structure directly, use the access functions
 * poll_does_not_wait() and poll_requested_events() instead.
 */

typedef struct poll_table_struct {
	
poll_queue_proc _qproc;
	
unsigned long _key;

} poll_table;


static inline void poll_wait(struct file * filp, wait_queue_head_t * wait_address, poll_table *p) { if (p && p->_qproc && wait_address) p->_qproc(filp, wait_address, p); }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)3380.49%562.50%
Hans Verkuil512.20%112.50%
Davide Libenzi24.88%112.50%
Linus Torvalds12.44%112.50%
Total41100.00%8100.00%

/* * Return true if it is guaranteed that poll will not wait. This is the case * if the poll() of another file descriptor in the set got an event, so there * is no need for waiting. */
static inline bool poll_does_not_wait(const poll_table *p) { return p == NULL || p->_qproc == NULL; }

Contributors

PersonTokensPropCommitsCommitProp
Hans Verkuil23100.00%1100.00%
Total23100.00%1100.00%

/* * Return the set of events that the application wants to poll for. * This is useful for drivers that need to know whether a DMA transfer has * to be started implicitly on poll(). You typically only want to do that * if the application is actually polling for POLLIN and/or POLLOUT. */
static inline unsigned long poll_requested_events(const poll_table *p) { return p ? p->_key : ~0UL; }

Contributors

PersonTokensPropCommitsCommitProp
Hans Verkuil23100.00%1100.00%
Total23100.00%1100.00%


static inline void init_poll_funcptr(poll_table *pt, poll_queue_proc qproc) { pt->_qproc = qproc; pt->_key = ~0UL; /* all events enabled */ }

Contributors

PersonTokensPropCommitsCommitProp
Davide Libenzi1760.71%240.00%
Eric Dumazet725.00%120.00%
Manfred Spraul27.14%120.00%
Hans Verkuil27.14%120.00%
Total28100.00%5100.00%

struct poll_table_entry { struct file *filp; unsigned long key; wait_queue_t wait; wait_queue_head_t *wait_address; }; /* * Structures and helpers for select/poll syscall */ struct poll_wqueues { poll_table pt; struct poll_table_page *table; struct task_struct *polling_task; int triggered; int error; int inline_index; struct poll_table_entry inline_entries[N_INLINE_POLL_ENTRIES]; }; extern void poll_initwait(struct poll_wqueues *pwq); extern void poll_freewait(struct poll_wqueues *pwq); extern int poll_schedule_timeout(struct poll_wqueues *pwq, int state, ktime_t *expires, unsigned long slack); extern u64 select_estimate_accuracy(struct timespec64 *tv); #define MAX_INT64_SECONDS (((s64)(~((u64)0)>>1)/HZ)-1) extern int core_sys_select(int n, fd_set __user *inp, fd_set __user *outp, fd_set __user *exp, struct timespec64 *end_time); extern int poll_select_set_timeout(struct timespec64 *to, time64_t sec, long nsec); #endif /* _LINUX_POLL_H */

Overall Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)6416.89%1029.41%
Hans Verkuil5815.30%12.94%
Andi Kleen5213.72%12.94%
Davide Libenzi5113.46%38.82%
Tejun Heo297.65%12.94%
Manfred Spraul266.86%12.94%
Al Viro256.60%25.88%
Eric Dumazet143.69%12.94%
Thomas Gleixner143.69%12.94%
Dave Young102.64%12.94%
Alexey Dobriyan82.11%25.88%
Shawn Bohrer82.11%12.94%
David Woodhouse41.06%12.94%
Deepa Dinamani41.06%12.94%
David Howells30.79%12.94%
Andrew Morton30.79%12.94%
Arjan van de Ven20.53%12.94%
Linus Torvalds20.53%25.88%
Namhyung Kim10.26%12.94%
John Stultz10.26%12.94%
Total379100.00%34100.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.