svn commit: r254891 - in projects/camlock/sys: cam dev/ahci dev/ata dev/mvs dev/siis

Alexander Motin mav at FreeBSD.org
Sun Aug 25 23:16:54 UTC 2013


Author: mav
Date: Sun Aug 25 23:16:52 2013
New Revision: 254891
URL: http://svnweb.freebsd.org/changeset/base/254891

Log:
  Since command completion no longer needs SIM lock and even requires one
  to be dropped during processing, move xpt_batch_start()/xpt_batch_done()
  out of it and assert that.

Modified:
  projects/camlock/sys/cam/cam_xpt.c
  projects/camlock/sys/dev/ahci/ahci.c
  projects/camlock/sys/dev/ata/ata-all.c
  projects/camlock/sys/dev/mvs/mvs.c
  projects/camlock/sys/dev/siis/siis.c

Modified: projects/camlock/sys/cam/cam_xpt.c
==============================================================================
--- projects/camlock/sys/cam/cam_xpt.c	Sun Aug 25 22:18:05 2013	(r254890)
+++ projects/camlock/sys/cam/cam_xpt.c	Sun Aug 25 23:16:52 2013	(r254891)
@@ -4411,7 +4411,7 @@ xpt_batch_done(struct cam_sim *sim)
 {
 	struct ccb_hdr *ccb_h;
 
-	CAM_SIM_UNLOCK(sim);
+	mtx_assert(sim->mtx, MA_NOTOWNED);
 	mtx_lock(&sim->sim_doneq_mtx);
 	KASSERT((sim->sim_doneq_flags & CAM_SIM_DQ_BATCH) != 0,
 	    ("Batch flag was not set"));
@@ -4424,7 +4424,6 @@ xpt_batch_done(struct cam_sim *sim)
 		mtx_lock(&sim->sim_doneq_mtx);
 	}
 	mtx_unlock(&sim->sim_doneq_mtx);
-	CAM_SIM_LOCK(sim);
 }
 
 union ccb *

Modified: projects/camlock/sys/dev/ahci/ahci.c
==============================================================================
--- projects/camlock/sys/dev/ahci/ahci.c	Sun Aug 25 22:18:05 2013	(r254890)
+++ projects/camlock/sys/dev/ahci/ahci.c	Sun Aug 25 23:16:52 2013	(r254891)
@@ -1469,11 +1469,11 @@ ahci_ch_intr_locked(void *data)
 	device_t dev = (device_t)data;
 	struct ahci_channel *ch = device_get_softc(dev);
 
-	mtx_lock(&ch->mtx);
 	xpt_batch_start(ch->sim);
+	mtx_lock(&ch->mtx);
 	ahci_ch_intr(data);
-	xpt_batch_done(ch->sim);
 	mtx_unlock(&ch->mtx);
+	xpt_batch_done(ch->sim);
 }
 
 static void

Modified: projects/camlock/sys/dev/ata/ata-all.c
==============================================================================
--- projects/camlock/sys/dev/ata/ata-all.c	Sun Aug 25 22:18:05 2013	(r254890)
+++ projects/camlock/sys/dev/ata/ata-all.c	Sun Aug 25 23:16:52 2013	(r254891)
@@ -352,11 +352,11 @@ ata_interrupt(void *data)
 {
     struct ata_channel *ch = (struct ata_channel *)data;
 
-    mtx_lock(&ch->state_mtx);
     xpt_batch_start(ch->sim);
+    mtx_lock(&ch->state_mtx);
     ata_interrupt_locked(data);
-    xpt_batch_done(ch->sim);
     mtx_unlock(&ch->state_mtx);
+    xpt_batch_done(ch->sim);
 }
 
 static void

Modified: projects/camlock/sys/dev/mvs/mvs.c
==============================================================================
--- projects/camlock/sys/dev/mvs/mvs.c	Sun Aug 25 22:18:05 2013	(r254890)
+++ projects/camlock/sys/dev/mvs/mvs.c	Sun Aug 25 23:16:52 2013	(r254891)
@@ -653,11 +653,11 @@ mvs_ch_intr_locked(void *data)
 	device_t dev = (device_t)arg->arg;
 	struct mvs_channel *ch = device_get_softc(dev);
 
-	mtx_lock(&ch->mtx);
 	xpt_batch_start(ch->sim);
+	mtx_lock(&ch->mtx);
 	mvs_ch_intr(data);
-	xpt_batch_done(ch->sim);
 	mtx_unlock(&ch->mtx);
+	xpt_batch_done(ch->sim);
 }
 
 static void

Modified: projects/camlock/sys/dev/siis/siis.c
==============================================================================
--- projects/camlock/sys/dev/siis/siis.c	Sun Aug 25 22:18:05 2013	(r254890)
+++ projects/camlock/sys/dev/siis/siis.c	Sun Aug 25 23:16:52 2013	(r254891)
@@ -837,11 +837,11 @@ siis_ch_intr_locked(void *data)
 	device_t dev = (device_t)data;
 	struct siis_channel *ch = device_get_softc(dev);
 
-	mtx_lock(&ch->mtx);
 	xpt_batch_start(ch->sim);
+	mtx_lock(&ch->mtx);
 	siis_ch_intr(data);
-	xpt_batch_done(ch->sim);
 	mtx_unlock(&ch->mtx);
+	xpt_batch_done(ch->sim);
 }
 
 static void


More information about the svn-src-projects mailing list