1#ifndef BLK_IOPOLL_H 2#define BLK_IOPOLL_H 3 4struct blk_iopoll; 5typedef int (blk_iopoll_fn)(struct blk_iopoll *, int); 6 7struct blk_iopoll { 8 struct list_head list; 9 unsigned long state; 10 unsigned long data; 11 int weight; 12 int max; 13 blk_iopoll_fn *poll; 14}; 15 16enum { 17 IOPOLL_F_SCHED = 0, 18 IOPOLL_F_DISABLE = 1, 19}; 20 21/* 22 * Returns 0 if we successfully set the IOPOLL_F_SCHED bit, indicating 23 * that we were the first to acquire this iop for scheduling. If this iop 24 * is currently disabled, return "failure". 25 */ 26static inline int blk_iopoll_sched_prep(struct blk_iopoll *iop) 27{ 28 if (!test_bit(IOPOLL_F_DISABLE, &iop->state)) 29 return test_and_set_bit(IOPOLL_F_SCHED, &iop->state); 30 31 return 1; 32} 33 34static inline int blk_iopoll_disable_pending(struct blk_iopoll *iop) 35{ 36 return test_bit(IOPOLL_F_DISABLE, &iop->state); 37} 38 39extern void blk_iopoll_sched(struct blk_iopoll *); 40extern void blk_iopoll_init(struct blk_iopoll *, int, blk_iopoll_fn *); 41extern void blk_iopoll_complete(struct blk_iopoll *); 42extern void __blk_iopoll_complete(struct blk_iopoll *); 43extern void blk_iopoll_enable(struct blk_iopoll *); 44extern void blk_iopoll_disable(struct blk_iopoll *); 45 46extern int blk_iopoll_enabled; 47 48#endif 49