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
This commit is contained in:
parent
1bd641af2b
commit
7a7ca53f69
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=365333
@ -124,14 +124,15 @@ cam_sim_alloc_dev(sim_action_func sim_action, sim_poll_func sim_poll,
|
|||||||
void
|
void
|
||||||
cam_sim_free(struct cam_sim *sim, int free_devq)
|
cam_sim_free(struct cam_sim *sim, int free_devq)
|
||||||
{
|
{
|
||||||
struct mtx *mtx = sim->mtx;
|
struct mtx *mtx;
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
if (mtx) {
|
if (sim->mtx == NULL) {
|
||||||
mtx_assert(mtx, MA_OWNED);
|
|
||||||
} else {
|
|
||||||
mtx = &cam_sim_free_mtx;
|
mtx = &cam_sim_free_mtx;
|
||||||
mtx_lock(mtx);
|
mtx_lock(mtx);
|
||||||
|
} else {
|
||||||
|
mtx = sim->mtx;
|
||||||
|
mtx_assert(mtx, MA_OWNED);
|
||||||
}
|
}
|
||||||
sim->refcount--;
|
sim->refcount--;
|
||||||
if (sim->refcount > 0) {
|
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(error == 0, ("invalid error value for msleep(9)"));
|
||||||
}
|
}
|
||||||
KASSERT(sim->refcount == 0, ("sim->refcount == 0"));
|
KASSERT(sim->refcount == 0, ("sim->refcount == 0"));
|
||||||
if (sim->mtx == NULL)
|
if (mtx == &cam_sim_free_mtx) /* sim->mtx == NULL */
|
||||||
mtx_unlock(mtx);
|
mtx_unlock(mtx);
|
||||||
|
|
||||||
if (free_devq)
|
if (free_devq)
|
||||||
@ -150,17 +151,16 @@ cam_sim_free(struct cam_sim *sim, int free_devq)
|
|||||||
void
|
void
|
||||||
cam_sim_release(struct cam_sim *sim)
|
cam_sim_release(struct cam_sim *sim)
|
||||||
{
|
{
|
||||||
struct mtx *mtx = sim->mtx;
|
struct mtx *mtx;
|
||||||
|
|
||||||
if (mtx) {
|
if (sim->mtx == NULL)
|
||||||
if (!mtx_owned(mtx))
|
|
||||||
mtx_lock(mtx);
|
|
||||||
else
|
|
||||||
mtx = NULL;
|
|
||||||
} else {
|
|
||||||
mtx = &cam_sim_free_mtx;
|
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);
|
mtx_lock(mtx);
|
||||||
}
|
|
||||||
KASSERT(sim->refcount >= 1, ("sim->refcount >= 1"));
|
KASSERT(sim->refcount >= 1, ("sim->refcount >= 1"));
|
||||||
sim->refcount--;
|
sim->refcount--;
|
||||||
if (sim->refcount == 0)
|
if (sim->refcount == 0)
|
||||||
@ -172,17 +172,16 @@ cam_sim_release(struct cam_sim *sim)
|
|||||||
void
|
void
|
||||||
cam_sim_hold(struct cam_sim *sim)
|
cam_sim_hold(struct cam_sim *sim)
|
||||||
{
|
{
|
||||||
struct mtx *mtx = sim->mtx;
|
struct mtx *mtx;
|
||||||
|
|
||||||
if (mtx) {
|
if (sim->mtx == NULL)
|
||||||
if (!mtx_owned(mtx))
|
|
||||||
mtx_lock(mtx);
|
|
||||||
else
|
|
||||||
mtx = NULL;
|
|
||||||
} else {
|
|
||||||
mtx = &cam_sim_free_mtx;
|
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);
|
mtx_lock(mtx);
|
||||||
}
|
|
||||||
KASSERT(sim->refcount >= 1, ("sim->refcount >= 1"));
|
KASSERT(sim->refcount >= 1, ("sim->refcount >= 1"));
|
||||||
sim->refcount++;
|
sim->refcount++;
|
||||||
if (mtx)
|
if (mtx)
|
||||||
|
Loading…
Reference in New Issue
Block a user