From owner-p4-projects@FreeBSD.ORG Mon Sep 15 21:13:45 2008 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 2E9AF1065696; Mon, 15 Sep 2008 21:13:45 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E71291065690 for ; Mon, 15 Sep 2008 21:13:44 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id D2E158FC1B for ; Mon, 15 Sep 2008 21:13:44 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id m8FLDiPC015515 for ; Mon, 15 Sep 2008 21:13:44 GMT (envelope-from hselasky@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id m8FLDijY015513 for perforce@freebsd.org; Mon, 15 Sep 2008 21:13:44 GMT (envelope-from hselasky@FreeBSD.org) Date: Mon, 15 Sep 2008 21:13:44 GMT Message-Id: <200809152113.m8FLDijY015513@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky To: Perforce Change Reviews Cc: Subject: PERFORCE change 149828 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Sep 2008 21:13:45 -0000 http://perforce.freebsd.org/chv.cgi?CH=149828 Change 149828 by hselasky@hselasky_laptop001 on 2008/09/15 21:12:56 Some additional mass storage fixes. Affected files ... .. //depot/projects/usb/src/sys/dev/usb2/storage/umass2.c#12 edit Differences ... ==== //depot/projects/usb/src/sys/dev/usb2/storage/umass2.c#12 (text+ko) ==== @@ -167,6 +167,7 @@ #define DPRINTF(...) do { } while (0) #endif +#define UMASS_GONE ((struct umass_softc *)1) #define UMASS_MAXUNIT 64 /* XXX temporary */ #define UMASS_BULK_SIZE (1 << 17) @@ -2754,6 +2755,9 @@ if (xpt_bus_deregister(cam_sim_path(sc->sc_sim))) { #if 0 /* NOTYET */ cam_sim_free(sc->sc_sim, /* free_devq */ TRUE); +#else + /* accessing the softc is not possible after this */ + sc->sc_sim->softc = UMASS_GONE; #endif } else { panic("%s: CAM layer is busy!\n", @@ -2773,6 +2777,11 @@ { struct umass_softc *sc = (struct umass_softc *)sim->softc; + if (sc == UMASS_GONE) { + ccb->ccb_h.status = CAM_TID_INVALID; + xpt_done(ccb); + return; + } if (sc) { #if (__FreeBSD_version < 700037) mtx_lock(&umass_mtx); @@ -3070,6 +3079,9 @@ { struct umass_softc *sc = (struct umass_softc *)sim->softc; + if (sc == UMASS_GONE) + return; + DPRINTF(sc, UDMASS_SCSI, "CAM poll\n"); usb2_do_poll(sc->sc_xfer, UMASS_T_MAX);