Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f3518e4e authored by Jeff Garzik's avatar Jeff Garzik
Browse files

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



No changes besides code movement and glue.

Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
parent 1daec86a
Loading
Loading
Loading
Loading
+26 −18
Original line number Diff line number Diff line
@@ -1166,26 +1166,10 @@ ip2_interrupt_bh(struct work_struct *work)
/*                                                                            */
/*                                                                            */
/******************************************************************************/
static irqreturn_t
ip2_interrupt(int irq, void *dev_id)
static void
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

	if (NO_MAIL_HERE != ( pB->i2eStartMail = iiGetMail(pB))) {
//		Disable his interrupt (will be enabled when serviced)
//		This is mostly to protect from reentrancy.
@@ -1197,12 +1181,36 @@ ip2_interrupt(int irq, void *dev_id)
//		Make sure the immediate queue is flagged to fire.
	}
#else

//	We are using immediate servicing here.  This sucks and can
//	cause all sorts of havoc with ppp and others.  The failsafe
//	check on iiSendPendingMail could also throw a hairball.

	i2ServiceBoard( pB );

#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);
		}
	}

	++irq_counter;