Skip to content

Commit

Permalink
IB/hfi1: Correct unnecessary acquisition of HW mutex
Browse files Browse the repository at this point in the history
Avoid acquiring already acquired hardware mutex and releasing
the unacquired one as these are redundant operations.
Add printouts for such situations to help detect potential errors
within the driver.

Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: Grzegorz Morys <grzegorz.morys@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
  • Loading branch information
Grzegorz Morys authored and Doug Ledford committed Oct 18, 2017
1 parent 621515d commit b65c204
Showing 1 changed file with 17 additions and 2 deletions.
19 changes: 17 additions & 2 deletions drivers/infiniband/hw/hfi1/firmware.c
Original file line number Diff line number Diff line change
Expand Up @@ -1387,7 +1387,14 @@ int acquire_hw_mutex(struct hfi1_devdata *dd)
unsigned long timeout;
int try = 0;
u8 mask = 1 << dd->hfi1_id;
u8 user;
u8 user = (u8)read_csr(dd, ASIC_CFG_MUTEX);

if (user == mask) {
dd_dev_info(dd,
"Hardware mutex already acquired, mutex mask %u\n",
(u32)mask);
return 0;
}

retry:
timeout = msecs_to_jiffies(HM_TIMEOUT) + jiffies;
Expand Down Expand Up @@ -1418,7 +1425,15 @@ int acquire_hw_mutex(struct hfi1_devdata *dd)

void release_hw_mutex(struct hfi1_devdata *dd)
{
write_csr(dd, ASIC_CFG_MUTEX, 0);
u8 mask = 1 << dd->hfi1_id;
u8 user = (u8)read_csr(dd, ASIC_CFG_MUTEX);

if (user != mask)
dd_dev_warn(dd,
"Unable to release hardware mutex, mutex mask %u, my mask %u\n",
(u32)user, (u32)mask);
else
write_csr(dd, ASIC_CFG_MUTEX, 0);
}

/* return the given resource bit(s) as a mask for the given HFI */
Expand Down

0 comments on commit b65c204

Please sign in to comment.