aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/advansys
diff options
context:
space:
mode:
authorScott Mitchell <rsm@FreeBSD.org>2004-12-06 23:17:04 +0000
committerScott Mitchell <rsm@FreeBSD.org>2004-12-06 23:17:04 +0000
commitfb805ea785ddb712bcce2a6b2ae91ece90a3ecfa (patch)
tree17073bbc380e295bc9f943fffd981ad3fefb9a15 /sys/dev/advansys
parent2f6a1b474498c3fa22389eace4ac99e17f4257ea (diff)
downloadsrc-fb805ea785ddb712bcce2a6b2ae91ece90a3ecfa.tar.gz
src-fb805ea785ddb712bcce2a6b2ae91ece90a3ecfa.zip
Properly release allocated resources if adw(4) device fails to fully attach,
eg. if the firmware load fails. Shortish MFC timeout so this can be merged before the 4.11 freeze. PR: kern/34306 Submitted by: gibbs Approved by: gibbs, imp (mentor) MFC after: 5 days
Notes
Notes: svn path=/head/; revision=138502
Diffstat (limited to 'sys/dev/advansys')
-rw-r--r--sys/dev/advansys/adwcam.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/sys/dev/advansys/adwcam.c b/sys/dev/advansys/adwcam.c
index f4e7f4cfe91f..400c0fca5271 100644
--- a/sys/dev/advansys/adwcam.c
+++ b/sys/dev/advansys/adwcam.c
@@ -872,6 +872,26 @@ adw_free(struct adw_softc *adw)
case 0:
break;
}
+
+ if (adw->regs != NULL)
+ bus_release_resource(adw->device,
+ adw->regs_res_type,
+ adw->regs_res_id,
+ adw->regs);
+
+ if (adw->irq != NULL)
+ bus_release_resource(adw->device,
+ adw->irq_res_type,
+ 0, adw->irq);
+
+ if (adw->sim != NULL) {
+ if (adw->path != NULL) {
+ xpt_async(AC_LOST_DEVICE, adw->path, NULL);
+ xpt_free_path(adw->path);
+ }
+ xpt_bus_deregister(cam_sim_path(adw->sim));
+ cam_sim_free(adw->sim, /*free_devq*/TRUE);
+ }
free(adw->name, M_DEVBUF);
free(adw, M_DEVBUF);
}