Author: jimharris
Date: Thu Oct 18 00:41:31 2012
New Revision: 241662
URL: http://svn.freebsd.org/changeset/base/241662

Log:
  Simplify how the qpair lock is acquired and released.
  
  Sponsored by: Intel

Modified:
  head/sys/dev/nvme/nvme_ctrlr.c
  head/sys/dev/nvme/nvme_qpair.c

Modified: head/sys/dev/nvme/nvme_ctrlr.c
==============================================================================
--- head/sys/dev/nvme/nvme_ctrlr.c      Thu Oct 18 00:40:40 2012        
(r241661)
+++ head/sys/dev/nvme/nvme_ctrlr.c      Thu Oct 18 00:41:31 2012        
(r241662)
@@ -802,6 +802,8 @@ nvme_ctrlr_submit_admin_request(struct n
 
        qpair = &ctrlr->adminq;
 
+       mtx_lock(&qpair->lock);
+
        tr = nvme_qpair_allocate_tracker(qpair);
 
        tr->req = req;
@@ -814,6 +816,8 @@ nvme_ctrlr_submit_admin_request(struct n
                        panic("bus_dmamap_load returned non-zero!\n");
        } else
                nvme_qpair_submit_cmd(tr->qpair, tr);
+
+       mtx_unlock(&qpair->lock);
 }
 
 void
@@ -829,6 +833,8 @@ nvme_ctrlr_submit_io_request(struct nvme
        else
                qpair = &ctrlr->ioq[0];
 
+       mtx_lock(&qpair->lock);
+
        tr = nvme_qpair_allocate_tracker(qpair);
 
        tr->req = req;
@@ -850,4 +856,6 @@ nvme_ctrlr_submit_io_request(struct nvme
                if (err != 0)
                        panic("bus_dmamap_load returned non-zero!\n");
        }
+
+       mtx_unlock(&qpair->lock);
 }

Modified: head/sys/dev/nvme/nvme_qpair.c
==============================================================================
--- head/sys/dev/nvme/nvme_qpair.c      Thu Oct 18 00:40:40 2012        
(r241661)
+++ head/sys/dev/nvme/nvme_qpair.c      Thu Oct 18 00:41:31 2012        
(r241662)
@@ -79,8 +79,6 @@ nvme_qpair_allocate_tracker(struct nvme_
 {
        struct nvme_tracker     *tr;
 
-       mtx_lock(&qpair->lock);
-
        tr = SLIST_FIRST(&qpair->free_tr);
        if (tr == NULL) {
                /* 
@@ -89,7 +87,6 @@ nvme_qpair_allocate_tracker(struct nvme_
                 *  into the qpair's active tracker array.
                 */
                if (qpair->num_tr == qpair->num_entries) {
-                       mtx_unlock(&qpair->lock);
                        return (NULL);
                }
 
@@ -97,7 +94,6 @@ nvme_qpair_allocate_tracker(struct nvme_
                    M_ZERO | M_NOWAIT);
 
                if (tr == NULL) {
-                       mtx_unlock(&qpair->lock);
                        return (NULL);
                }
 
@@ -160,7 +156,6 @@ nvme_qpair_process_completions(struct nv
                callout_stop(&tr->timer);
 
                if (retry)
-                       /* nvme_qpair_submit_cmd() will release the lock. */
                        nvme_qpair_submit_cmd(qpair, tr);
                else {
                        if (req->payload_size > 0 || req->uio != NULL)
@@ -169,10 +164,10 @@ nvme_qpair_process_completions(struct nv
 
                        nvme_free_request(req);
                        SLIST_INSERT_HEAD(&qpair->free_tr, tr, slist);
-
-                       mtx_unlock(&qpair->lock);
                }
 
+               mtx_unlock(&qpair->lock);
+
                if (++qpair->cq_head == qpair->num_entries) {
                        qpair->cq_head = 0;
                        qpair->phase = !qpair->phase;
@@ -410,6 +405,4 @@ nvme_qpair_submit_cmd(struct nvme_qpair 
            qpair->sq_tail);
 
        qpair->num_cmds++;
-
-       mtx_unlock(&qpair->lock);
 }
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to