diff options
author | Bjoern A. Zeeb <bz@FreeBSD.org> | 2020-09-04 18:18:05 +0000 |
---|---|---|
committer | Bjoern A. Zeeb <bz@FreeBSD.org> | 2020-09-04 18:18:05 +0000 |
commit | 7a7ca53f69ac36516d29847f3323d17ccb3ac4fe (patch) | |
tree | ad818957992bcbc89ff7a48be1240a94db3605c4 /sys/cam/cam_sim.c | |
parent | 1bd641af2bce67404de6dc26b7aa5d3175c22e47 (diff) | |
download | src-7a7ca53f69ac36516d29847f3323d17ccb3ac4fe.tar.gz src-7a7ca53f69ac36516d29847f3323d17ccb3ac4fe.zip |
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.
Reviewed by: imp; no-objections by: mav
MFC after: 3 days
Differential Revision: https://reviews.freebsd.org/D26286
Notes
Notes:
svn path=/head/; revision=365333
Diffstat (limited to 'sys/cam/cam_sim.c')
-rw-r--r-- | sys/cam/cam_sim.c | 41 |
1 files changed, 20 insertions, 21 deletions
diff --git a/sys/cam/cam_sim.c b/sys/cam/cam_sim.c index 7527928ce2a7..317ede94e305 100644 --- a/sys/cam/cam_sim.c +++ b/sys/cam/cam_sim.c @@ -124,14 +124,15 @@ cam_sim_alloc_dev(sim_action_func sim_action, sim_poll_func sim_poll, 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) { @@ -139,7 +140,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) @@ -150,17 +151,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) @@ -172,17 +172,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) |