diff options
author | Christoph Hellwig <hch@lst.de> | 2015-11-10 16:56:14 +0300 |
---|---|---|
committer | Christoph Hellwig <hch@lst.de> | 2015-12-11 22:52:24 +0300 |
commit | 511cbce2ff8b9d322077909ee90c5d4b67b29b75 (patch) | |
tree | 27e1f9e09332d204ec1a1a506e674ca80ed9e580 /include/linux/irq_poll.h | |
parent | a2dbb7b56f2c29fc78b18a3fbe47ad80f6912092 (diff) | |
download | linux-511cbce2ff8b9d322077909ee90c5d4b67b29b75.tar.xz |
irq_poll: make blk-iopoll available outside the block layer
The new name is irq_poll as iopoll is already taken. Better suggestions
welcome.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Bart Van Assche <bart.vanassche@sandisk.com>
Diffstat (limited to 'include/linux/irq_poll.h')
-rw-r--r-- | include/linux/irq_poll.h | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/include/linux/irq_poll.h b/include/linux/irq_poll.h new file mode 100644 index 000000000000..50c39dcd2cba --- /dev/null +++ b/include/linux/irq_poll.h @@ -0,0 +1,46 @@ +#ifndef IRQ_POLL_H +#define IRQ_POLL_H + +struct irq_poll; +typedef int (irq_poll_fn)(struct irq_poll *, int); + +struct irq_poll { + struct list_head list; + unsigned long state; + unsigned long data; + int weight; + int max; + irq_poll_fn *poll; +}; + +enum { + IRQ_POLL_F_SCHED = 0, + IRQ_POLL_F_DISABLE = 1, +}; + +/* + * Returns 0 if we successfully set the IRQ_POLL_F_SCHED bit, indicating + * that we were the first to acquire this iop for scheduling. If this iop + * is currently disabled, return "failure". + */ +static inline int irq_poll_sched_prep(struct irq_poll *iop) +{ + if (!test_bit(IRQ_POLL_F_DISABLE, &iop->state)) + return test_and_set_bit(IRQ_POLL_F_SCHED, &iop->state); + + return 1; +} + +static inline int irq_poll_disable_pending(struct irq_poll *iop) +{ + return test_bit(IRQ_POLL_F_DISABLE, &iop->state); +} + +extern void irq_poll_sched(struct irq_poll *); +extern void irq_poll_init(struct irq_poll *, int, irq_poll_fn *); +extern void irq_poll_complete(struct irq_poll *); +extern void __irq_poll_complete(struct irq_poll *); +extern void irq_poll_enable(struct irq_poll *); +extern void irq_poll_disable(struct irq_poll *); + +#endif |