Commit 2c45688f authored by Matthias Kaehlcke's avatar Matthias Kaehlcke Committed by Roland Dreier

IB/ipath: Convert ipath_eep_sem semaphore to a mutex

Signed-off-by: default avatarMatthias Kaehlcke <matthias.kaehlcke@gmail.com>
Acked-by: default avatarMichael Albaugh <Michael.Albaugh@qlogic.com>
Tested-by: default avatarArthur Jones <arthur.jones@qlogic.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
parent 727792da
...@@ -510,10 +510,10 @@ int ipath_eeprom_read(struct ipath_devdata *dd, u8 eeprom_offset, ...@@ -510,10 +510,10 @@ int ipath_eeprom_read(struct ipath_devdata *dd, u8 eeprom_offset,
{ {
int ret; int ret;
ret = down_interruptible(&dd->ipath_eep_sem); ret = mutex_lock_interruptible(&dd->ipath_eep_lock);
if (!ret) { if (!ret) {
ret = ipath_eeprom_internal_read(dd, eeprom_offset, buff, len); ret = ipath_eeprom_internal_read(dd, eeprom_offset, buff, len);
up(&dd->ipath_eep_sem); mutex_unlock(&dd->ipath_eep_lock);
} }
return ret; return ret;
...@@ -524,10 +524,10 @@ int ipath_eeprom_write(struct ipath_devdata *dd, u8 eeprom_offset, ...@@ -524,10 +524,10 @@ int ipath_eeprom_write(struct ipath_devdata *dd, u8 eeprom_offset,
{ {
int ret; int ret;
ret = down_interruptible(&dd->ipath_eep_sem); ret = mutex_lock_interruptible(&dd->ipath_eep_lock);
if (!ret) { if (!ret) {
ret = ipath_eeprom_internal_write(dd, eeprom_offset, buff, len); ret = ipath_eeprom_internal_write(dd, eeprom_offset, buff, len);
up(&dd->ipath_eep_sem); mutex_unlock(&dd->ipath_eep_lock);
} }
return ret; return ret;
...@@ -616,9 +616,9 @@ void ipath_get_eeprom_info(struct ipath_devdata *dd) ...@@ -616,9 +616,9 @@ void ipath_get_eeprom_info(struct ipath_devdata *dd)
goto bail; goto bail;
} }
down(&dd->ipath_eep_sem); mutex_lock(&dd->ipath_eep_lock);
eep_stat = ipath_eeprom_internal_read(dd, 0, buf, len); eep_stat = ipath_eeprom_internal_read(dd, 0, buf, len);
up(&dd->ipath_eep_sem); mutex_unlock(&dd->ipath_eep_lock);
if (eep_stat) { if (eep_stat) {
ipath_dev_err(dd, "Failed reading GUID from eeprom\n"); ipath_dev_err(dd, "Failed reading GUID from eeprom\n");
...@@ -764,14 +764,14 @@ int ipath_update_eeprom_log(struct ipath_devdata *dd) ...@@ -764,14 +764,14 @@ int ipath_update_eeprom_log(struct ipath_devdata *dd)
/* Grab semaphore and read current EEPROM. If we get an /* Grab semaphore and read current EEPROM. If we get an
* error, let go, but if not, keep it until we finish write. * error, let go, but if not, keep it until we finish write.
*/ */
ret = down_interruptible(&dd->ipath_eep_sem); ret = mutex_lock_interruptible(&dd->ipath_eep_lock);
if (ret) { if (ret) {
ipath_dev_err(dd, "Unable to acquire EEPROM for logging\n"); ipath_dev_err(dd, "Unable to acquire EEPROM for logging\n");
goto free_bail; goto free_bail;
} }
ret = ipath_eeprom_internal_read(dd, 0, buf, len); ret = ipath_eeprom_internal_read(dd, 0, buf, len);
if (ret) { if (ret) {
up(&dd->ipath_eep_sem); mutex_unlock(&dd->ipath_eep_lock);
ipath_dev_err(dd, "Unable read EEPROM for logging\n"); ipath_dev_err(dd, "Unable read EEPROM for logging\n");
goto free_bail; goto free_bail;
} }
...@@ -779,7 +779,7 @@ int ipath_update_eeprom_log(struct ipath_devdata *dd) ...@@ -779,7 +779,7 @@ int ipath_update_eeprom_log(struct ipath_devdata *dd)
csum = flash_csum(ifp, 0); csum = flash_csum(ifp, 0);
if (csum != ifp->if_csum) { if (csum != ifp->if_csum) {
up(&dd->ipath_eep_sem); mutex_unlock(&dd->ipath_eep_lock);
ipath_dev_err(dd, "EEPROM cks err (0x%02X, S/B 0x%02X)\n", ipath_dev_err(dd, "EEPROM cks err (0x%02X, S/B 0x%02X)\n",
csum, ifp->if_csum); csum, ifp->if_csum);
ret = 1; ret = 1;
...@@ -849,7 +849,7 @@ int ipath_update_eeprom_log(struct ipath_devdata *dd) ...@@ -849,7 +849,7 @@ int ipath_update_eeprom_log(struct ipath_devdata *dd)
csum = flash_csum(ifp, 1); csum = flash_csum(ifp, 1);
ret = ipath_eeprom_internal_write(dd, 0, buf, hi_water + 1); ret = ipath_eeprom_internal_write(dd, 0, buf, hi_water + 1);
} }
up(&dd->ipath_eep_sem); mutex_unlock(&dd->ipath_eep_lock);
if (ret) if (ret)
ipath_dev_err(dd, "Failed updating EEPROM\n"); ipath_dev_err(dd, "Failed updating EEPROM\n");
......
...@@ -348,7 +348,7 @@ static int init_chip_first(struct ipath_devdata *dd, ...@@ -348,7 +348,7 @@ static int init_chip_first(struct ipath_devdata *dd,
spin_lock_init(&dd->ipath_gpio_lock); spin_lock_init(&dd->ipath_gpio_lock);
spin_lock_init(&dd->ipath_eep_st_lock); spin_lock_init(&dd->ipath_eep_st_lock);
sema_init(&dd->ipath_eep_sem, 1); mutex_init(&dd->ipath_eep_lock);
done: done:
*pdp = pd; *pdp = pd;
......
...@@ -41,6 +41,7 @@ ...@@ -41,6 +41,7 @@
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/dma-mapping.h> #include <linux/dma-mapping.h>
#include <linux/mutex.h>
#include <asm/io.h> #include <asm/io.h>
#include <rdma/ib_verbs.h> #include <rdma/ib_verbs.h>
...@@ -616,7 +617,7 @@ struct ipath_devdata { ...@@ -616,7 +617,7 @@ struct ipath_devdata {
/* control access to actual counters, timer */ /* control access to actual counters, timer */
spinlock_t ipath_eep_st_lock; spinlock_t ipath_eep_st_lock;
/* control high-level access to EEPROM */ /* control high-level access to EEPROM */
struct semaphore ipath_eep_sem; struct mutex ipath_eep_lock;
/* Below inc'd by ipath_snap_cntrs(), locked by ipath_eep_st_lock */ /* Below inc'd by ipath_snap_cntrs(), locked by ipath_eep_st_lock */
uint64_t ipath_traffic_wds; uint64_t ipath_traffic_wds;
/* active time is kept in seconds, but logged in hours */ /* active time is kept in seconds, but logged in hours */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment