aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorroel kluin <roel.kluin@gmail.com>2009-09-01 02:24:53 -0400
committerDavid S. Miller <davem@davemloft.net>2009-09-03 02:45:54 -0400
commitab08999d6029bb2c79c16be5405d63d2bedbdfea (patch)
treef2269b6e55119a582e8791434a5ac63b49af6e27
parentaa1330766c49199bdab4d4a9096d98b072df9044 (diff)
WARNING: some request_irq() failures ignored in el2_open()
Request_irq() may fail in different ways, handle accordingly. Signed-off-by: Roel Kluin <roel.kluin@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/3c503.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/net/3c503.c b/drivers/net/3c503.c
index 134638a9759f..81c148a59adf 100644
--- a/drivers/net/3c503.c
+++ b/drivers/net/3c503.c
@@ -383,7 +383,7 @@ out:
383static int 383static int
384el2_open(struct net_device *dev) 384el2_open(struct net_device *dev)
385{ 385{
386 int retval = -EAGAIN; 386 int retval;
387 387
388 if (dev->irq < 2) { 388 if (dev->irq < 2) {
389 int irqlist[] = {5, 9, 3, 4, 0}; 389 int irqlist[] = {5, 9, 3, 4, 0};
@@ -391,7 +391,8 @@ el2_open(struct net_device *dev)
391 391
392 outb(EGACFR_NORM, E33G_GACFR); /* Enable RAM and interrupts. */ 392 outb(EGACFR_NORM, E33G_GACFR); /* Enable RAM and interrupts. */
393 do { 393 do {
394 if (request_irq (*irqp, NULL, 0, "bogus", dev) != -EBUSY) { 394 retval = request_irq(*irqp, NULL, 0, "bogus", dev);
395 if (retval >= 0) {
395 /* Twinkle the interrupt, and check if it's seen. */ 396 /* Twinkle the interrupt, and check if it's seen. */
396 unsigned long cookie = probe_irq_on(); 397 unsigned long cookie = probe_irq_on();
397 outb_p(0x04 << ((*irqp == 9) ? 2 : *irqp), E33G_IDCFR); 398 outb_p(0x04 << ((*irqp == 9) ? 2 : *irqp), E33G_IDCFR);
@@ -400,11 +401,14 @@ el2_open(struct net_device *dev)
400 && ((retval = request_irq(dev->irq = *irqp, 401 && ((retval = request_irq(dev->irq = *irqp,
401 eip_interrupt, 0, dev->name, dev)) == 0)) 402 eip_interrupt, 0, dev->name, dev)) == 0))
402 break; 403 break;
404 } else {
405 if (retval != -EBUSY)
406 return reval;
403 } 407 }
404 } while (*++irqp); 408 } while (*++irqp);
405 if (*irqp == 0) { 409 if (*irqp == 0) {
406 outb(EGACFR_IRQOFF, E33G_GACFR); /* disable interrupts. */ 410 outb(EGACFR_IRQOFF, E33G_GACFR); /* disable interrupts. */
407 return retval; 411 return -EAGAIN;
408 } 412 }
409 } else { 413 } else {
410 if ((retval = request_irq(dev->irq, eip_interrupt, 0, dev->name, dev))) { 414 if ((retval = request_irq(dev->irq, eip_interrupt, 0, dev->name, dev))) {