Author: bz
Date: Thu Nov  5 11:19:31 2020
New Revision: 367367
URL: https://svnweb.freebsd.org/changeset/base/367367

Log:
  MFC r365333:
  
    cam_sim: harmonize code related to acquiring a mtx
  
    cam_sim_free(), cam_sim_release(), and cam_sim_hold() all assign
    a mtx variable during declaration and then if NULL or the mtx is
    held may re-asign the variable and/or acquire/release a lock.
  
    Harmonize the code, avoiding double assignments and make it look
    the same for all three function (with cam_sim_free() not needing
    an extra case).
  
    No functional changes intended.

Modified:
  stable/12/sys/cam/cam_sim.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/cam/cam_sim.c
==============================================================================
--- stable/12/sys/cam/cam_sim.c Thu Nov  5 11:11:50 2020        (r367366)
+++ stable/12/sys/cam/cam_sim.c Thu Nov  5 11:19:31 2020        (r367367)
@@ -103,14 +103,15 @@ cam_sim_alloc(sim_action_func sim_action, sim_poll_fun
 void
 cam_sim_free(struct cam_sim *sim, int free_devq)
 {
-       struct mtx *mtx = sim->mtx;
+       struct mtx *mtx;
        int error;
 
-       if (mtx) {
-               mtx_assert(mtx, MA_OWNED);
-       } else {
+       if (sim->mtx == NULL) {
                mtx = &cam_sim_free_mtx;
                mtx_lock(mtx);
+       } else {
+               mtx = sim->mtx;
+               mtx_assert(mtx, MA_OWNED);
        }
        sim->refcount--;
        if (sim->refcount > 0) {
@@ -118,7 +119,7 @@ cam_sim_free(struct cam_sim *sim, int free_devq)
                KASSERT(error == 0, ("invalid error value for msleep(9)"));
        }
        KASSERT(sim->refcount == 0, ("sim->refcount == 0"));
-       if (sim->mtx == NULL)
+       if (mtx == &cam_sim_free_mtx)   /* sim->mtx == NULL */
                mtx_unlock(mtx);
 
        if (free_devq)
@@ -129,17 +130,16 @@ cam_sim_free(struct cam_sim *sim, int free_devq)
 void
 cam_sim_release(struct cam_sim *sim)
 {
-       struct mtx *mtx = sim->mtx;
+       struct mtx *mtx;
 
-       if (mtx) {
-               if (!mtx_owned(mtx))
-                       mtx_lock(mtx);
-               else
-                       mtx = NULL;
-       } else {
+       if (sim->mtx == NULL)
                mtx = &cam_sim_free_mtx;
+       else if (!mtx_owned(sim->mtx))
+               mtx = sim->mtx;
+       else
+               mtx = NULL;     /* We hold the lock. */
+       if (mtx)
                mtx_lock(mtx);
-       }
        KASSERT(sim->refcount >= 1, ("sim->refcount >= 1"));
        sim->refcount--;
        if (sim->refcount == 0)
@@ -151,17 +151,16 @@ cam_sim_release(struct cam_sim *sim)
 void
 cam_sim_hold(struct cam_sim *sim)
 {
-       struct mtx *mtx = sim->mtx;
+       struct mtx *mtx;
 
-       if (mtx) {
-               if (!mtx_owned(mtx))
-                       mtx_lock(mtx);
-               else
-                       mtx = NULL;
-       } else {
+       if (sim->mtx == NULL)
                mtx = &cam_sim_free_mtx;
+       else if (!mtx_owned(sim->mtx))
+               mtx = sim->mtx;
+       else
+               mtx = NULL;     /* We hold the lock. */
+       if (mtx)
                mtx_lock(mtx);
-       }
        KASSERT(sim->refcount >= 1, ("sim->refcount >= 1"));
        sim->refcount++;
        if (mtx)
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to