diff options
author | David Gwynne <dlg@cvs.openbsd.org> | 2010-04-12 09:51:49 +0000 |
---|---|---|
committer | David Gwynne <dlg@cvs.openbsd.org> | 2010-04-12 09:51:49 +0000 |
commit | 92c48865f5205b2178d91f1d1523d13de2be9d51 (patch) | |
tree | 744445513143bcb041f94961146990f376eda910 | |
parent | b3799e5c1782267f78506c4bd7678e409cfc4c5f (diff) |
i snuck fine grained locking into the midlayer as part of all the
other stuff ive been doing in here. everything that needs protection
inside the midlayer and the scsi device drivers (sd, cd, etc) uses
mutexes now.
this pushes splbio out of the midlayer. splbio is only taken before
biodone is called now.
ok beck@ marco@ krw@ deraadt@. theyre all terrified, but they all
say if we're going to do then now is the right stage of the dev
cycle.
-rw-r--r-- | sys/scsi/cd.c | 7 | ||||
-rw-r--r-- | sys/scsi/scsi_base.c | 4 | ||||
-rw-r--r-- | sys/scsi/sd.c | 7 | ||||
-rw-r--r-- | sys/scsi/ss.c | 7 | ||||
-rw-r--r-- | sys/scsi/ss_mustek.c | 7 | ||||
-rw-r--r-- | sys/scsi/ss_scanjet.c | 7 | ||||
-rw-r--r-- | sys/scsi/st.c | 7 |
7 files changed, 25 insertions, 21 deletions
diff --git a/sys/scsi/cd.c b/sys/scsi/cd.c index b93486e61ab..3f49a9a1e5c 100644 --- a/sys/scsi/cd.c +++ b/sys/scsi/cd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cd.c,v 1.164 2010/02/28 21:17:00 krw Exp $ */ +/* $OpenBSD: cd.c,v 1.165 2010/04/12 09:51:48 dlg Exp $ */ /* $NetBSD: cd.c,v 1.100 1997/04/02 02:29:30 mycroft Exp $ */ /* @@ -683,9 +683,8 @@ cd_buf_done(struct scsi_xfer *xs) { struct cd_softc *sc = xs->sc_link->device_softc; struct buf *bp = xs->cookie; + int s; - splassert(IPL_BIO); - switch (xs->error) { case XS_NOERROR: bp->b_error = 0; @@ -733,7 +732,9 @@ retry: disk_unbusy(&sc->sc_dk, bp->b_bcount - xs->resid, bp->b_flags & B_READ); + s = splbio(); biodone(bp); + splx(s); scsi_xs_put(xs); cdstart(sc); /* restart io */ } diff --git a/sys/scsi/scsi_base.c b/sys/scsi/scsi_base.c index 939cc22d502..76277c7a874 100644 --- a/sys/scsi/scsi_base.c +++ b/sys/scsi/scsi_base.c @@ -1,4 +1,4 @@ -/* $OpenBSD: scsi_base.c,v 1.168 2010/04/06 00:58:00 dlg Exp $ */ +/* $OpenBSD: scsi_base.c,v 1.169 2010/04/12 09:51:48 dlg Exp $ */ /* $NetBSD: scsi_base.c,v 1.43 1997/04/02 02:29:36 mycroft Exp $ */ /* @@ -1102,8 +1102,6 @@ scsi_xs_exec(struct scsi_xfer *xs) void scsi_done(struct scsi_xfer *xs) { - splassert(IPL_BIO); - #ifdef SCSIDEBUG if (xs->sc_link->flags & SDEV_DB1) { if (xs->datalen && (xs->flags & SCSI_DATA_IN)) diff --git a/sys/scsi/sd.c b/sys/scsi/sd.c index a36d03ca9ed..a6d9ba5adab 100644 --- a/sys/scsi/sd.c +++ b/sys/scsi/sd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sd.c,v 1.183 2010/04/06 00:59:50 dlg Exp $ */ +/* $OpenBSD: sd.c,v 1.184 2010/04/12 09:51:48 dlg Exp $ */ /* $NetBSD: sd.c,v 1.111 1997/04/02 02:29:41 mycroft Exp $ */ /*- @@ -728,8 +728,7 @@ sd_buf_done(struct scsi_xfer *xs) { struct sd_softc *sc = xs->sc_link->device_softc; struct buf *bp = xs->cookie; - - splassert(IPL_BIO); + int s; switch (xs->error) { case XS_NOERROR: @@ -778,7 +777,9 @@ retry: disk_unbusy(&sc->sc_dk, bp->b_bcount - xs->resid, bp->b_flags & B_READ); + s = splbio(); biodone(bp); + splx(s); scsi_xs_put(xs); } diff --git a/sys/scsi/ss.c b/sys/scsi/ss.c index 10d030cc770..3eb378bd312 100644 --- a/sys/scsi/ss.c +++ b/sys/scsi/ss.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ss.c,v 1.70 2010/01/15 05:50:31 krw Exp $ */ +/* $OpenBSD: ss.c,v 1.71 2010/04/12 09:51:48 dlg Exp $ */ /* $NetBSD: ss.c,v 1.10 1996/05/05 19:52:55 christos Exp $ */ /* @@ -682,8 +682,7 @@ ssdone(struct scsi_xfer *xs) { struct ss_softc *ss = xs->sc_link->device_softc; struct buf *bp = xs->cookie; - - splassert(IPL_BIO); + int s; switch (xs->error) { case XS_NOERROR: @@ -727,7 +726,9 @@ retry: break; } + s = splbio(); biodone(bp); + splx(s); scsi_xs_put(xs); } diff --git a/sys/scsi/ss_mustek.c b/sys/scsi/ss_mustek.c index ee3b42b9f4a..47899c45fa4 100644 --- a/sys/scsi/ss_mustek.c +++ b/sys/scsi/ss_mustek.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ss_mustek.c,v 1.20 2010/01/15 05:50:31 krw Exp $ */ +/* $OpenBSD: ss_mustek.c,v 1.21 2010/04/12 09:51:48 dlg Exp $ */ /* $NetBSD: ss_mustek.c,v 1.4 1996/05/05 19:52:57 christos Exp $ */ /* @@ -472,8 +472,7 @@ mustek_read_done(struct scsi_xfer *xs) { struct ss_softc *ss = xs->sc_link->device_softc; struct buf *bp = xs->cookie; - - splassert(IPL_BIO); + int s; switch (xs->error) { case XS_NOERROR: @@ -521,7 +520,9 @@ retry: break; } + s = splbio(); biodone(bp); + splx(s); scsi_xs_put(xs); } diff --git a/sys/scsi/ss_scanjet.c b/sys/scsi/ss_scanjet.c index 313a281e52f..1a63981ca0f 100644 --- a/sys/scsi/ss_scanjet.c +++ b/sys/scsi/ss_scanjet.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ss_scanjet.c,v 1.37 2010/01/15 05:50:31 krw Exp $ */ +/* $OpenBSD: ss_scanjet.c,v 1.38 2010/04/12 09:51:48 dlg Exp $ */ /* $NetBSD: ss_scanjet.c,v 1.6 1996/05/18 22:58:01 christos Exp $ */ /* @@ -309,8 +309,7 @@ scanjet_read_done(struct scsi_xfer *xs) { struct ss_softc *ss = xs->sc_link->device_softc; struct buf *bp = xs->cookie; - - splassert(IPL_BIO); + int s; switch (xs->error) { case XS_NOERROR: @@ -359,7 +358,9 @@ retry: break; } + s = splbio(); biodone(bp); + splx(s); scsi_xs_put(xs); } diff --git a/sys/scsi/st.c b/sys/scsi/st.c index 96878b51f35..c53129ce6b0 100644 --- a/sys/scsi/st.c +++ b/sys/scsi/st.c @@ -1,4 +1,4 @@ -/* $OpenBSD: st.c,v 1.93 2010/01/15 05:50:31 krw Exp $ */ +/* $OpenBSD: st.c,v 1.94 2010/04/12 09:51:48 dlg Exp $ */ /* $NetBSD: st.c,v 1.71 1997/02/21 23:03:49 thorpej Exp $ */ /* @@ -1088,8 +1088,7 @@ st_buf_done(struct scsi_xfer *xs) { struct st_softc *st = xs->sc_link->device_softc; struct buf *bp = xs->cookie; - - splassert(IPL_BIO); + int s; switch (xs->error) { case XS_NOERROR: @@ -1133,7 +1132,9 @@ retry: break; } + s = splbio(); biodone(bp); + splx(s); scsi_xs_put(xs); ststart(st); /* restart io */ } |