[POWERPC] mv64x60: Use mutex instead of semaphore
Signed-off-by: Christoph Hellwig <hch@lst.de> Acked-by: Mark A. Greer <mgreer@mvista.com> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
committed by
Paul Mackerras
parent
adff093d6c
commit
461e666723
@@ -14,6 +14,7 @@
|
|||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
|
#include <linux/mutex.h>
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
#include <linux/spinlock.h>
|
#include <linux/spinlock.h>
|
||||||
#include <linux/mv643xx.h>
|
#include <linux/mv643xx.h>
|
||||||
@@ -2359,7 +2360,7 @@ mv64460_chip_specific_init(struct mv64x60_handle *bh,
|
|||||||
/* Export the hotswap register via sysfs for enum event monitoring */
|
/* Export the hotswap register via sysfs for enum event monitoring */
|
||||||
#define VAL_LEN_MAX 11 /* 32-bit hex or dec stringified number + '\n' */
|
#define VAL_LEN_MAX 11 /* 32-bit hex or dec stringified number + '\n' */
|
||||||
|
|
||||||
DECLARE_MUTEX(mv64xxx_hs_lock);
|
static DEFINE_MUTEX(mv64xxx_hs_lock);
|
||||||
|
|
||||||
static ssize_t
|
static ssize_t
|
||||||
mv64xxx_hs_reg_read(struct kobject *kobj, char *buf, loff_t off, size_t count)
|
mv64xxx_hs_reg_read(struct kobject *kobj, char *buf, loff_t off, size_t count)
|
||||||
@@ -2372,14 +2373,14 @@ mv64xxx_hs_reg_read(struct kobject *kobj, char *buf, loff_t off, size_t count)
|
|||||||
if (count < VAL_LEN_MAX)
|
if (count < VAL_LEN_MAX)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (down_interruptible(&mv64xxx_hs_lock))
|
if (mutex_lock_interruptible(&mv64xxx_hs_lock))
|
||||||
return -ERESTARTSYS;
|
return -ERESTARTSYS;
|
||||||
save_exclude = mv64x60_pci_exclude_bridge;
|
save_exclude = mv64x60_pci_exclude_bridge;
|
||||||
mv64x60_pci_exclude_bridge = 0;
|
mv64x60_pci_exclude_bridge = 0;
|
||||||
early_read_config_dword(&sysfs_hose_a, 0, PCI_DEVFN(0, 0),
|
early_read_config_dword(&sysfs_hose_a, 0, PCI_DEVFN(0, 0),
|
||||||
MV64360_PCICFG_CPCI_HOTSWAP, &v);
|
MV64360_PCICFG_CPCI_HOTSWAP, &v);
|
||||||
mv64x60_pci_exclude_bridge = save_exclude;
|
mv64x60_pci_exclude_bridge = save_exclude;
|
||||||
up(&mv64xxx_hs_lock);
|
mutex_unlock(&mv64xxx_hs_lock);
|
||||||
|
|
||||||
return sprintf(buf, "0x%08x\n", v);
|
return sprintf(buf, "0x%08x\n", v);
|
||||||
}
|
}
|
||||||
@@ -2396,14 +2397,14 @@ mv64xxx_hs_reg_write(struct kobject *kobj, char *buf, loff_t off, size_t count)
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (sscanf(buf, "%i", &v) == 1) {
|
if (sscanf(buf, "%i", &v) == 1) {
|
||||||
if (down_interruptible(&mv64xxx_hs_lock))
|
if (mutex_lock_interruptible(&mv64xxx_hs_lock))
|
||||||
return -ERESTARTSYS;
|
return -ERESTARTSYS;
|
||||||
save_exclude = mv64x60_pci_exclude_bridge;
|
save_exclude = mv64x60_pci_exclude_bridge;
|
||||||
mv64x60_pci_exclude_bridge = 0;
|
mv64x60_pci_exclude_bridge = 0;
|
||||||
early_write_config_dword(&sysfs_hose_a, 0, PCI_DEVFN(0, 0),
|
early_write_config_dword(&sysfs_hose_a, 0, PCI_DEVFN(0, 0),
|
||||||
MV64360_PCICFG_CPCI_HOTSWAP, v);
|
MV64360_PCICFG_CPCI_HOTSWAP, v);
|
||||||
mv64x60_pci_exclude_bridge = save_exclude;
|
mv64x60_pci_exclude_bridge = save_exclude;
|
||||||
up(&mv64xxx_hs_lock);
|
mutex_unlock(&mv64xxx_hs_lock);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
count = -EINVAL;
|
count = -EINVAL;
|
||||||
@@ -2433,10 +2434,10 @@ mv64xxx_hs_reg_valid_show(struct device *dev, struct device_attribute *attr,
|
|||||||
pdev = container_of(dev, struct platform_device, dev);
|
pdev = container_of(dev, struct platform_device, dev);
|
||||||
pdp = (struct mv64xxx_pdata *)pdev->dev.platform_data;
|
pdp = (struct mv64xxx_pdata *)pdev->dev.platform_data;
|
||||||
|
|
||||||
if (down_interruptible(&mv64xxx_hs_lock))
|
if (mutex_lock_interruptible(&mv64xxx_hs_lock))
|
||||||
return -ERESTARTSYS;
|
return -ERESTARTSYS;
|
||||||
v = pdp->hs_reg_valid;
|
v = pdp->hs_reg_valid;
|
||||||
up(&mv64xxx_hs_lock);
|
mutex_unlock(&mv64xxx_hs_lock);
|
||||||
|
|
||||||
return sprintf(buf, "%i\n", v);
|
return sprintf(buf, "%i\n", v);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user