Module Name: src Committed By: martin Date: Mon Jun 21 17:27:57 UTC 2021
Modified Files: src/sys/dev/usb [netbsd-9]: umass.c umass_scsipi.c Log Message: Pull up following revision(s) (requested by riastradh in ticket #1306): sys/dev/usb/umass.c: revision 1.185 sys/dev/usb/umass_scsipi.c: revision 1.68 umass(4): Use an empty function callback, not null pointer. This stupid bug, with an `XXX Broken!' comment right above, has been preventing NetBSD from suspend/resume with a USB drive plugged in for longer than I want to even think about admitting. *sigh* umass(4): Assert that we got a cb up front. Avoids jump to zero waaaaaaay down the line where we've forgotten why we wanted to jump into oblivion. To generate a diff of this commit: cvs rdiff -u -r1.175.2.1 -r1.175.2.2 src/sys/dev/usb/umass.c cvs rdiff -u -r1.62 -r1.62.2.1 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.175.2.1 src/sys/dev/usb/umass.c:1.175.2.2 --- src/sys/dev/usb/umass.c:1.175.2.1 Sun Mar 1 12:38:59 2020 +++ src/sys/dev/usb/umass.c Mon Jun 21 17:27:57 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: umass.c,v 1.175.2.1 2020/03/01 12:38:59 martin Exp $ */ +/* $NetBSD: umass.c,v 1.175.2.2 2021/06/21 17:27:57 martin Exp $ */ /* * Copyright (c) 2003 The NetBSD Foundation, Inc. @@ -124,7 +124,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: umass.c,v 1.175.2.1 2020/03/01 12:38:59 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: umass.c,v 1.175.2.2 2021/06/21 17:27:57 martin Exp $"); #ifdef _KERNEL_OPT #include "opt_usb.h" @@ -1105,6 +1105,7 @@ umass_bbb_transfer(struct umass_softc *s UMASSHIST_FUNC(); UMASSHIST_CALLED(); static int dCBWtag = 42; /* unique for CBW of transfer */ + KASSERT(cb); DPRINTFM(UDMASS_BBB, "sc %#jx cmd=0x%02jx", (uintptr_t)sc, *(u_char *)cmd, 0, 0); @@ -1629,6 +1630,7 @@ umass_cbi_transfer(struct umass_softc *s DPRINTFM(UDMASS_CBI, "sc %#jx: cmd=0x%02jx, len=%jd", (uintptr_t)sc, *(u_char *)cmd, datalen, 0); + KASSERT(cb); KASSERTMSG(sc->sc_wire & (UMASS_WPROTO_CBI|UMASS_WPROTO_CBI_I), "sc->sc_wire == 0x%02x wrong for umass_cbi_transfer\n", sc->sc_wire); Index: src/sys/dev/usb/umass_scsipi.c diff -u src/sys/dev/usb/umass_scsipi.c:1.62 src/sys/dev/usb/umass_scsipi.c:1.62.2.1 --- src/sys/dev/usb/umass_scsipi.c:1.62 Thu May 30 21:44:49 2019 +++ src/sys/dev/usb/umass_scsipi.c Mon Jun 21 17:27:57 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: umass_scsipi.c,v 1.62 2019/05/30 21:44:49 mlelstv Exp $ */ +/* $NetBSD: umass_scsipi.c,v 1.62.2.1 2021/06/21 17:27:57 martin 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.62 2019/05/30 21:44:49 mlelstv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: umass_scsipi.c,v 1.62.2.1 2021/06/21 17:27:57 martin Exp $"); #ifdef _KERNEL_OPT #include "opt_usb.h" @@ -101,6 +101,8 @@ Static int umass_scsipi_ioctl(struct scs Static int umass_scsipi_getgeom(struct scsipi_periph *, struct disk_parms *, u_long); +Static void umass_null_cb(struct umass_softc *, void *, + int, int); Static void umass_scsipi_cb(struct umass_softc *, void *, int, int); Static void umass_scsipi_sense_cb(struct umass_softc *, void *, @@ -319,7 +321,7 @@ umass_scsipi_request(struct scsipi_chann cmdlen, xs->data, xs->datalen, dir, xs->timeout, USBD_SYNCHRONOUS, - 0, xs); + umass_null_cb, xs); DPRINTFM(UDMASS_SCSI, "done err=%jd", scbus->sc_sync_status, 0, 0, 0); switch (scbus->sc_sync_status) { @@ -419,6 +421,12 @@ umass_scsipi_getgeom(struct scsipi_perip } Static void +umass_null_cb(struct umass_softc *sc, void *priv, int residue, int status) +{ + UMASSHIST_FUNC(); UMASSHIST_CALLED(); +} + +Static void umass_scsipi_cb(struct umass_softc *sc, void *priv, int residue, int status) { UMASSHIST_FUNC(); UMASSHIST_CALLED();