Module Name: src
Committed By: skrll
Date: Mon Nov 21 08:27:30 UTC 2016
Modified Files:
src/sys/dev/usb: umass.c umass_scsipi.c
Log Message:
No need to take the kernel lock in umass(4) anymore
To generate a diff of this commit:
cvs rdiff -u -r1.156 -r1.157 src/sys/dev/usb/umass.c
cvs rdiff -u -r1.53 -r1.54 src/sys/dev/usb/umass_scsipi.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/usb/umass.c
diff -u src/sys/dev/usb/umass.c:1.156 src/sys/dev/usb/umass.c:1.157
--- src/sys/dev/usb/umass.c:1.156 Thu Jul 7 06:55:42 2016
+++ src/sys/dev/usb/umass.c Mon Nov 21 08:27:30 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: umass.c,v 1.156 2016/07/07 06:55:42 msaitoh Exp $ */
+/* $NetBSD: umass.c,v 1.157 2016/11/21 08:27:30 skrll Exp $ */
/*
* Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -124,7 +124,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: umass.c,v 1.156 2016/07/07 06:55:42 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: umass.c,v 1.157 2016/11/21 08:27:30 skrll Exp $");
#ifdef _KERNEL_OPT
#include "opt_usb.h"
@@ -527,8 +527,7 @@ umass_attach(device_t parent, device_t s
DPRINTFM(UDMASS_USB, "sc %p: opening iface %p epaddr %d for BULKOUT",
sc, sc->sc_iface, sc->sc_epaddr[UMASS_BULKOUT], 0);
err = usbd_open_pipe(sc->sc_iface, sc->sc_epaddr[UMASS_BULKOUT],
- USBD_EXCLUSIVE_USE,
- &sc->sc_pipe[UMASS_BULKOUT]);
+ USBD_EXCLUSIVE_USE | USBD_MPSAFE, &sc->sc_pipe[UMASS_BULKOUT]);
if (err) {
aprint_error_dev(self, "cannot open %u-out pipe (bulk)\n",
sc->sc_epaddr[UMASS_BULKOUT]);
@@ -538,7 +537,7 @@ umass_attach(device_t parent, device_t s
DPRINTFM(UDMASS_USB, "sc %p: opening iface %p epaddr %d for BULKIN",
sc, sc->sc_iface, sc->sc_epaddr[UMASS_BULKIN], 0);
err = usbd_open_pipe(sc->sc_iface, sc->sc_epaddr[UMASS_BULKIN],
- USBD_EXCLUSIVE_USE, &sc->sc_pipe[UMASS_BULKIN]);
+ USBD_EXCLUSIVE_USE | USBD_MPSAFE, &sc->sc_pipe[UMASS_BULKIN]);
if (err) {
aprint_error_dev(self, "could not open %u-in pipe (bulk)\n",
sc->sc_epaddr[UMASS_BULKIN]);
@@ -562,7 +561,7 @@ umass_attach(device_t parent, device_t s
"sc %p: opening iface %p epaddr %d for INTRIN",
sc, sc->sc_iface, sc->sc_epaddr[UMASS_INTRIN], 0);
err = usbd_open_pipe(sc->sc_iface, sc->sc_epaddr[UMASS_INTRIN],
- USBD_EXCLUSIVE_USE, &sc->sc_pipe[UMASS_INTRIN]);
+ USBD_EXCLUSIVE_USE | USBD_MPSAFE, &sc->sc_pipe[UMASS_INTRIN]);
if (err) {
aprint_error_dev(self, "couldn't open %u-in (intr)\n",
sc->sc_epaddr[UMASS_INTRIN]);
Index: src/sys/dev/usb/umass_scsipi.c
diff -u src/sys/dev/usb/umass_scsipi.c:1.53 src/sys/dev/usb/umass_scsipi.c:1.54
--- src/sys/dev/usb/umass_scsipi.c:1.53 Sun Jul 3 07:27:37 2016
+++ src/sys/dev/usb/umass_scsipi.c Mon Nov 21 08:27:30 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: umass_scsipi.c,v 1.53 2016/07/03 07:27:37 skrll Exp $ */
+/* $NetBSD: umass_scsipi.c,v 1.54 2016/11/21 08:27:30 skrll Exp $ */
/*
* Copyright (c) 2001, 2003, 2012 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: umass_scsipi.c,v 1.53 2016/07/03 07:27:37 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: umass_scsipi.c,v 1.54 2016/11/21 08:27:30 skrll Exp $");
#ifdef _KERNEL_OPT
#include "opt_usb.h"
@@ -194,6 +194,7 @@ umass_scsipi_setup(struct umass_softc *s
scbus->sc_adapter.adapt_minphys = umass_scsipi_minphys;
scbus->sc_adapter.adapt_ioctl = umass_scsipi_ioctl;
scbus->sc_adapter.adapt_getgeom = umass_scsipi_getgeom;
+ scbus->sc_adapter.adapt_flags = SCSIPI_ADAPT_MPSAFE;
/* Fill in the channel. */
memset(&scbus->sc_channel, 0, sizeof(scbus->sc_channel));
@@ -316,9 +317,7 @@ umass_scsipi_request(struct scsipi_chann
/* Return if command finishes early. */
done:
- KERNEL_LOCK(1, curlwp);
scsipi_done(xs);
- KERNEL_UNLOCK_ONE(curlwp);
return;
default:
/* Not supported, nothing to do. */
@@ -397,7 +396,6 @@ umass_scsipi_cb(struct umass_softc *sc,
struct scsipi_xfer *xs = priv;
struct scsipi_periph *periph = xs->xs_periph;
int cmdlen, senselen;
- int s;
#ifdef UMASS_DEBUG
struct timeval tv;
u_int delta;
@@ -454,11 +452,7 @@ umass_scsipi_cb(struct umass_softc *sc,
DPRINTFM(UDMASS_CMD, "return xs->error=%d, xs->xs_status=0x%x"
" xs->resid=%d", xs->error, xs->xs_status, xs->resid, 0);
- s = splbio();
- KERNEL_LOCK(1, curlwp);
scsipi_done(xs);
- KERNEL_UNLOCK_ONE(curlwp);
- splx(s);
}
/*
@@ -470,7 +464,6 @@ umass_scsipi_sense_cb(struct umass_softc
{
UMASSHIST_FUNC(); UMASSHIST_CALLED();
struct scsipi_xfer *xs = priv;
- int s;
DPRINTFM(UDMASS_CMD, "sc %p: xs=%p residue=%d status=%d", sc, xs,
residue, status);
@@ -495,11 +488,7 @@ umass_scsipi_sense_cb(struct umass_softc
DPRINTFM(UDMASS_CMD, "return xs->error=%d, xs->xs_status=0x%x"
" xs->resid=%d", xs->error, xs->xs_status, xs->resid, 0);
- s = splbio();
- KERNEL_LOCK(1, curlwp);
scsipi_done(xs);
- KERNEL_UNLOCK_ONE(curlwp);
- splx(s);
}
#if NATAPIBUS > 0
@@ -518,17 +507,13 @@ umass_atapi_probe_device(struct atapibus
if (target != UMASS_ATAPI_DRIVE) /* only probe drive 0 */
return;
- KERNEL_LOCK(1, curlwp);
-
/* skip if already attached */
if (scsipi_lookup_periph(chan, target, 0) != NULL) {
- KERNEL_UNLOCK_ONE(curlwp);
return;
}
periph = scsipi_alloc_periph(M_NOWAIT);
if (periph == NULL) {
- KERNEL_UNLOCK_ONE(curlwp);
aprint_error_dev(atapi->sc_dev,
"can't allocate link for drive %d\n", target);
return;
@@ -544,7 +529,6 @@ umass_atapi_probe_device(struct atapibus
/* Now go ask the device all about itself. */
memset(&inqbuf, 0, sizeof(inqbuf));
if (scsipi_inquire(periph, &inqbuf, XS_CTL_DISCOVERY) != 0) {
- KERNEL_UNLOCK_ONE(curlwp);
DPRINTFM(UDMASS_SCSI, "scsipi_inquire failed", 0, 0, 0, 0);
free(periph, M_DEVBUF);
return;
@@ -570,7 +554,5 @@ umass_atapi_probe_device(struct atapibus
atapi_probe_device(atapi, target, periph, &sa);
/* atapi_probe_device() frees the periph when there is no device.*/
-
- KERNEL_UNLOCK_ONE(curlwp);
}
#endif