summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/cam/cam_periph.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/sys/cam/cam_periph.c b/sys/cam/cam_periph.c
index c0feec6..e2e5303 100644
--- a/sys/cam/cam_periph.c
+++ b/sys/cam/cam_periph.c
@@ -501,7 +501,6 @@ cam_periph_invalidate(struct cam_periph *periph)
static void
camperiphfree(struct cam_periph *periph)
{
- int s;
struct periph_driver **p_drv;
for (p_drv = periph_drivers; *p_drv != NULL; p_drv++) {
@@ -512,15 +511,13 @@ camperiphfree(struct cam_periph *periph)
printf("camperiphfree: attempt to free non-existant periph\n");
return;
}
-
- if (periph->periph_dtor != NULL)
- periph->periph_dtor(periph);
-
- s = splsoftcam();
+
TAILQ_REMOVE(&(*p_drv)->units, periph, unit_links);
(*p_drv)->generation++;
- splx(s);
+ xpt_unlock_buses();
+ if (periph->periph_dtor != NULL)
+ periph->periph_dtor(periph);
xpt_remove_periph(periph);
if (periph->flags & CAM_PERIPH_NEW_DEV_FOUND) {
@@ -549,6 +546,7 @@ camperiphfree(struct cam_periph *periph)
}
xpt_free_path(periph->path);
free(periph, M_CAMPERIPH);
+ xpt_lock_buses();
}
/*
OpenPOWER on IntegriCloud