Date: Wed, 21 Jan 2015 20:02:17 +0000 (UTC) From: Will Andrews <will@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r277507 - head/sys/dev/firewire Message-ID: <201501212002.t0LK2HEK099437@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: will Date: Wed Jan 21 20:02:16 2015 New Revision: 277507 URL: https://svnweb.freebsd.org/changeset/base/277507 Log: Fix a FWXF_INQ race in the firewire driver. sys/dev/firewire/firewire.c: In fw_xfer_unload() expand lock coverage so that the test for FWXF_INQ doesn't race with it being cleared in another thread. Submitted by: gibbs MFC after: 1 week Sponsored by: Spectra Logic MFSpectraBSD: 1110207 on 2015/01/02 Modified: head/sys/dev/firewire/firewire.c Modified: head/sys/dev/firewire/firewire.c ============================================================================== --- head/sys/dev/firewire/firewire.c Wed Jan 21 19:59:09 2015 (r277506) +++ head/sys/dev/firewire/firewire.c Wed Jan 21 20:02:16 2015 (r277507) @@ -1022,9 +1022,7 @@ static void fw_tl_free(struct firewire_comm *fc, struct fw_xfer *xfer) { struct fw_xfer *txfer; - int s; - s = splfw(); mtx_lock(&fc->tlabel_lock); if (xfer->tl < 0) { mtx_unlock(&fc->tlabel_lock); @@ -1042,14 +1040,12 @@ fw_tl_free(struct firewire_comm *fc, str fw_dump_hdr(&xfer->recv.hdr, "recv"); kdb_backtrace(); mtx_unlock(&fc->tlabel_lock); - splx(s); return; } STAILQ_REMOVE(&fc->tlabels[xfer->tl], xfer, fw_xfer, tlabel); xfer->tl = -1; mtx_unlock(&fc->tlabel_lock); - splx(s); return; } @@ -1157,22 +1153,18 @@ fw_xfer_done(struct fw_xfer *xfer) void fw_xfer_unload(struct fw_xfer *xfer) { - int s; if (xfer == NULL) return; + FW_GLOCK(xfer->fc); if (xfer->flag & FWXF_INQ) { - printf("fw_xfer_free FWXF_INQ\n"); - s = splfw(); - FW_GLOCK(xfer->fc); STAILQ_REMOVE(&xfer->q->q, xfer, fw_xfer, link); xfer->flag &= ~FWXF_INQ; #if 0 xfer->q->queued--; #endif - FW_GUNLOCK(xfer->fc); - splx(s); } + FW_GUNLOCK(xfer->fc); if (xfer->fc != NULL) { /* * Ensure that any tlabel owner can't access this
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201501212002.t0LK2HEK099437>