diff options
author | Jiang Liu <jiang.liu@linux.intel.com> | 2015-06-10 04:55:00 -0400 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2015-07-30 15:13:20 -0400 |
commit | 811a4e6fce09bc9239c664c6a1a53645a678c303 (patch) | |
tree | 069115c57617ebe535f923e8c6b1b4c1fbe28492 | |
parent | 991de2e59090e55c65a7f59a049142e3c480f7bd (diff) |
PCI: Add helpers to manage pci_dev->irq and pci_dev->irq_managed
Add pci_has_managed_irq(), pci_set_managed_irq(), and
pci_reset_managed_irq() to simplify code. No functional change.
[bhelgaas: changelog]
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r-- | arch/x86/pci/intel_mid_pci.c | 4 | ||||
-rw-r--r-- | arch/x86/pci/irq.c | 10 | ||||
-rw-r--r-- | drivers/acpi/pci_irq.c | 10 | ||||
-rw-r--r-- | include/linux/pci.h | 17 |
4 files changed, 27 insertions, 14 deletions
diff --git a/arch/x86/pci/intel_mid_pci.c b/arch/x86/pci/intel_mid_pci.c index fb7a1f96d80c..22aaefb4f1ca 100644 --- a/arch/x86/pci/intel_mid_pci.c +++ b/arch/x86/pci/intel_mid_pci.c | |||
@@ -211,7 +211,7 @@ static int intel_mid_pci_irq_enable(struct pci_dev *dev) | |||
211 | struct irq_alloc_info info; | 211 | struct irq_alloc_info info; |
212 | int polarity; | 212 | int polarity; |
213 | 213 | ||
214 | if (dev->irq_managed && dev->irq > 0) | 214 | if (pci_has_managed_irq(dev)) |
215 | return 0; | 215 | return 0; |
216 | 216 | ||
217 | if (intel_mid_identify_cpu() == INTEL_MID_CPU_CHIP_TANGIER) | 217 | if (intel_mid_identify_cpu() == INTEL_MID_CPU_CHIP_TANGIER) |
@@ -234,7 +234,7 @@ static int intel_mid_pci_irq_enable(struct pci_dev *dev) | |||
234 | 234 | ||
235 | static void intel_mid_pci_irq_disable(struct pci_dev *dev) | 235 | static void intel_mid_pci_irq_disable(struct pci_dev *dev) |
236 | { | 236 | { |
237 | if (dev->irq_managed && dev->irq > 0) { | 237 | if (pci_has_managed_irq(dev)) { |
238 | mp_unmap_irq(dev->irq); | 238 | mp_unmap_irq(dev->irq); |
239 | dev->irq_managed = 0; | 239 | dev->irq_managed = 0; |
240 | /* | 240 | /* |
diff --git a/arch/x86/pci/irq.c b/arch/x86/pci/irq.c index 72108f0b66b1..32e70343e6fd 100644 --- a/arch/x86/pci/irq.c +++ b/arch/x86/pci/irq.c | |||
@@ -1202,7 +1202,7 @@ static int pirq_enable_irq(struct pci_dev *dev) | |||
1202 | struct pci_dev *temp_dev; | 1202 | struct pci_dev *temp_dev; |
1203 | int irq; | 1203 | int irq; |
1204 | 1204 | ||
1205 | if (dev->irq_managed && dev->irq > 0) | 1205 | if (pci_has_managed_irq(dev)) |
1206 | return 0; | 1206 | return 0; |
1207 | 1207 | ||
1208 | irq = IO_APIC_get_PCI_irq_vector(dev->bus->number, | 1208 | irq = IO_APIC_get_PCI_irq_vector(dev->bus->number, |
@@ -1230,8 +1230,7 @@ static int pirq_enable_irq(struct pci_dev *dev) | |||
1230 | } | 1230 | } |
1231 | dev = temp_dev; | 1231 | dev = temp_dev; |
1232 | if (irq >= 0) { | 1232 | if (irq >= 0) { |
1233 | dev->irq_managed = 1; | 1233 | pci_set_managed_irq(dev, irq); |
1234 | dev->irq = irq; | ||
1235 | dev_info(&dev->dev, "PCI->APIC IRQ transform: " | 1234 | dev_info(&dev->dev, "PCI->APIC IRQ transform: " |
1236 | "INT %c -> IRQ %d\n", 'A' + pin - 1, irq); | 1235 | "INT %c -> IRQ %d\n", 'A' + pin - 1, irq); |
1237 | return 0; | 1236 | return 0; |
@@ -1259,9 +1258,8 @@ static int pirq_enable_irq(struct pci_dev *dev) | |||
1259 | 1258 | ||
1260 | static void pirq_disable_irq(struct pci_dev *dev) | 1259 | static void pirq_disable_irq(struct pci_dev *dev) |
1261 | { | 1260 | { |
1262 | if (io_apic_assign_pci_irqs && dev->irq_managed && dev->irq) { | 1261 | if (io_apic_assign_pci_irqs && pci_has_managed_irq(dev)) { |
1263 | mp_unmap_irq(dev->irq); | 1262 | mp_unmap_irq(dev->irq); |
1264 | dev->irq = 0; | 1263 | pci_reset_managed_irq(dev); |
1265 | dev->irq_managed = 0; | ||
1266 | } | 1264 | } |
1267 | } | 1265 | } |
diff --git a/drivers/acpi/pci_irq.c b/drivers/acpi/pci_irq.c index d1aad6900b4c..afa16c557c17 100644 --- a/drivers/acpi/pci_irq.c +++ b/drivers/acpi/pci_irq.c | |||
@@ -412,7 +412,7 @@ int acpi_pci_irq_enable(struct pci_dev *dev) | |||
412 | return 0; | 412 | return 0; |
413 | } | 413 | } |
414 | 414 | ||
415 | if (dev->irq_managed && dev->irq > 0) | 415 | if (pci_has_managed_irq(dev)) |
416 | return 0; | 416 | return 0; |
417 | 417 | ||
418 | entry = acpi_pci_irq_lookup(dev, pin); | 418 | entry = acpi_pci_irq_lookup(dev, pin); |
@@ -457,8 +457,7 @@ int acpi_pci_irq_enable(struct pci_dev *dev) | |||
457 | kfree(entry); | 457 | kfree(entry); |
458 | return rc; | 458 | return rc; |
459 | } | 459 | } |
460 | dev->irq = rc; | 460 | pci_set_managed_irq(dev, rc); |
461 | dev->irq_managed = 1; | ||
462 | 461 | ||
463 | if (link) | 462 | if (link) |
464 | snprintf(link_desc, sizeof(link_desc), " -> Link[%s]", link); | 463 | snprintf(link_desc, sizeof(link_desc), " -> Link[%s]", link); |
@@ -481,7 +480,7 @@ void acpi_pci_irq_disable(struct pci_dev *dev) | |||
481 | u8 pin; | 480 | u8 pin; |
482 | 481 | ||
483 | pin = dev->pin; | 482 | pin = dev->pin; |
484 | if (!pin || !dev->irq_managed || dev->irq <= 0) | 483 | if (!pin || !pci_has_managed_irq(dev)) |
485 | return; | 484 | return; |
486 | 485 | ||
487 | entry = acpi_pci_irq_lookup(dev, pin); | 486 | entry = acpi_pci_irq_lookup(dev, pin); |
@@ -503,7 +502,6 @@ void acpi_pci_irq_disable(struct pci_dev *dev) | |||
503 | dev_dbg(&dev->dev, "PCI INT %c disabled\n", pin_name(pin)); | 502 | dev_dbg(&dev->dev, "PCI INT %c disabled\n", pin_name(pin)); |
504 | if (gsi >= 0) { | 503 | if (gsi >= 0) { |
505 | acpi_unregister_gsi(gsi); | 504 | acpi_unregister_gsi(gsi); |
506 | dev->irq_managed = 0; | 505 | pci_reset_managed_irq(dev); |
507 | dev->irq = 0; | ||
508 | } | 506 | } |
509 | } | 507 | } |
diff --git a/include/linux/pci.h b/include/linux/pci.h index b4832c92f23e..b7ab0c424ed6 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
@@ -963,6 +963,23 @@ static inline int pci_is_managed(struct pci_dev *pdev) | |||
963 | return pdev->is_managed; | 963 | return pdev->is_managed; |
964 | } | 964 | } |
965 | 965 | ||
966 | static inline void pci_set_managed_irq(struct pci_dev *pdev, unsigned int irq) | ||
967 | { | ||
968 | pdev->irq = irq; | ||
969 | pdev->irq_managed = 1; | ||
970 | } | ||
971 | |||
972 | static inline void pci_reset_managed_irq(struct pci_dev *pdev) | ||
973 | { | ||
974 | pdev->irq = 0; | ||
975 | pdev->irq_managed = 0; | ||
976 | } | ||
977 | |||
978 | static inline bool pci_has_managed_irq(struct pci_dev *pdev) | ||
979 | { | ||
980 | return pdev->irq_managed && pdev->irq > 0; | ||
981 | } | ||
982 | |||
966 | void pci_disable_device(struct pci_dev *dev); | 983 | void pci_disable_device(struct pci_dev *dev); |
967 | 984 | ||
968 | extern unsigned int pcibios_max_latency; | 985 | extern unsigned int pcibios_max_latency; |