Skip to content

Commit 2d0d001

Browse files
bjorn-helgaasgregkh
authored andcommitted
Revert "PCI: Add helpers to manage pci_dev->irq and pci_dev->irq_managed"
commit 67b4eab91caf2ad574cab1b17ae09180ea2e116e upstream. Revert 811a4e6 ("PCI: Add helpers to manage pci_dev->irq and pci_dev->irq_managed"). This is part of reverting 991de2e ("PCI, x86: Implement pcibios_alloc_irq() and pcibios_free_irq()") to fix regressions it introduced. Link: https://bugzilla.kernel.org/show_bug.cgi?id=111211 Fixes: 991de2e ("PCI, x86: Implement pcibios_alloc_irq() and pcibios_free_irq()") Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Acked-by: Rafael J. Wysocki <rafael@kernel.org> CC: Jiang Liu <jiang.liu@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent fc9683f commit 2d0d001

4 files changed

Lines changed: 14 additions & 27 deletions

File tree

arch/x86/pci/intel_mid_pci.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ static int intel_mid_pci_irq_enable(struct pci_dev *dev)
215215
int polarity;
216216
int ret;
217217

218-
if (pci_has_managed_irq(dev))
218+
if (dev->irq_managed && dev->irq > 0)
219219
return 0;
220220

221221
switch (intel_mid_identify_cpu()) {
@@ -256,7 +256,7 @@ static int intel_mid_pci_irq_enable(struct pci_dev *dev)
256256

257257
static void intel_mid_pci_irq_disable(struct pci_dev *dev)
258258
{
259-
if (pci_has_managed_irq(dev)) {
259+
if (dev->irq_managed && dev->irq > 0) {
260260
mp_unmap_irq(dev->irq);
261261
dev->irq_managed = 0;
262262
/*

arch/x86/pci/irq.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1202,7 +1202,7 @@ static int pirq_enable_irq(struct pci_dev *dev)
12021202
struct pci_dev *temp_dev;
12031203
int irq;
12041204

1205-
if (pci_has_managed_irq(dev))
1205+
if (dev->irq_managed && dev->irq > 0)
12061206
return 0;
12071207

12081208
irq = IO_APIC_get_PCI_irq_vector(dev->bus->number,
@@ -1230,7 +1230,8 @@ static int pirq_enable_irq(struct pci_dev *dev)
12301230
}
12311231
dev = temp_dev;
12321232
if (irq >= 0) {
1233-
pci_set_managed_irq(dev, irq);
1233+
dev->irq_managed = 1;
1234+
dev->irq = irq;
12341235
dev_info(&dev->dev, "PCI->APIC IRQ transform: "
12351236
"INT %c -> IRQ %d\n", 'A' + pin - 1, irq);
12361237
return 0;
@@ -1258,8 +1259,9 @@ static int pirq_enable_irq(struct pci_dev *dev)
12581259

12591260
static void pirq_disable_irq(struct pci_dev *dev)
12601261
{
1261-
if (io_apic_assign_pci_irqs && pci_has_managed_irq(dev)) {
1262+
if (io_apic_assign_pci_irqs && dev->irq_managed && dev->irq) {
12621263
mp_unmap_irq(dev->irq);
1263-
pci_reset_managed_irq(dev);
1264+
dev->irq = 0;
1265+
dev->irq_managed = 0;
12641266
}
12651267
}

drivers/acpi/pci_irq.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -409,7 +409,7 @@ int acpi_pci_irq_enable(struct pci_dev *dev)
409409
return 0;
410410
}
411411

412-
if (pci_has_managed_irq(dev))
412+
if (dev->irq_managed && dev->irq > 0)
413413
return 0;
414414

415415
entry = acpi_pci_irq_lookup(dev, pin);
@@ -454,7 +454,8 @@ int acpi_pci_irq_enable(struct pci_dev *dev)
454454
kfree(entry);
455455
return rc;
456456
}
457-
pci_set_managed_irq(dev, rc);
457+
dev->irq = rc;
458+
dev->irq_managed = 1;
458459

459460
if (link)
460461
snprintf(link_desc, sizeof(link_desc), " -> Link[%s]", link);
@@ -477,7 +478,7 @@ void acpi_pci_irq_disable(struct pci_dev *dev)
477478
u8 pin;
478479

479480
pin = dev->pin;
480-
if (!pin || !pci_has_managed_irq(dev))
481+
if (!pin || !dev->irq_managed || dev->irq <= 0)
481482
return;
482483

483484
entry = acpi_pci_irq_lookup(dev, pin);
@@ -499,6 +500,7 @@ void acpi_pci_irq_disable(struct pci_dev *dev)
499500
dev_dbg(&dev->dev, "PCI INT %c disabled\n", pin_name(pin));
500501
if (gsi >= 0) {
501502
acpi_unregister_gsi(gsi);
502-
pci_reset_managed_irq(dev);
503+
dev->irq_managed = 0;
504+
dev->irq = 0;
503505
}
504506
}

include/linux/pci.h

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -989,23 +989,6 @@ static inline int pci_is_managed(struct pci_dev *pdev)
989989
return pdev->is_managed;
990990
}
991991

992-
static inline void pci_set_managed_irq(struct pci_dev *pdev, unsigned int irq)
993-
{
994-
pdev->irq = irq;
995-
pdev->irq_managed = 1;
996-
}
997-
998-
static inline void pci_reset_managed_irq(struct pci_dev *pdev)
999-
{
1000-
pdev->irq = 0;
1001-
pdev->irq_managed = 0;
1002-
}
1003-
1004-
static inline bool pci_has_managed_irq(struct pci_dev *pdev)
1005-
{
1006-
return pdev->irq_managed && pdev->irq > 0;
1007-
}
1008-
1009992
void pci_disable_device(struct pci_dev *dev);
1010993

1011994
extern unsigned int pcibios_max_latency;

0 commit comments

Comments
 (0)