提交 f3518e4e 编写于 作者: J Jeff Garzik

drivers/char/ip2: split out irq core logic into separate function

No changes besides code movement and glue.
Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
上级 1daec86a
...@@ -1166,26 +1166,10 @@ ip2_interrupt_bh(struct work_struct *work) ...@@ -1166,26 +1166,10 @@ ip2_interrupt_bh(struct work_struct *work)
/* */ /* */
/* */ /* */
/******************************************************************************/ /******************************************************************************/
static irqreturn_t static void
ip2_interrupt(int irq, void *dev_id) ip2_irq_work(i2eBordStrPtr pB)
{ {
int i;
i2eBordStrPtr pB;
int handled = 0;
ip2trace (ITRC_NO_PORT, ITRC_INTR, 99, 1, irq );
/* Service just the boards on the list using this irq */
for( i = 0; i < i2nBoards; ++i ) {
pB = i2BoardPtrTable[i];
// Only process those boards which match our IRQ.
// IRQ = 0 for polled boards, we won't poll "IRQ" boards
if ( pB && (pB->i2eUsingIrq == irq) ) {
handled = 1;
#ifdef USE_IQI #ifdef USE_IQI
if (NO_MAIL_HERE != ( pB->i2eStartMail = iiGetMail(pB))) { if (NO_MAIL_HERE != ( pB->i2eStartMail = iiGetMail(pB))) {
// Disable his interrupt (will be enabled when serviced) // Disable his interrupt (will be enabled when serviced)
// This is mostly to protect from reentrancy. // This is mostly to protect from reentrancy.
...@@ -1197,11 +1181,35 @@ ip2_interrupt(int irq, void *dev_id) ...@@ -1197,11 +1181,35 @@ ip2_interrupt(int irq, void *dev_id)
// Make sure the immediate queue is flagged to fire. // Make sure the immediate queue is flagged to fire.
} }
#else #else
// We are using immediate servicing here. This sucks and can // We are using immediate servicing here. This sucks and can
// cause all sorts of havoc with ppp and others. The failsafe // cause all sorts of havoc with ppp and others. The failsafe
// check on iiSendPendingMail could also throw a hairball. // check on iiSendPendingMail could also throw a hairball.
i2ServiceBoard( pB ); i2ServiceBoard( pB );
#endif /* USE_IQI */ #endif /* USE_IQI */
}
static irqreturn_t
ip2_interrupt(int irq, void *dev_id)
{
int i;
i2eBordStrPtr pB;
int handled = 0;
ip2trace (ITRC_NO_PORT, ITRC_INTR, 99, 1, irq );
/* Service just the boards on the list using this irq */
for( i = 0; i < i2nBoards; ++i ) {
pB = i2BoardPtrTable[i];
// Only process those boards which match our IRQ.
// IRQ = 0 for polled boards, we won't poll "IRQ" boards
if ( pB && (pB->i2eUsingIrq == irq) ) {
handled = 1;
ip2_irq_work(pB);
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册