cregit-Linux how code gets into the kernel

Release 4.12 include/linux/irq_work.h

Directory: include/linux
#ifndef _LINUX_IRQ_WORK_H

#define _LINUX_IRQ_WORK_H

#include <linux/llist.h>

/*
 * An entry can be in one of four states:
 *
 * free      NULL, 0 -> {claimed}       : free to be used
 * claimed   NULL, 3 -> {pending}       : claimed to be enqueued
 * pending   next, 3 -> {busy}          : queued, pending callback
 * busy      NULL, 2 -> {free, claimed} : callback in progress, can be claimed
 */


#define IRQ_WORK_PENDING	1UL

#define IRQ_WORK_BUSY		2UL

#define IRQ_WORK_FLAGS		3UL

#define IRQ_WORK_LAZY		4UL 
/* Doesn't want IPI, wait for tick */


struct irq_work {
	
unsigned long flags;
	
struct llist_node llnode;
	
void (*func)(struct irq_work *);
};


static inline void init_irq_work(struct irq_work *work, void (*func)(struct irq_work *)) { work->flags = 0; work->func = func; }

Contributors

PersonTokensPropCommitsCommitProp
Peter Zijlstra3085.71%150.00%
Huang Ying514.29%150.00%
Total35100.00%2100.00%

#define DEFINE_IRQ_WORK(name, _f) struct irq_work name = { .func = (_f), } bool irq_work_queue(struct irq_work *work); #ifdef CONFIG_SMP bool irq_work_queue_on(struct irq_work *work, int cpu); #endif void irq_work_tick(void); void irq_work_sync(struct irq_work *work); #ifdef CONFIG_IRQ_WORK #include <asm/irq_work.h> void irq_work_run(void); bool irq_work_needs_cpu(void); #else
static inline bool irq_work_needs_cpu(void) { return false; }

Contributors

PersonTokensPropCommitsCommitProp
Frédéric Weisbecker1191.67%150.00%
James Hogan18.33%150.00%
Total12100.00%2100.00%


static inline void irq_work_run(void) { }

Contributors

PersonTokensPropCommitsCommitProp
Steven Rostedt8100.00%1100.00%
Total8100.00%1100.00%

#endif #endif /* _LINUX_IRQ_WORK_H */

Overall Contributors

PersonTokensPropCommitsCommitProp
Peter Zijlstra8546.96%436.36%
Frédéric Weisbecker6535.91%436.36%
Huang Ying168.84%19.09%
Steven Rostedt147.73%19.09%
James Hogan10.55%19.09%
Total181100.00%11100.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.