Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

IB/ipath: Convert ipath_eep_sem semaphore to a mutex

parent 727792da
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -510,10 +510,10 @@ int ipath_eeprom_read(struct ipath_devdata *dd, u8 eeprom_offset,
{
	int ret;

	ret = down_interruptible(&dd->ipath_eep_sem);
	ret = mutex_lock_interruptible(&dd->ipath_eep_lock);
	if (!ret) {
		ret = ipath_eeprom_internal_read(dd, eeprom_offset, buff, len);
		up(&dd->ipath_eep_sem);
		mutex_unlock(&dd->ipath_eep_lock);
	}

	return ret;
@@ -524,10 +524,10 @@ int ipath_eeprom_write(struct ipath_devdata *dd, u8 eeprom_offset,
{
	int ret;

	ret = down_interruptible(&dd->ipath_eep_sem);
	ret = mutex_lock_interruptible(&dd->ipath_eep_lock);
	if (!ret) {
		ret = ipath_eeprom_internal_write(dd, eeprom_offset, buff, len);
		up(&dd->ipath_eep_sem);
		mutex_unlock(&dd->ipath_eep_lock);
	}

	return ret;
@@ -616,9 +616,9 @@ void ipath_get_eeprom_info(struct ipath_devdata *dd)
		goto bail;
	}

	down(&dd->ipath_eep_sem);
	mutex_lock(&dd->ipath_eep_lock);
	eep_stat = ipath_eeprom_internal_read(dd, 0, buf, len);
	up(&dd->ipath_eep_sem);
	mutex_unlock(&dd->ipath_eep_lock);

	if (eep_stat) {
		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
	 * 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) {
		ipath_dev_err(dd, "Unable to acquire EEPROM for logging\n");
		goto free_bail;
	}
	ret = ipath_eeprom_internal_read(dd, 0, buf, len);
	if (ret) {
		up(&dd->ipath_eep_sem);
		mutex_unlock(&dd->ipath_eep_lock);
		ipath_dev_err(dd, "Unable read EEPROM for logging\n");
		goto free_bail;
	}
@@ -779,7 +779,7 @@ int ipath_update_eeprom_log(struct ipath_devdata *dd)

	csum = flash_csum(ifp, 0);
	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",
				csum, ifp->if_csum);
		ret = 1;
@@ -849,7 +849,7 @@ int ipath_update_eeprom_log(struct ipath_devdata *dd)
		csum = flash_csum(ifp, 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)
		ipath_dev_err(dd, "Failed updating EEPROM\n");

+1 −1
Original line number Diff line number Diff line
@@ -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_eep_st_lock);
	sema_init(&dd->ipath_eep_sem, 1);
	mutex_init(&dd->ipath_eep_lock);

done:
	*pdp = pd;
+2 −1
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@
#include <linux/interrupt.h>
#include <linux/pci.h>
#include <linux/dma-mapping.h>
#include <linux/mutex.h>
#include <asm/io.h>
#include <rdma/ib_verbs.h>

@@ -616,7 +617,7 @@ struct ipath_devdata {
	/* control access to actual counters, timer */
	spinlock_t ipath_eep_st_lock;
	/* 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 */
	uint64_t ipath_traffic_wds;
	/* active time is kept in seconds, but logged in hours */