OSDN Git Service

IB/ipath: Convert ipath_eep_sem semaphore to a mutex
authorMatthias Kaehlcke <matthias.kaehlcke@gmail.com>
Thu, 15 Nov 2007 23:23:25 +0000 (15:23 -0800)
committerRoland Dreier <rolandd@cisco.com>
Fri, 25 Jan 2008 22:15:26 +0000 (14:15 -0800)
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>
drivers/infiniband/hw/ipath/ipath_eeprom.c
drivers/infiniband/hw/ipath/ipath_init_chip.c
drivers/infiniband/hw/ipath/ipath_kernel.h

index e7c25db..a5b6299 100644 (file)
@@ -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");
 
index 9dd0bac..9e9d6fa 100644 (file)
@@ -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;
index bb1dc07..1ef82d6 100644 (file)
@@ -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 */