From owner-svn-src-all@FreeBSD.ORG Mon Apr 1 13:18:35 2013 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 48CF02F2; Mon, 1 Apr 2013 13:18:35 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 3B7EB328; Mon, 1 Apr 2013 13:18:35 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r31DIZHP073779; Mon, 1 Apr 2013 13:18:35 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r31DIYSt073777; Mon, 1 Apr 2013 13:18:34 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201304011318.r31DIYSt073777@svn.freebsd.org> From: Alexander Motin Date: Mon, 1 Apr 2013 13:18:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r248973 - head/sys/dev/tws X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Apr 2013 13:18:35 -0000 Author: mav Date: Mon Apr 1 13:18:34 2013 New Revision: 248973 URL: http://svnweb.freebsd.org/changeset/base/248973 Log: Slightly tune locking to not call xpt_alloc_ccb() that is allowed to sleep while holding the SIM mutex. Modified: head/sys/dev/tws/tws_cam.c head/sys/dev/tws/tws_user.c Modified: head/sys/dev/tws/tws_cam.c ============================================================================== --- head/sys/dev/tws/tws_cam.c Mon Apr 1 13:17:28 2013 (r248972) +++ head/sys/dev/tws/tws_cam.c Mon Apr 1 13:18:34 2013 (r248973) @@ -217,17 +217,16 @@ tws_bus_scan(struct tws_softc *sc) TWS_TRACE_DEBUG(sc, "entry", sc, 0); if (!(sc->sim)) return(ENXIO); - mtx_assert(&sc->sim_lock, MA_OWNED); - if ((ccb = xpt_alloc_ccb()) == NULL) - return(ENOMEM); - + ccb = xpt_alloc_ccb(); + mtx_lock(&sc->sim_lock); if (xpt_create_path(&ccb->ccb_h.path, xpt_periph, cam_sim_path(sc->sim), CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD) != CAM_REQ_CMP) { + mtx_unlock(&sc->sim_lock); xpt_free_ccb(ccb); return(EIO); } xpt_rescan(ccb); - + mtx_unlock(&sc->sim_lock); return(0); } Modified: head/sys/dev/tws/tws_user.c ============================================================================== --- head/sys/dev/tws/tws_user.c Mon Apr 1 13:17:28 2013 (r248972) +++ head/sys/dev/tws/tws_user.c Mon Apr 1 13:18:34 2013 (r248973) @@ -73,9 +73,7 @@ tws_ioctl(struct cdev *dev, u_long cmd, break; case TWS_IOCTL_SCAN_BUS : TWS_TRACE_DEBUG(sc, "scan-bus", 0, 0); - mtx_lock(&sc->sim_lock); error = tws_bus_scan(sc); - mtx_unlock(&sc->sim_lock); break; default : TWS_TRACE_DEBUG(sc, "ioctl-aen", cmd, buf);