diff options
author | netchild <netchild@FreeBSD.org> | 2007-04-01 16:52:54 +0000 |
---|---|---|
committer | netchild <netchild@FreeBSD.org> | 2007-04-01 16:52:54 +0000 |
commit | 302dbc9a0e34d1331a75eec7b05fa0519d6281b3 (patch) | |
tree | 57384fc5d21f636a8b65dc2d3058cb4c35c4ca40 /sys/i4b/layer1 | |
parent | aae26bbf9f3e52bc678e6420b820b073f7f52c2b (diff) | |
download | FreeBSD-src-302dbc9a0e34d1331a75eec7b05fa0519d6281b3.zip FreeBSD-src-302dbc9a0e34d1331a75eec7b05fa0519d6281b3.tar.gz |
Tell the user when the setup of the interrupt handler failed and return
an error.
Found by: Coverity Prevent (tm)
CID: 71-78
Diffstat (limited to 'sys/i4b/layer1')
-rw-r--r-- | sys/i4b/layer1/ifpnp/i4b_ifpnp_avm.c | 8 | ||||
-rw-r--r-- | sys/i4b/layer1/ihfc/i4b_ihfc_pnp.c | 20 | ||||
-rw-r--r-- | sys/i4b/layer1/isic/i4b_avm_a1.c | 10 | ||||
-rw-r--r-- | sys/i4b/layer1/isic/i4b_isic_pnp.c | 11 | ||||
-rw-r--r-- | sys/i4b/layer1/isic/i4b_itk_ix1.c | 13 | ||||
-rw-r--r-- | sys/i4b/layer1/isic/i4b_tel_s016.c | 11 | ||||
-rw-r--r-- | sys/i4b/layer1/isic/i4b_tel_s0163.c | 11 |
7 files changed, 61 insertions, 23 deletions
diff --git a/sys/i4b/layer1/ifpnp/i4b_ifpnp_avm.c b/sys/i4b/layer1/ifpnp/i4b_ifpnp_avm.c index 294bea0..6675699 100644 --- a/sys/i4b/layer1/ifpnp/i4b_ifpnp_avm.c +++ b/sys/i4b/layer1/ifpnp/i4b_ifpnp_avm.c @@ -515,8 +515,14 @@ avm_pnp_attach(device_t dev) /* not needed */ sc->sc_irq = rman_get_start(sc->sc_resources.irq); - bus_setup_intr(dev,sc->sc_resources.irq,INTR_TYPE_NET, + error = bus_setup_intr(dev,sc->sc_resources.irq,INTR_TYPE_NET, NULL, (void(*)(void*))avm_pnp_intr, sc,&ih); + if (error != 0) + { + printf("avm_pnp%d: Could not setup irq.\n",unit); + error = ENXIO; + goto fail; + } sc->sc_unit = unit; /* end of new-bus stuff */ diff --git a/sys/i4b/layer1/ihfc/i4b_ihfc_pnp.c b/sys/i4b/layer1/ihfc/i4b_ihfc_pnp.c index 534ccdf..ff54164 100644 --- a/sys/i4b/layer1/ihfc/i4b_ihfc_pnp.c +++ b/sys/i4b/layer1/ihfc/i4b_ihfc_pnp.c @@ -206,8 +206,15 @@ ihfc_pnp_probe(device_t dev) /* setup interrupt routine now to avvoid stray * * interrupts. */ - bus_setup_intr(dev, S_IRQ, INTR_TYPE_NET, NULL, (void(*)(void*)) - HFC_INTR, sc, &dummy); + if (bus_setup_intr(dev, S_IRQ, INTR_TYPE_NET, + NULL, (void(*)(void*)) HFC_INTR, sc, + &dummy) != 0) + { + printf("ihfc%d: failed to setup irq.\n", + unit); + HFC_END; + return ENXIO; + } flag = 1; @@ -298,8 +305,13 @@ ihfc_isa_probe(device_t dev) /* setup interrupt routine now to avvoid stray * * interrupts. */ - bus_setup_intr(dev, S_IRQ, INTR_TYPE_NET, NULL, (void(*)(void*)) - HFC_INTR, sc, &dummy); + if (bus_setup_intr(dev, S_IRQ, INTR_TYPE_NET, NULL, + (void(*)(void*)) HFC_INTR, sc, &dummy) != 0) + { + printf("ihfc%d: failed to setup irq.\n", unit); + HFC_END; + return ENXIO; + } flag = 1; diff --git a/sys/i4b/layer1/isic/i4b_avm_a1.c b/sys/i4b/layer1/isic/i4b_avm_a1.c index 587865a..f724c03 100644 --- a/sys/i4b/layer1/isic/i4b_avm_a1.c +++ b/sys/i4b/layer1/isic/i4b_avm_a1.c @@ -252,9 +252,13 @@ isic_probe_avma1(device_t dev) sc->sc_irq = rman_get_start(sc->sc_resources.irq); /* register interupt routine */ - bus_setup_intr(dev, sc->sc_resources.irq, INTR_TYPE_NET, - NULL, (void(*)(void *))(isicintr), - sc, &ih); + if (bus_setup_intr(dev, sc->sc_resources.irq, INTR_TYPE_NET, NULL, + (void(*)(void *))(isicintr), sc, &ih) != 0) + { + printf("isic%d: Could not setup the irq for AVM A1/Fritz!\n",unit); + isic_detach_common(dev); + return ENXIO; + } /* check IRQ validity */ diff --git a/sys/i4b/layer1/isic/i4b_isic_pnp.c b/sys/i4b/layer1/isic/i4b_isic_pnp.c index 1ebabaf..ccb4aaf 100644 --- a/sys/i4b/layer1/isic/i4b_isic_pnp.c +++ b/sys/i4b/layer1/isic/i4b_isic_pnp.c @@ -320,9 +320,14 @@ isic_pnp_attach(device_t dev) else { /* setup intr routine */ - bus_setup_intr(dev,sc->sc_resources.irq,INTR_TYPE_NET, - NULL, (void(*)(void*))isicintr, - sc,&ih); + if (bus_setup_intr(dev,sc->sc_resources.irq,INTR_TYPE_NET, + NULL, (void(*)(void*))isicintr, sc,&ih) != 0) + { + printf("isic%d: Could not setup irq.\n",unit); + isic_detach_common(dev); + return ENXIO; + } + return 0; } } diff --git a/sys/i4b/layer1/isic/i4b_itk_ix1.c b/sys/i4b/layer1/isic/i4b_itk_ix1.c index d405325..77e8f2f 100644 --- a/sys/i4b/layer1/isic/i4b_itk_ix1.c +++ b/sys/i4b/layer1/isic/i4b_itk_ix1.c @@ -279,10 +279,15 @@ isic_probe_itkix1(device_t dev) printf("Setting up access interupt..."); #endif - bus_setup_intr(dev, sc->sc_resources.irq, - INTR_TYPE_NET, - NULL, (void(*)(void *))(isicintr), - sc, &ih); + if (bus_setup_intr(dev, sc->sc_resources.irq, INTR_TYPE_NET, NULL, + (void(*)(void *))(isicintr), sc, &ih) != 0) + { + printf("isic%d: Could not setup irq for ITK IX1.\n", unit); + bus_release_resource(dev,SYS_RES_IOPORT, + sc->sc_resources.io_rid[0], + sc->sc_resources.io_base[0]); + return ENXIO; + } #if defined(ITK_PROBE_DEBUG) printf("done.\n"); diff --git a/sys/i4b/layer1/isic/i4b_tel_s016.c b/sys/i4b/layer1/isic/i4b_tel_s016.c index 0c1dcc2..5818f30 100644 --- a/sys/i4b/layer1/isic/i4b_tel_s016.c +++ b/sys/i4b/layer1/isic/i4b_tel_s016.c @@ -302,10 +302,13 @@ isic_probe_s016(device_t dev) /* register interupt routine */ - bus_setup_intr(dev, sc->sc_resources.irq, - INTR_TYPE_NET, - NULL, (void(*)(void *))(isicintr), - sc, &ih); + if (bus_setup_intr(dev, sc->sc_resources.irq, INTR_TYPE_NET, NULL, + (void(*)(void *))(isicintr), sc, &ih) != 0) + { + printf("isic%d: Could not setup irq for Teles S0/16.\n", unit); + isic_detach_common(dev); + return ENXIO; + } /* get the irq number */ diff --git a/sys/i4b/layer1/isic/i4b_tel_s0163.c b/sys/i4b/layer1/isic/i4b_tel_s0163.c index 501276b..91dd955 100644 --- a/sys/i4b/layer1/isic/i4b_tel_s0163.c +++ b/sys/i4b/layer1/isic/i4b_tel_s0163.c @@ -339,10 +339,13 @@ isic_probe_s0163(device_t dev) } /* register interupt routine */ - bus_setup_intr(dev, sc->sc_resources.irq, - INTR_TYPE_NET, - NULL, (void(*)(void *))(isicintr), - sc, &ih); + if (bus_setup_intr(dev, sc->sc_resources.irq, INTR_TYPE_NET, NULL, + (void(*)(void *))(isicintr), sc, &ih) != 0) + { + printf("isic%d: Could not setup IRQ for Teles S0/16.3.\n",unit); + isic_detach_common(dev); + return ENXIO; + } return (0); } |