summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlfred Perlstein <alfred@FreeBSD.org>2001-04-05 06:56:10 +0000
committerAlfred Perlstein <alfred@FreeBSD.org>2001-04-05 06:56:10 +0000
commit8da738fd11690df892eaedcf1fc18a9abca0d583 (patch)
treeead39feed136fc3d80ecaae14170f642be3bea66
parent2955f0b360cea0479d4c7252bbcb9a7faa2e0474 (diff)
Notes
-rw-r--r--sys/dev/wi/if_wi.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/sys/dev/wi/if_wi.c b/sys/dev/wi/if_wi.c
index 50beb56072be..bfe895ac3f9a 100644
--- a/sys/dev/wi/if_wi.c
+++ b/sys/dev/wi/if_wi.c
@@ -1685,6 +1685,7 @@ wi_alloc(dev, io_rid)
sc->irq = bus_alloc_resource(dev, SYS_RES_IRQ, &sc->irq_rid,
0, ~0, 1, RF_ACTIVE);
if (!sc->irq) {
+ wi_free(dev);
device_printf(dev, "No irq?!\n");
return (ENXIO);
}
@@ -1703,12 +1704,18 @@ static void wi_free(dev)
{
struct wi_softc *sc = device_get_softc(dev);
- if (sc->iobase != NULL)
- bus_release_resource(dev, SYS_RES_IOPORT, 0, sc->iobase);
- if (sc->irq != NULL)
- bus_release_resource(dev, SYS_RES_IRQ, 0, sc->irq);
- if (sc->mem != NULL)
+ if (sc->iobase != NULL) {
+ bus_release_resource(dev, SYS_RES_IOPORT, sc->iobase_rid, sc->iobase);
+ sc->iobase = NULL;
+ }
+ if (sc->irq != NULL) {
+ bus_release_resource(dev, SYS_RES_IRQ, sc->irq_rid, sc->irq);
+ sc->irq = NULL;
+ }
+ if (sc->mem != NULL) {
bus_release_resource(dev, SYS_RES_MEMORY, sc->mem_rid, sc->mem);
+ sc->mem = NULL;
+ }
return;
}