diff options
| author | Jeff Garzik <jeff@garzik.org> | 2007-10-19 15:24:59 -0400 |
|---|---|---|
| committer | Jeff Garzik <jeff@garzik.org> | 2007-10-23 19:53:16 -0400 |
| commit | f3518e4ee70916e6bd43c8082e02f0dd1e19d7af (patch) | |
| tree | 2af50242d12e9d15e6988d66f88a06d541354755 /drivers | |
| parent | 1daec86ad11383845274e032d1b90620258dc87d (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')
| -rw-r--r-- | drivers/char/ip2/ip2main.c | 44 |
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 | /******************************************************************************/ |
| 1169 | static void | ||
| 1170 | ip2_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 | |||
| 1169 | static irqreturn_t | 1194 | static irqreturn_t |
| 1170 | ip2_interrupt(int irq, void *dev_id) | 1195 | ip2_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 | ||
