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();