From 63aa0473df0ffe31721ad73d23c574e029d0863b Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 27 Aug 2021 16:28:41 +0200 Subject: [PATCH] Revert "PCI/MSI: Protect msi_desc::masked for multi-MSI" This reverts commit 312730cd15e097c11c4d0a0b8583a89a9ffd3d96 which is commit 77e89afc25f30abd56e76a809ee2884d7c1b63ce upstream. It breaks the Android KABI and is not needed for any current Android hardware devices, so can be safely reverted. Signed-off-by: Greg Kroah-Hartman Change-Id: If4d9769c8cbfca6872c9a745fec8ab28bc39199e --- drivers/base/core.c | 1 - drivers/pci/msi.c | 19 +++++++++---------- include/linux/device.h | 1 - include/linux/msi.h | 2 +- 4 files changed, 10 insertions(+), 13 deletions(-) diff --git a/drivers/base/core.c b/drivers/base/core.c index 5296eb77903d..06ad33c1242c 100644 --- a/drivers/base/core.c +++ b/drivers/base/core.c @@ -2730,7 +2730,6 @@ void device_initialize(struct device *dev) device_pm_init(dev); set_dev_node(dev, -1); #ifdef CONFIG_GENERIC_MSI_IRQ - raw_spin_lock_init(&dev->msi_lock); INIT_LIST_HEAD(&dev->msi_list); #endif INIT_LIST_HEAD(&dev->links.consumers); diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c index 2548c64194ca..8a32462d0e0f 100644 --- a/drivers/pci/msi.c +++ b/drivers/pci/msi.c @@ -171,25 +171,24 @@ static inline __attribute_const__ u32 msi_mask(unsigned x) * reliably as devices without an INTx disable bit will then generate a * level IRQ which will never be cleared. */ -void __pci_msi_desc_mask_irq(struct msi_desc *desc, u32 mask, u32 flag) +u32 __pci_msi_desc_mask_irq(struct msi_desc *desc, u32 mask, u32 flag) { - raw_spinlock_t *lock = &desc->dev->msi_lock; - unsigned long flags; + u32 mask_bits = desc->masked; if (pci_msi_ignore_mask || !desc->msi_attrib.maskbit) - return; + return 0; - raw_spin_lock_irqsave(lock, flags); - desc->masked &= ~mask; - desc->masked |= flag; + mask_bits &= ~mask; + mask_bits |= flag; pci_write_config_dword(msi_desc_to_pci_dev(desc), desc->mask_pos, - desc->masked); - raw_spin_unlock_irqrestore(lock, flags); + mask_bits); + + return mask_bits; } static void msi_mask_irq(struct msi_desc *desc, u32 mask, u32 flag) { - __pci_msi_desc_mask_irq(desc, mask, flag); + desc->masked = __pci_msi_desc_mask_irq(desc, mask, flag); } static void __iomem *pci_msix_desc_addr(struct msi_desc *desc) diff --git a/include/linux/device.h b/include/linux/device.h index 272c9f9e48f7..540a14f1e052 100644 --- a/include/linux/device.h +++ b/include/linux/device.h @@ -494,7 +494,6 @@ struct device { struct dev_pin_info *pins; #endif #ifdef CONFIG_GENERIC_MSI_IRQ - raw_spinlock_t msi_lock; struct list_head msi_list; #endif #ifdef CONFIG_DMA_OPS diff --git a/include/linux/msi.h b/include/linux/msi.h index 70c910b23e13..2a3e997751ce 100644 --- a/include/linux/msi.h +++ b/include/linux/msi.h @@ -194,7 +194,7 @@ void __pci_read_msi_msg(struct msi_desc *entry, struct msi_msg *msg); void __pci_write_msi_msg(struct msi_desc *entry, struct msi_msg *msg); u32 __pci_msix_desc_mask_irq(struct msi_desc *desc, u32 flag); -void __pci_msi_desc_mask_irq(struct msi_desc *desc, u32 mask, u32 flag); +u32 __pci_msi_desc_mask_irq(struct msi_desc *desc, u32 mask, u32 flag); void pci_msi_mask_irq(struct irq_data *data); void pci_msi_unmask_irq(struct irq_data *data);