diff --git a/drivers/pci/access.c b/drivers/pci/access.c index 3d20f9c51efe..708c7529647f 100644 --- a/drivers/pci/access.c +++ b/drivers/pci/access.c @@ -491,8 +491,8 @@ int pcie_capability_write_dword(struct pci_dev *dev, int pos, u32 val) } EXPORT_SYMBOL(pcie_capability_write_dword); -int pcie_capability_clear_and_set_word_unlocked(struct pci_dev *dev, int pos, - u16 clear, u16 set) +int pcie_capability_clear_and_set_word(struct pci_dev *dev, int pos, + u16 clear, u16 set) { int ret; u16 val; @@ -506,21 +506,7 @@ int pcie_capability_clear_and_set_word_unlocked(struct pci_dev *dev, int pos, return ret; } -EXPORT_SYMBOL(pcie_capability_clear_and_set_word_unlocked); - -int pcie_capability_clear_and_set_word_locked(struct pci_dev *dev, int pos, - u16 clear, u16 set) -{ - unsigned long flags; - int ret; - - spin_lock_irqsave(&dev->pcie_cap_lock, flags); - ret = pcie_capability_clear_and_set_word_unlocked(dev, pos, clear, set); - spin_unlock_irqrestore(&dev->pcie_cap_lock, flags); - - return ret; -} -EXPORT_SYMBOL(pcie_capability_clear_and_set_word_locked); +EXPORT_SYMBOL(pcie_capability_clear_and_set_word); int pcie_capability_clear_and_set_dword(struct pci_dev *dev, int pos, u32 clear, u32 set) diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 0945f50fe94f..7783d381e324 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -2313,7 +2313,6 @@ struct pci_dev *pci_alloc_dev(struct pci_bus *bus) .end = -1, }; - spin_lock_init(&dev->pcie_cap_lock); #ifdef CONFIG_PCI_MSI raw_spin_lock_init(&dev->msi_lock); #endif diff --git a/include/linux/pci.h b/include/linux/pci.h index 0db9c25c48ea..c9328c7fce40 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -467,7 +467,6 @@ struct pci_dev { pci_dev_flags_t dev_flags; atomic_t enable_cnt; /* pci_enable_device has been called */ - spinlock_t pcie_cap_lock; /* Protects RMW ops in capability accessors */ u32 saved_config_space[16]; /* Config space saved at suspend time */ struct hlist_head saved_cap_space; int rom_attr_enabled; /* Display of ROM attribute enabled? */ @@ -1234,40 +1233,11 @@ int pcie_capability_read_word(struct pci_dev *dev, int pos, u16 *val); int pcie_capability_read_dword(struct pci_dev *dev, int pos, u32 *val); int pcie_capability_write_word(struct pci_dev *dev, int pos, u16 val); int pcie_capability_write_dword(struct pci_dev *dev, int pos, u32 val); -int pcie_capability_clear_and_set_word_unlocked(struct pci_dev *dev, int pos, - u16 clear, u16 set); -int pcie_capability_clear_and_set_word_locked(struct pci_dev *dev, int pos, - u16 clear, u16 set); +int pcie_capability_clear_and_set_word(struct pci_dev *dev, int pos, + u16 clear, u16 set); int pcie_capability_clear_and_set_dword(struct pci_dev *dev, int pos, u32 clear, u32 set); -/** - * pcie_capability_clear_and_set_word - RMW accessor for PCI Express Capability Registers - * @dev: PCI device structure of the PCI Express device - * @pos: PCI Express Capability Register - * @clear: Clear bitmask - * @set: Set bitmask - * - * Perform a Read-Modify-Write (RMW) operation using @clear and @set - * bitmasks on PCI Express Capability Register at @pos. Certain PCI Express - * Capability Registers are accessed concurrently in RMW fashion, hence - * require locking which is handled transparently to the caller. - */ -static inline int pcie_capability_clear_and_set_word(struct pci_dev *dev, - int pos, - u16 clear, u16 set) -{ - switch (pos) { - case PCI_EXP_LNKCTL: - case PCI_EXP_RTCTL: - return pcie_capability_clear_and_set_word_locked(dev, pos, - clear, set); - default: - return pcie_capability_clear_and_set_word_unlocked(dev, pos, - clear, set); - } -} - static inline int pcie_capability_set_word(struct pci_dev *dev, int pos, u16 set) {