From owner-svn-src-projects@FreeBSD.ORG Thu Jul 4 04:20:00 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 51CFAAA8; Thu, 4 Jul 2013 04:20:00 +0000 (UTC) (envelope-from bryanv@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 4382F1C38; Thu, 4 Jul 2013 04:20:00 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r644K0JW048572; Thu, 4 Jul 2013 04:20:00 GMT (envelope-from bryanv@svn.freebsd.org) Received: (from bryanv@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r644K031048570; Thu, 4 Jul 2013 04:20:00 GMT (envelope-from bryanv@svn.freebsd.org) Message-Id: <201307040420.r644K031048570@svn.freebsd.org> From: Bryan Venteicher Date: Thu, 4 Jul 2013 04:20:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r252680 - projects/virtio/sys/dev/virtio/scsi X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jul 2013 04:20:00 -0000 Author: bryanv Date: Thu Jul 4 04:19:59 2013 New Revision: 252680 URL: http://svnweb.freebsd.org/changeset/base/252680 Log: virtio_scsi: Fix SIM lock not owned panic The CAM locking requirements of registering an async callback has changed so the SIM lock must be held. Remove code that explicitly dropped the lock around the register. Also return CAM_SEL_TIMEOUT instead of CAM_TID_INVALID for bad targets to avoid a lot console spam during bus scans. Modified: projects/virtio/sys/dev/virtio/scsi/virtio_scsi.c Modified: projects/virtio/sys/dev/virtio/scsi/virtio_scsi.c ============================================================================== --- projects/virtio/sys/dev/virtio/scsi/virtio_scsi.c Thu Jul 4 03:24:58 2013 (r252679) +++ projects/virtio/sys/dev/virtio/scsi/virtio_scsi.c Thu Jul 4 04:19:59 2013 (r252680) @@ -542,19 +542,14 @@ vtscsi_register_cam(struct vtscsi_softc goto fail; } - VTSCSI_UNLOCK(sc); - - /* - * The async register apparently needs to be done without - * the lock held, otherwise it can recurse on the lock. - */ if (vtscsi_register_async(sc) != CAM_REQ_CMP) { error = EIO; device_printf(dev, "cannot register async callback\n"); - VTSCSI_LOCK(sc); goto fail; } + VTSCSI_UNLOCK(sc); + return (0); fail: @@ -622,8 +617,6 @@ vtscsi_register_async(struct vtscsi_soft { struct ccb_setasync csa; - VTSCSI_LOCK_NOTOWNED(sc); - xpt_setup_ccb(&csa.ccb_h, sc->vtscsi_path, 5); csa.ccb_h.func_code = XPT_SASYNC_CB; csa.event_enable = AC_LOST_DEVICE | AC_FOUND_DEVICE; @@ -1238,7 +1231,7 @@ vtscsi_scsi_cmd_cam_status(struct virtio status = CAM_REQ_ABORTED; break; case VIRTIO_SCSI_S_BAD_TARGET: - status = CAM_TID_INVALID; + status = CAM_SEL_TIMEOUT; break; case VIRTIO_SCSI_S_RESET: status = CAM_SCSI_BUS_RESET;