aboutsummaryrefslogtreecommitdiff
path: root/sys/cam/cam_sim.c
diff options
context:
space:
mode:
authorBjoern A. Zeeb <bz@FreeBSD.org>2020-09-04 18:18:05 +0000
committerBjoern A. Zeeb <bz@FreeBSD.org>2020-09-04 18:18:05 +0000
commit7a7ca53f69ac36516d29847f3323d17ccb3ac4fe (patch)
treead818957992bcbc89ff7a48be1240a94db3605c4 /sys/cam/cam_sim.c
parent1bd641af2bce67404de6dc26b7aa5d3175c22e47 (diff)
downloadsrc-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.c41
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)