summaryrefslogtreecommitdiffstats
path: root/sys/i4b
diff options
context:
space:
mode:
authornetchild <netchild@FreeBSD.org>2007-04-01 16:52:54 +0000
committernetchild <netchild@FreeBSD.org>2007-04-01 16:52:54 +0000
commit302dbc9a0e34d1331a75eec7b05fa0519d6281b3 (patch)
tree57384fc5d21f636a8b65dc2d3058cb4c35c4ca40 /sys/i4b
parentaae26bbf9f3e52bc678e6420b820b073f7f52c2b (diff)
downloadFreeBSD-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')
-rw-r--r--sys/i4b/layer1/ifpnp/i4b_ifpnp_avm.c8
-rw-r--r--sys/i4b/layer1/ihfc/i4b_ihfc_pnp.c20
-rw-r--r--sys/i4b/layer1/isic/i4b_avm_a1.c10
-rw-r--r--sys/i4b/layer1/isic/i4b_isic_pnp.c11
-rw-r--r--sys/i4b/layer1/isic/i4b_itk_ix1.c13
-rw-r--r--sys/i4b/layer1/isic/i4b_tel_s016.c11
-rw-r--r--sys/i4b/layer1/isic/i4b_tel_s0163.c11
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);
}
OpenPOWER on IntegriCloud