aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char
diff options
context:
space:
mode:
authorJeff Garzik <jeff@garzik.org>2007-10-19 15:24:59 -0400
committerJeff Garzik <jeff@garzik.org>2007-10-23 19:53:16 -0400
commitf3518e4ee70916e6bd43c8082e02f0dd1e19d7af (patch)
tree2af50242d12e9d15e6988d66f88a06d541354755 /drivers/char
parent1daec86ad11383845274e032d1b90620258dc87d (diff)
drivers/char/ip2: split out irq core logic into separate function
No changes besides code movement and glue. Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Diffstat (limited to 'drivers/char')
-rw-r--r--drivers/char/ip2/ip2main.c44
1 files changed, 26 insertions, 18 deletions
diff --git a/drivers/char/ip2/ip2main.c b/drivers/char/ip2/ip2main.c
index 2124dce38f2b..150e1e364ca7 100644
--- a/drivers/char/ip2/ip2main.c
+++ b/drivers/char/ip2/ip2main.c
@@ -1166,6 +1166,31 @@ ip2_interrupt_bh(struct work_struct *work)
1166/* */ 1166/* */
1167/* */ 1167/* */
1168/******************************************************************************/ 1168/******************************************************************************/
1169static void
1170ip2_irq_work(i2eBordStrPtr pB)
1171{
1172#ifdef USE_IQI
1173 if (NO_MAIL_HERE != ( pB->i2eStartMail = iiGetMail(pB))) {
1174// Disable his interrupt (will be enabled when serviced)
1175// This is mostly to protect from reentrancy.
1176 iiDisableMailIrq(pB);
1177
1178// Park the board on the immediate queue for processing.
1179 schedule_work(&pB->tqueue_interrupt);
1180
1181// Make sure the immediate queue is flagged to fire.
1182 }
1183#else
1184
1185// We are using immediate servicing here. This sucks and can
1186// cause all sorts of havoc with ppp and others. The failsafe
1187// check on iiSendPendingMail could also throw a hairball.
1188
1189 i2ServiceBoard( pB );
1190
1191#endif /* USE_IQI */
1192}
1193
1169static irqreturn_t 1194static irqreturn_t
1170ip2_interrupt(int irq, void *dev_id) 1195ip2_interrupt(int irq, void *dev_id)
1171{ 1196{
@@ -1184,24 +1209,7 @@ ip2_interrupt(int irq, void *dev_id)
1184 1209
1185 if ( pB && (pB->i2eUsingIrq == irq) ) { 1210 if ( pB && (pB->i2eUsingIrq == irq) ) {
1186 handled = 1; 1211 handled = 1;
1187#ifdef USE_IQI 1212 ip2_irq_work(pB);
1188
1189 if (NO_MAIL_HERE != ( pB->i2eStartMail = iiGetMail(pB))) {
1190// Disable his interrupt (will be enabled when serviced)
1191// This is mostly to protect from reentrancy.
1192 iiDisableMailIrq(pB);
1193
1194// Park the board on the immediate queue for processing.
1195 schedule_work(&pB->tqueue_interrupt);
1196
1197// Make sure the immediate queue is flagged to fire.
1198 }
1199#else
1200// We are using immediate servicing here. This sucks and can
1201// cause all sorts of havoc with ppp and others. The failsafe
1202// check on iiSendPendingMail could also throw a hairball.
1203 i2ServiceBoard( pB );
1204#endif /* USE_IQI */
1205 } 1213 }
1206 } 1214 }
1207 1215