static irqreturn_t ilo_isr(int irq, void *data) { struct ilo_hwinfo *hw = data; int pending, i; spin_lock(&hw->alloc_lock); /* check for ccbs which have data */ pending = get_device_outbound(hw); if (!pending) { spin_unlock(&hw->alloc_lock); return IRQ_NONE; } if (is_db_reset(pending)) { /* wake up all ccbs if the device was reset */ pending = -1; ilo_set_reset(hw); } for (i = 0; i < MAX_CCB; i++) { if (!hw->ccb_alloc[i]) continue; if (pending & (1 << i)) wake_up_interruptible(&hw->ccb_alloc[i]->ccb_waitq); } /* clear the device of the channels that have been handled */ clear_pending_db(hw, pending); spin_unlock(&hw->alloc_lock); return IRQ_HANDLED; }
static irqreturn_t ilo_isr(int irq, void *data) { struct ilo_hwinfo *hw = data; int pending, i; spin_lock(&hw->alloc_lock); /* */ pending = get_device_outbound(hw); if (!pending) { spin_unlock(&hw->alloc_lock); return IRQ_NONE; } if (is_db_reset(pending)) { /* */ pending = -1; ilo_set_reset(hw); } for (i = 0; i < MAX_CCB; i++) { if (!hw->ccb_alloc[i]) continue; if (pending & (1 << i)) wake_up_interruptible(&hw->ccb_alloc[i]->ccb_waitq); } /* */ clear_pending_db(hw, pending); spin_unlock(&hw->alloc_lock); return IRQ_HANDLED; }
static inline int is_device_reset(struct ilo_hwinfo *hw) { /* check for global reset condition */ return is_db_reset(get_device_outbound(hw)); }
static inline int is_device_reset(struct ilo_hwinfo *hw) { /* */ return is_db_reset(get_device_outbound(hw)); }