svn commit: r252709 - head/sys/dev/virtio/scsi

Bryan Venteicher bryanv at FreeBSD.org
Thu Jul 4 18:00:27 UTC 2013


Author: bryanv
Date: Thu Jul  4 18:00:27 2013
New Revision: 252709
URL: http://svnweb.freebsd.org/changeset/base/252709

Log:
  Merge virtio_scsi change from projects/virtio
  
  r252680:
      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.
  
  MFC after:	1 month

Modified:
  head/sys/dev/virtio/scsi/virtio_scsi.c

Modified: head/sys/dev/virtio/scsi/virtio_scsi.c
==============================================================================
--- head/sys/dev/virtio/scsi/virtio_scsi.c	Thu Jul  4 17:59:09 2013	(r252708)
+++ head/sys/dev/virtio/scsi/virtio_scsi.c	Thu Jul  4 18:00:27 2013	(r252709)
@@ -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;


More information about the svn-src-all mailing list