mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-16 09:56:46 +00:00
IB/ipath: Convert ipath_eep_sem semaphore to a mutex
Signed-off-by: Matthias Kaehlcke <matthias.kaehlcke@gmail.com> Acked-by: Michael Albaugh <Michael.Albaugh@qlogic.com> Tested-by: Arthur Jones <arthur.jones@qlogic.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
parent
727792da2b
commit
2c45688fae
@ -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,
|
|||||||
{
|
{
|
||||||
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)
|
|||||||
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)
|
|||||||
/* 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)
|
|||||||
|
|
||||||
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)
|
|||||||
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,
|
|||||||
|
|
||||||
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 @@
|
|||||||
#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 {
|
|||||||
/* 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 */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user