* [PATCH 6/9] irq: make io_apic_set_pci_routing to take device [not found] ` <49E802CE.5030406@kernel.org> @ 2009-04-17 4:23 ` Yinghai Lu 2009-04-23 4:42 ` Len Brown 2009-04-28 1:01 ` [PATCH 6/9] irq: make io_apic_set_pci_routing to take device Yinghai Lu 0 siblings, 2 replies; 10+ messages in thread From: Yinghai Lu @ 2009-04-17 4:23 UTC (permalink / raw) To: Ingo Molnar, Thomas Gleixner, H. Peter Anvin, Andrew Morton, Suresh Siddha Cc: linux-kernel@vger.kernel.org, ACPI Devel Maling List, linux-ia64 Impact: so use dev_to_node later Signed-off-by: Yinghai Lu <yinghai@kernel.org> Cc: linux-acpi@vger.kernel.org Cc: Len Brown <lenb@kernel.org> Cc: Bjorn Helgaas <bjorn.helgaas@hp.com> Cc: linux-ia64@vger.kernel.org Cc: Tony Luck <tony.luck@intel.com> --- arch/ia64/kernel/acpi.c | 5 +++-- arch/x86/include/asm/io_apic.h | 4 ++-- arch/x86/include/asm/mpspec.h | 4 +++- arch/x86/kernel/acpi/boot.c | 8 ++++---- arch/x86/kernel/apic/io_apic.c | 3 ++- drivers/acpi/pci_irq.c | 5 +++-- drivers/char/hpet.c | 4 ++-- drivers/pnp/pnpacpi/rsparser.c | 2 +- include/linux/acpi.h | 2 +- 9 files changed, 21 insertions(+), 16 deletions(-) Index: linux-2.6/arch/ia64/kernel/acpi.c =================================================================== --- linux-2.6.orig/arch/ia64/kernel/acpi.c +++ linux-2.6/arch/ia64/kernel/acpi.c @@ -636,7 +636,7 @@ void __init acpi_numa_arch_fixup(void) * success: return IRQ number (>=0) * failure: return < 0 */ -int acpi_register_gsi(u32 gsi, int triggering, int polarity) +int acpi_register_gsi(struct device *dev, u32 gsi, int triggering, int polarity) { if (acpi_irq_model == ACPI_IRQ_MODEL_PLATFORM) return gsi; @@ -678,7 +678,8 @@ static int __init acpi_parse_fadt(struct fadt = (struct acpi_table_fadt *)fadt_header; - acpi_register_gsi(fadt->sci_interrupt, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW); + acpi_register_gsi(NULL, fadt->sci_interrupt, ACPI_LEVEL_SENSITIVE, + ACPI_ACTIVE_LOW); return 0; } Index: linux-2.6/arch/x86/include/asm/io_apic.h =================================================================== --- linux-2.6.orig/arch/x86/include/asm/io_apic.h +++ linux-2.6/arch/x86/include/asm/io_apic.h @@ -154,8 +154,8 @@ extern int timer_through_8259; extern int io_apic_get_unique_id(int ioapic, int apic_id); extern int io_apic_get_version(int ioapic); extern int io_apic_get_redir_entries(int ioapic); -extern int io_apic_set_pci_routing(int ioapic, int pin, int irq, - int edge_level, int active_high_low); +extern int io_apic_set_pci_routing(struct device *dev, int ioapic, int pin, + int irq, int edge_level, int active_high_low); #endif /* CONFIG_ACPI */ extern int (*ioapic_renumber_irq)(int ioapic, int irq); Index: linux-2.6/arch/x86/include/asm/mpspec.h =================================================================== --- linux-2.6.orig/arch/x86/include/asm/mpspec.h +++ linux-2.6/arch/x86/include/asm/mpspec.h @@ -72,7 +72,9 @@ extern void mp_register_ioapic(int id, u extern void mp_override_legacy_irq(u8 bus_irq, u8 polarity, u8 trigger, u32 gsi); extern void mp_config_acpi_legacy_irqs(void); -extern int mp_register_gsi(u32 gsi, int edge_level, int active_high_low); +struct device; +extern int mp_register_gsi(struct device *dev, u32 gsi, int edge_level, + int active_high_low); extern int acpi_probe_gsi(void); #ifdef CONFIG_X86_IO_APIC extern int mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin, Index: linux-2.6/arch/x86/kernel/acpi/boot.c =================================================================== --- linux-2.6.orig/arch/x86/kernel/acpi/boot.c +++ linux-2.6/arch/x86/kernel/acpi/boot.c @@ -522,7 +522,7 @@ int acpi_gsi_to_irq(u32 gsi, unsigned in * success: return IRQ number (>=0) * failure: return < 0 */ -int acpi_register_gsi(u32 gsi, int triggering, int polarity) +int acpi_register_gsi(struct device *dev, u32 gsi, int triggering, int polarity) { unsigned int irq; unsigned int plat_gsi = gsi; @@ -539,7 +539,7 @@ int acpi_register_gsi(u32 gsi, int trigg #ifdef CONFIG_X86_IO_APIC if (acpi_irq_model == ACPI_IRQ_MODEL_IOAPIC) { - plat_gsi = mp_register_gsi(gsi, triggering, polarity); + plat_gsi = mp_register_gsi(dev, gsi, triggering, polarity); } #endif acpi_gsi_to_irq(plat_gsi, &irq); @@ -1158,7 +1158,7 @@ void __init mp_config_acpi_legacy_irqs(v } } -int mp_register_gsi(u32 gsi, int triggering, int polarity) +int mp_register_gsi(struct device *dev, u32 gsi, int triggering, int polarity) { int ioapic; int ioapic_pin; @@ -1253,7 +1253,7 @@ int mp_register_gsi(u32 gsi, int trigger } } #endif - io_apic_set_pci_routing(ioapic, ioapic_pin, gsi, + io_apic_set_pci_routing(dev, ioapic, ioapic_pin, gsi, triggering == ACPI_EDGE_SENSITIVE ? 0 : 1, polarity == ACPI_ACTIVE_HIGH ? 0 : 1); return gsi; Index: linux-2.6/arch/x86/kernel/apic/io_apic.c =================================================================== --- linux-2.6.orig/arch/x86/kernel/apic/io_apic.c +++ linux-2.6/arch/x86/kernel/apic/io_apic.c @@ -3851,7 +3851,8 @@ int __init io_apic_get_version(int ioapi } #endif -int io_apic_set_pci_routing (int ioapic, int pin, int irq, int triggering, int polarity) +int io_apic_set_pci_routing(struct device *dev, int ioapic, int pin, int irq, + int triggering, int polarity) { struct irq_desc *desc; struct irq_cfg *cfg; Index: linux-2.6/drivers/acpi/pci_irq.c =================================================================== --- linux-2.6.orig/drivers/acpi/pci_irq.c +++ linux-2.6/drivers/acpi/pci_irq.c @@ -401,7 +401,8 @@ int acpi_pci_irq_enable(struct pci_dev * /* Interrupt Line values above 0xF are forbidden */ if (dev->irq > 0 && (dev->irq <= 0xF)) { printk(" - using IRQ %d\n", dev->irq); - acpi_register_gsi(dev->irq, ACPI_LEVEL_SENSITIVE, + acpi_register_gsi(&dev->dev, dev->irq, + ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW); return 0; } else { @@ -410,7 +411,7 @@ int acpi_pci_irq_enable(struct pci_dev * } } - rc = acpi_register_gsi(gsi, triggering, polarity); + rc = acpi_register_gsi(&dev->dev, gsi, triggering, polarity); if (rc < 0) { dev_warn(&dev->dev, "PCI INT %c: failed to register GSI\n", pin_name(pin)); Index: linux-2.6/drivers/char/hpet.c =================================================================== --- linux-2.6.orig/drivers/char/hpet.c +++ linux-2.6/drivers/char/hpet.c @@ -224,7 +224,7 @@ static void hpet_timer_set_irq(struct hp break; } - gsi = acpi_register_gsi(irq, ACPI_LEVEL_SENSITIVE, + gsi = acpi_register_gsi(NULL, irq, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW); if (gsi > 0) break; @@ -939,7 +939,7 @@ static acpi_status hpet_resources(struct irqp = &res->data.extended_irq; for (i = 0; i < irqp->interrupt_count; i++) { - irq = acpi_register_gsi(irqp->interrupts[i], + irq = acpi_register_gsi(NULL, irqp->interrupts[i], irqp->triggering, irqp->polarity); if (irq < 0) return AE_ERROR; Index: linux-2.6/drivers/pnp/pnpacpi/rsparser.c =================================================================== --- linux-2.6.orig/drivers/pnp/pnpacpi/rsparser.c +++ linux-2.6/drivers/pnp/pnpacpi/rsparser.c @@ -123,7 +123,7 @@ static void pnpacpi_parse_allocated_irqr } flags = irq_flags(triggering, polarity, shareable); - irq = acpi_register_gsi(gsi, triggering, polarity); + irq = acpi_register_gsi(&dev->dev, gsi, triggering, polarity); if (irq >= 0) pcibios_penalize_isa_irq(irq, 1); else Index: linux-2.6/include/linux/acpi.h =================================================================== --- linux-2.6.orig/include/linux/acpi.h +++ linux-2.6/include/linux/acpi.h @@ -118,7 +118,7 @@ extern int pci_mmcfg_config_num; extern int sbf_port; extern unsigned long acpi_realmode_flags; -int acpi_register_gsi (u32 gsi, int triggering, int polarity); +int acpi_register_gsi (struct device *dev, u32 gsi, int triggering, int polarity); int acpi_gsi_to_irq (u32 gsi, unsigned int *irq); #ifdef CONFIG_X86_IO_APIC ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 6/9] irq: make io_apic_set_pci_routing to take device 2009-04-17 4:23 ` [PATCH 6/9] irq: make io_apic_set_pci_routing to take device Yinghai Lu @ 2009-04-23 4:42 ` Len Brown 2009-04-26 21:53 ` [PATCH] x86/acpi: remove compress irq trick for 32bit Yinghai Lu 2009-04-28 1:01 ` [PATCH 6/9] irq: make io_apic_set_pci_routing to take device Yinghai Lu 1 sibling, 1 reply; 10+ messages in thread From: Len Brown @ 2009-04-23 4:42 UTC (permalink / raw) To: Yinghai Lu Cc: Ingo Molnar, Thomas Gleixner, H. Peter Anvin, Andrew Morton, Suresh Siddha, Eric W. Biederman, Rusty Russell, Bjorn Helgaas, Tony Luck, linux-kernel@vger.kernel.org, ACPI Devel Maling List, linux-ia64 re: touching ACPI files in this patch with no material effect Acked-by: Len Brown <len.brown@intel.com> ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH] x86/acpi: remove compress irq trick for 32bit 2009-04-23 4:42 ` Len Brown @ 2009-04-26 21:53 ` Yinghai Lu 2009-04-26 21:55 ` [PATCH] x86/acpi: calling mp_config_acpi_gsi in mp_register_gsi Yinghai Lu ` (2 more replies) 0 siblings, 3 replies; 10+ messages in thread From: Yinghai Lu @ 2009-04-26 21:53 UTC (permalink / raw) To: Len Brown, Ingo Molnar, Thomas Gleixner, H. Peter Anvin, Jesse Barnes Cc: Andrew Morton, Bjorn Helgaas, linux-kernel@vger.kernel.org, ACPI Devel Maling List, linux-pci We already have per cpu vector for 32bit, and don't need this trick any more. on 3 ioapic system (24 per ioapic) before patch got ACPI: PCI Interrupt Link [ILSB] enabled at IRQ 71 IOAPIC[2]: Set routing entry (10-23 -> 0xa9 -> IRQ 64 Mode:1 Active:1) pci 0000:80:01.1: PCI INT A -> Link[ILSB] -> GSI 71 (level, low) -> IRQ 64 ACPI: PCI Interrupt Link [LE5B] enabled at IRQ 67 IOAPIC[2]: Set routing entry (10-19 -> 0xb1 -> IRQ 65 Mode:1 Active:1) pci 0000:83:00.0: PCI INT B -> Link[LE5B] -> GSI 67 (level, low) -> IRQ 65 ACPI: PCI Interrupt Link [LE5A] enabled at IRQ 66 IOAPIC[2]: Set routing entry (10-18 -> 0xb9 -> IRQ 66 Mode:1 Active:1) pci 0000:83:00.1: PCI INT A -> Link[LE5A] -> GSI 66 (level, low) -> IRQ 66 ACPI: PCI Interrupt Link [LE5D] enabled at IRQ 65 IOAPIC[2]: Set routing entry (10-17 -> 0xc1 -> IRQ 67 Mode:1 Active:1) pci 0000:84:00.0: PCI INT B -> Link[LE5D] -> GSI 65 (level, low) -> IRQ 67 ACPI: PCI Interrupt Link [LE5C] enabled at IRQ 64 IOAPIC[2]: Set routing entry (10-16 -> 0xc9 -> IRQ 68 Mode:1 Active:1) pci 0000:84:00.1: PCI INT A -> Link[LE5C] -> GSI 64 (level, low) -> IRQ 68 pci 0000:87:00.0: PCI INT B -> Link[LE5A] -> GSI 66 (level, low) -> IRQ 66 pci 0000:87:00.1: PCI INT A -> Link[LE5D] -> GSI 65 (level, low) -> IRQ 67 pci 0000:88:00.0: PCI INT B -> Link[LE5C] -> GSI 64 (level, low) -> IRQ 68 pci 0000:88:00.1: PCI INT A -> Link[LE5B] -> GSI 67 (level, low) -> IRQ 65 pci 0000:8b:00.0: PCI INT B -> Link[LE5A] -> GSI 66 (level, low) -> IRQ 66 pci 0000:8b:00.1: PCI INT A -> Link[LE5D] -> GSI 65 (level, low) -> IRQ 67 pci 0000:8c:00.0: PCI INT B -> Link[LE5C] -> GSI 64 (level, low) -> IRQ 68 pci 0000:8c:00.1: PCI INT A -> Link[LE5B] -> GSI 67 (level, low) -> IRQ 65 after patch will get ACPI: PCI Interrupt Link [ILSB] enabled at IRQ 71 IOAPIC[2]: Set routing entry (10-23 -> 0xa9 -> IRQ 71 Mode:1 Active:1) pci 0000:80:01.1: PCI INT A -> Link[ILSB] -> GSI 71 (level, low) -> IRQ 71 ACPI: PCI Interrupt Link [LE5B] enabled at IRQ 67 IOAPIC[2]: Set routing entry (10-19 -> 0xb1 -> IRQ 67 Mode:1 Active:1) pci 0000:83:00.0: PCI INT B -> Link[LE5B] -> GSI 67 (level, low) -> IRQ 67 ACPI: PCI Interrupt Link [LE5A] enabled at IRQ 66 IOAPIC[2]: Set routing entry (10-18 -> 0xb9 -> IRQ 66 Mode:1 Active:1) pci 0000:83:00.1: PCI INT A -> Link[LE5A] -> GSI 66 (level, low) -> IRQ 66 ACPI: PCI Interrupt Link [LE5D] enabled at IRQ 65 IOAPIC[2]: Set routing entry (10-17 -> 0xc1 -> IRQ 65 Mode:1 Active:1) pci 0000:84:00.0: PCI INT B -> Link[LE5D] -> GSI 65 (level, low) -> IRQ 65 ACPI: PCI Interrupt Link [LE5C] enabled at IRQ 64 IOAPIC[2]: Set routing entry (10-16 -> 0xc9 -> IRQ 64 Mode:1 Active:1) pci 0000:84:00.1: PCI INT A -> Link[LE5C] -> GSI 64 (level, low) -> IRQ 64 pci 0000:87:00.0: PCI INT B -> Link[LE5A] -> GSI 66 (level, low) -> IRQ 66 pci 0000:87:00.1: PCI INT A -> Link[LE5D] -> GSI 65 (level, low) -> IRQ 65 pci 0000:88:00.0: PCI INT B -> Link[LE5C] -> GSI 64 (level, low) -> IRQ 64 pci 0000:88:00.1: PCI INT A -> Link[LE5B] -> GSI 67 (level, low) -> IRQ 67 pci 0000:8b:00.0: PCI INT B -> Link[LE5A] -> GSI 66 (level, low) -> IRQ 66 pci 0000:8b:00.1: PCI INT A -> Link[LE5D] -> GSI 65 (level, low) -> IRQ 65 pci 0000:8c:00.0: PCI INT B -> Link[LE5C] -> GSI 64 (level, low) -> IRQ 64 pci 0000:8c:00.1: PCI INT A -> Link[LE5B] -> GSI 67 (level, low) -> IRQ 67 [ Impact: make irq = gsi on 32bit system with more ioapics ] Signed-off-by: Yinghai Lu <yinghai@kernel.org> --- arch/x86/kernel/acpi/boot.c | 65 ++++---------------------------------------- 1 file changed, 7 insertions(+), 58 deletions(-) Index: linux-2.6/arch/x86/kernel/acpi/boot.c =================================================================== --- linux-2.6.orig/arch/x86/kernel/acpi/boot.c +++ linux-2.6/arch/x86/kernel/acpi/boot.c @@ -1162,22 +1162,9 @@ int mp_register_gsi(struct device *dev, { int ioapic; int ioapic_pin; -#ifdef CONFIG_X86_32 -#define MAX_GSI_NUM 4096 -#define IRQ_COMPRESSION_START 64 - - static int pci_irq = IRQ_COMPRESSION_START; - /* - * Mapping between Global System Interrupts, which - * represent all possible interrupts, and IRQs - * assigned to actual devices. - */ - static int gsi_to_irq[MAX_GSI_NUM]; -#else if (acpi_irq_model != ACPI_IRQ_MODEL_IOAPIC) return gsi; -#endif /* Don't set up the ACPI SCI because it's already set up */ if (acpi_gbl_FADT.sci_interrupt == gsi) @@ -1196,66 +1183,28 @@ int mp_register_gsi(struct device *dev, gsi = ioapic_renumber_irq(ioapic, gsi); #endif - /* - * Avoid pin reprogramming. PRTs typically include entries - * with redundant pin->gsi mappings (but unique PCI devices); - * we only program the IOAPIC on the first. - */ if (ioapic_pin > MP_MAX_IOAPIC_PIN) { printk(KERN_ERR "Invalid reference to IOAPIC pin " "%d-%d\n", mp_ioapic_routing[ioapic].apic_id, ioapic_pin); return gsi; } + + /* + * Avoid pin reprogramming. PRTs typically include entries + * with redundant pin->gsi mappings (but unique PCI devices); + * we only program the IOAPIC on the first. + */ if (test_bit(ioapic_pin, mp_ioapic_routing[ioapic].pin_programmed)) { pr_debug("Pin %d-%d already programmed\n", mp_ioapic_routing[ioapic].apic_id, ioapic_pin); -#ifdef CONFIG_X86_32 - return (gsi < IRQ_COMPRESSION_START ? gsi : gsi_to_irq[gsi]); -#else return gsi; -#endif } - set_bit(ioapic_pin, mp_ioapic_routing[ioapic].pin_programmed); -#ifdef CONFIG_X86_32 - /* - * For GSI >= 64, use IRQ compression - */ - if ((gsi >= IRQ_COMPRESSION_START) - && (triggering == ACPI_LEVEL_SENSITIVE)) { - /* - * For PCI devices assign IRQs in order, avoiding gaps - * due to unused I/O APIC pins. - */ - int irq = gsi; - if (gsi < MAX_GSI_NUM) { - /* - * Retain the VIA chipset work-around (gsi > 15), but - * avoid a problem where the 8254 timer (IRQ0) is setup - * via an override (so it's not on pin 0 of the ioapic), - * and at the same time, the pin 0 interrupt is a PCI - * type. The gsi > 15 test could cause these two pins - * to be shared as IRQ0, and they are not shareable. - * So test for this condition, and if necessary, avoid - * the pin collision. - */ - gsi = pci_irq++; - /* - * Don't assign IRQ used by ACPI SCI - */ - if (gsi == acpi_gbl_FADT.sci_interrupt) - gsi = pci_irq++; - gsi_to_irq[irq] = gsi; - } else { - printk(KERN_ERR "GSI %u is too high\n", gsi); - return gsi; - } - } -#endif io_apic_set_pci_routing(dev, ioapic, ioapic_pin, gsi, triggering == ACPI_EDGE_SENSITIVE ? 0 : 1, polarity == ACPI_ACTIVE_HIGH ? 0 : 1); + return gsi; } ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH] x86/acpi: calling mp_config_acpi_gsi in mp_register_gsi 2009-04-26 21:53 ` [PATCH] x86/acpi: remove compress irq trick for 32bit Yinghai Lu @ 2009-04-26 21:55 ` Yinghai Lu 2009-04-26 23:25 ` Yinghai Lu 2009-04-27 1:12 ` [PATCH] x86/acpi: calling mp_config_acpi_gsi in mp_register_gsi -v2 Yinghai Lu 2009-04-27 3:30 ` [PATCH] x86/acpi: remove compress irq trick for 32bit Ingo Molnar 2009-05-14 15:41 ` Len Brown 2 siblings, 2 replies; 10+ messages in thread From: Yinghai Lu @ 2009-04-26 21:55 UTC (permalink / raw) To: Len Brown, Ingo Molnar, Thomas Gleixner, H. Peter Anvin, Jesse Barnes Cc: Andrew Morton, Bjorn Helgaas, linux-kernel@vger.kernel.org, ACPI Devel Maling List, linux-pci it seems that change about calling mp_config_acpi_gsi in acpi_pci_irq_enable() never get into mainline. actually we could call that in mp_register_gsi with struct device... also could make mp_config_acpi_gsi to be static [Impact: make update_mptable working] Signed-off-by: Yinghai Lu <yinghai@kernel.org> --- arch/x86/include/asm/mpspec.h | 9 ------ arch/x86/kernel/acpi/boot.c | 62 ++++++++++++++++++++++++------------------ 2 files changed, 36 insertions(+), 35 deletions(-) Index: linux-2.6/arch/x86/include/asm/mpspec.h =================================================================== --- linux-2.6.orig/arch/x86/include/asm/mpspec.h +++ linux-2.6/arch/x86/include/asm/mpspec.h @@ -77,17 +77,8 @@ extern int mp_register_gsi(struct device int active_high_low); extern int acpi_probe_gsi(void); #ifdef CONFIG_X86_IO_APIC -extern int mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin, - u32 gsi, int triggering, int polarity); extern int mp_find_ioapic(int gsi); extern int mp_find_ioapic_pin(int ioapic, int gsi); -#else -static inline int -mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin, - u32 gsi, int triggering, int polarity) -{ - return 0; -} #endif #else /* !CONFIG_ACPI: */ static inline int acpi_probe_gsi(void) Index: linux-2.6/arch/x86/kernel/acpi/boot.c =================================================================== --- linux-2.6.orig/arch/x86/kernel/acpi/boot.c +++ linux-2.6/arch/x86/kernel/acpi/boot.c @@ -33,6 +33,7 @@ #include <linux/irq.h> #include <linux/bootmem.h> #include <linux/ioport.h> +#include <linux/pci.h> #include <asm/pgtable.h> #include <asm/io_apic.h> @@ -1158,6 +1159,40 @@ void __init mp_config_acpi_legacy_irqs(v } } +static int mp_config_acpi_gsi(struct device *dev, u32 gsi, int triggering, + int polarity) +{ +#ifdef CONFIG_X86_MPPARSE + struct mpc_intsrc mp_irq; + struct pci_dev *pdev; + unsigned char number; + unsigned int devfn; + int ioapic; + u8 pin; + + if (!acpi_ioapic) + return 0; + + pdev = to_pci_dev(dev); + number = pdev->bus->number; + devfn = pdev->devfn; + pin = pdev->pin; + /* print the entry should happen on mptable identically */ + mp_irq.type = MP_INTSRC; + mp_irq.irqtype = mp_INT; + mp_irq.irqflag = (triggering == ACPI_EDGE_SENSITIVE ? 4 : 0x0c) | + (polarity == ACPI_ACTIVE_HIGH ? 1 : 3); + mp_irq.srcbus = number; + mp_irq.srcbusirq = (((devfn >> 3) & 0x1f) << 2) | ((pin - 1) & 3); + ioapic = mp_find_ioapic(gsi); + mp_irq.dstapic = mp_ioapic_routing[ioapic].apic_id; + mp_irq.dstirq = mp_find_ioapic_pin(ioapic, gsi); + + save_mp_irq(&mp_irq); +#endif + return 0; +} + int mp_register_gsi(struct device *dev, u32 gsi, int triggering, int polarity) { int ioapic; @@ -1189,6 +1224,7 @@ int mp_register_gsi(struct device *dev, ioapic_pin); return gsi; } + mp_config_acpi_gsi(dev, gsi, triggering, polarity); /* * Avoid pin reprogramming. PRTs typically include entries @@ -1208,32 +1244,6 @@ int mp_register_gsi(struct device *dev, return gsi; } -int mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin, - u32 gsi, int triggering, int polarity) -{ -#ifdef CONFIG_X86_MPPARSE - struct mpc_intsrc mp_irq; - int ioapic; - - if (!acpi_ioapic) - return 0; - - /* print the entry should happen on mptable identically */ - mp_irq.type = MP_INTSRC; - mp_irq.irqtype = mp_INT; - mp_irq.irqflag = (triggering == ACPI_EDGE_SENSITIVE ? 4 : 0x0c) | - (polarity == ACPI_ACTIVE_HIGH ? 1 : 3); - mp_irq.srcbus = number; - mp_irq.srcbusirq = (((devfn >> 3) & 0x1f) << 2) | ((pin - 1) & 3); - ioapic = mp_find_ioapic(gsi); - mp_irq.dstapic = mp_ioapic_routing[ioapic].apic_id; - mp_irq.dstirq = mp_find_ioapic_pin(ioapic, gsi); - - save_mp_irq(&mp_irq); -#endif - return 0; -} - /* * Parse IOAPIC related entries in MADT * returns 0 on success, < 0 on error ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] x86/acpi: calling mp_config_acpi_gsi in mp_register_gsi 2009-04-26 21:55 ` [PATCH] x86/acpi: calling mp_config_acpi_gsi in mp_register_gsi Yinghai Lu @ 2009-04-26 23:25 ` Yinghai Lu 2009-04-27 1:12 ` [PATCH] x86/acpi: calling mp_config_acpi_gsi in mp_register_gsi -v2 Yinghai Lu 1 sibling, 0 replies; 10+ messages in thread From: Yinghai Lu @ 2009-04-26 23:25 UTC (permalink / raw) To: Len Brown, Ingo Molnar, Thomas Gleixner, H. Peter Anvin, Jesse Barnes Cc: Andrew Morton, Bjorn Helgaas, linux-kernel@vger.kernel.org, ACPI Devel Maling List, linux-pci it seems it still have some problem. will have -v2. YH Yinghai Lu wrote: > it seems that change about calling mp_config_acpi_gsi in acpi_pci_irq_enable() > never get into mainline. > > actually we could call that in mp_register_gsi with struct device... > also could make mp_config_acpi_gsi to be static > > [Impact: make update_mptable working] > > Signed-off-by: Yinghai Lu <yinghai@kernel.org> > > --- > arch/x86/include/asm/mpspec.h | 9 ------ > arch/x86/kernel/acpi/boot.c | 62 ++++++++++++++++++++++++------------------ > 2 files changed, 36 insertions(+), 35 deletions(-) > > Index: linux-2.6/arch/x86/include/asm/mpspec.h > =================================================================== > --- linux-2.6.orig/arch/x86/include/asm/mpspec.h > +++ linux-2.6/arch/x86/include/asm/mpspec.h > @@ -77,17 +77,8 @@ extern int mp_register_gsi(struct device > int active_high_low); > extern int acpi_probe_gsi(void); > #ifdef CONFIG_X86_IO_APIC > -extern int mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin, > - u32 gsi, int triggering, int polarity); > extern int mp_find_ioapic(int gsi); > extern int mp_find_ioapic_pin(int ioapic, int gsi); > -#else > -static inline int > -mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin, > - u32 gsi, int triggering, int polarity) > -{ > - return 0; > -} > #endif > #else /* !CONFIG_ACPI: */ > static inline int acpi_probe_gsi(void) > Index: linux-2.6/arch/x86/kernel/acpi/boot.c > =================================================================== > --- linux-2.6.orig/arch/x86/kernel/acpi/boot.c > +++ linux-2.6/arch/x86/kernel/acpi/boot.c > @@ -33,6 +33,7 @@ > #include <linux/irq.h> > #include <linux/bootmem.h> > #include <linux/ioport.h> > +#include <linux/pci.h> > > #include <asm/pgtable.h> > #include <asm/io_apic.h> > @@ -1158,6 +1159,40 @@ void __init mp_config_acpi_legacy_irqs(v > } > } > > +static int mp_config_acpi_gsi(struct device *dev, u32 gsi, int triggering, > + int polarity) > +{ > +#ifdef CONFIG_X86_MPPARSE > + struct mpc_intsrc mp_irq; > + struct pci_dev *pdev; > + unsigned char number; > + unsigned int devfn; > + int ioapic; > + u8 pin; > + > + if (!acpi_ioapic) > + return 0; > + > + pdev = to_pci_dev(dev); > + number = pdev->bus->number; > + devfn = pdev->devfn; > + pin = pdev->pin; > + /* print the entry should happen on mptable identically */ > + mp_irq.type = MP_INTSRC; > + mp_irq.irqtype = mp_INT; > + mp_irq.irqflag = (triggering == ACPI_EDGE_SENSITIVE ? 4 : 0x0c) | > + (polarity == ACPI_ACTIVE_HIGH ? 1 : 3); > + mp_irq.srcbus = number; > + mp_irq.srcbusirq = (((devfn >> 3) & 0x1f) << 2) | ((pin - 1) & 3); > + ioapic = mp_find_ioapic(gsi); > + mp_irq.dstapic = mp_ioapic_routing[ioapic].apic_id; > + mp_irq.dstirq = mp_find_ioapic_pin(ioapic, gsi); > + > + save_mp_irq(&mp_irq); > +#endif > + return 0; > +} > + > int mp_register_gsi(struct device *dev, u32 gsi, int triggering, int polarity) > { > int ioapic; > @@ -1189,6 +1224,7 @@ int mp_register_gsi(struct device *dev, > ioapic_pin); > return gsi; > } > + mp_config_acpi_gsi(dev, gsi, triggering, polarity); > > /* > * Avoid pin reprogramming. PRTs typically include entries > @@ -1208,32 +1244,6 @@ int mp_register_gsi(struct device *dev, > return gsi; > } > > -int mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin, > - u32 gsi, int triggering, int polarity) > -{ > -#ifdef CONFIG_X86_MPPARSE > - struct mpc_intsrc mp_irq; > - int ioapic; > - > - if (!acpi_ioapic) > - return 0; > - > - /* print the entry should happen on mptable identically */ > - mp_irq.type = MP_INTSRC; > - mp_irq.irqtype = mp_INT; > - mp_irq.irqflag = (triggering == ACPI_EDGE_SENSITIVE ? 4 : 0x0c) | > - (polarity == ACPI_ACTIVE_HIGH ? 1 : 3); > - mp_irq.srcbus = number; > - mp_irq.srcbusirq = (((devfn >> 3) & 0x1f) << 2) | ((pin - 1) & 3); > - ioapic = mp_find_ioapic(gsi); > - mp_irq.dstapic = mp_ioapic_routing[ioapic].apic_id; > - mp_irq.dstirq = mp_find_ioapic_pin(ioapic, gsi); > - > - save_mp_irq(&mp_irq); > -#endif > - return 0; > -} > - > /* > * Parse IOAPIC related entries in MADT > * returns 0 on success, < 0 on error > ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH] x86/acpi: calling mp_config_acpi_gsi in mp_register_gsi -v2 2009-04-26 21:55 ` [PATCH] x86/acpi: calling mp_config_acpi_gsi in mp_register_gsi Yinghai Lu 2009-04-26 23:25 ` Yinghai Lu @ 2009-04-27 1:12 ` Yinghai Lu 1 sibling, 0 replies; 10+ messages in thread From: Yinghai Lu @ 2009-04-27 1:12 UTC (permalink / raw) To: Len Brown, Ingo Molnar, Thomas Gleixner, H. Peter Anvin, Jesse Barnes Cc: Andrew Morton, Bjorn Helgaas, linux-kernel@vger.kernel.org, ACPI Devel Maling List, linux-pci it seems that change about calling mp_config_acpi_gsi in acpi_pci_irq_enable() never get into mainline. actually we could call that in mp_register_gsi with struct device... also could make mp_config_acpi_gsi to be static v2: some calling could have to be pci device, need to check that [Impact: make update_mptable working] Signed-off-by: Yinghai Lu <yinghai@kernel.org> --- arch/x86/include/asm/mpspec.h | 9 ----- arch/x86/kernel/acpi/boot.c | 66 +++++++++++++++++++++++++----------------- 2 files changed, 40 insertions(+), 35 deletions(-) Index: linux-2.6/arch/x86/include/asm/mpspec.h =================================================================== --- linux-2.6.orig/arch/x86/include/asm/mpspec.h +++ linux-2.6/arch/x86/include/asm/mpspec.h @@ -77,17 +77,8 @@ extern int mp_register_gsi(struct device int active_high_low); extern int acpi_probe_gsi(void); #ifdef CONFIG_X86_IO_APIC -extern int mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin, - u32 gsi, int triggering, int polarity); extern int mp_find_ioapic(int gsi); extern int mp_find_ioapic_pin(int ioapic, int gsi); -#else -static inline int -mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin, - u32 gsi, int triggering, int polarity) -{ - return 0; -} #endif #else /* !CONFIG_ACPI: */ static inline int acpi_probe_gsi(void) Index: linux-2.6/arch/x86/kernel/acpi/boot.c =================================================================== --- linux-2.6.orig/arch/x86/kernel/acpi/boot.c +++ linux-2.6/arch/x86/kernel/acpi/boot.c @@ -33,6 +33,7 @@ #include <linux/irq.h> #include <linux/bootmem.h> #include <linux/ioport.h> +#include <linux/pci.h> #include <asm/pgtable.h> #include <asm/io_apic.h> @@ -1158,6 +1159,44 @@ void __init mp_config_acpi_legacy_irqs(v } } +static int mp_config_acpi_gsi(struct device *dev, u32 gsi, int triggering, + int polarity) +{ +#ifdef CONFIG_X86_MPPARSE + struct mpc_intsrc mp_irq; + struct pci_dev *pdev; + unsigned char number; + unsigned int devfn; + int ioapic; + u8 pin; + + if (!acpi_ioapic) + return 0; + if (!dev) + return 0; + if (dev->bus != &pci_bus_type) + return 0; + + pdev = to_pci_dev(dev); + number = pdev->bus->number; + devfn = pdev->devfn; + pin = pdev->pin; + /* print the entry should happen on mptable identically */ + mp_irq.type = MP_INTSRC; + mp_irq.irqtype = mp_INT; + mp_irq.irqflag = (triggering == ACPI_EDGE_SENSITIVE ? 4 : 0x0c) | + (polarity == ACPI_ACTIVE_HIGH ? 1 : 3); + mp_irq.srcbus = number; + mp_irq.srcbusirq = (((devfn >> 3) & 0x1f) << 2) | ((pin - 1) & 3); + ioapic = mp_find_ioapic(gsi); + mp_irq.dstapic = mp_ioapic_routing[ioapic].apic_id; + mp_irq.dstirq = mp_find_ioapic_pin(ioapic, gsi); + + save_mp_irq(&mp_irq); +#endif + return 0; +} + int mp_register_gsi(struct device *dev, u32 gsi, int triggering, int polarity) { int ioapic; @@ -1189,6 +1228,7 @@ int mp_register_gsi(struct device *dev, ioapic_pin); return gsi; } + mp_config_acpi_gsi(dev, gsi, triggering, polarity); /* * Avoid pin reprogramming. PRTs typically include entries @@ -1208,32 +1248,6 @@ int mp_register_gsi(struct device *dev, return gsi; } -int mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin, - u32 gsi, int triggering, int polarity) -{ -#ifdef CONFIG_X86_MPPARSE - struct mpc_intsrc mp_irq; - int ioapic; - - if (!acpi_ioapic) - return 0; - - /* print the entry should happen on mptable identically */ - mp_irq.type = MP_INTSRC; - mp_irq.irqtype = mp_INT; - mp_irq.irqflag = (triggering == ACPI_EDGE_SENSITIVE ? 4 : 0x0c) | - (polarity == ACPI_ACTIVE_HIGH ? 1 : 3); - mp_irq.srcbus = number; - mp_irq.srcbusirq = (((devfn >> 3) & 0x1f) << 2) | ((pin - 1) & 3); - ioapic = mp_find_ioapic(gsi); - mp_irq.dstapic = mp_ioapic_routing[ioapic].apic_id; - mp_irq.dstirq = mp_find_ioapic_pin(ioapic, gsi); - - save_mp_irq(&mp_irq); -#endif - return 0; -} - /* * Parse IOAPIC related entries in MADT * returns 0 on success, < 0 on error ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] x86/acpi: remove compress irq trick for 32bit 2009-04-26 21:53 ` [PATCH] x86/acpi: remove compress irq trick for 32bit Yinghai Lu 2009-04-26 21:55 ` [PATCH] x86/acpi: calling mp_config_acpi_gsi in mp_register_gsi Yinghai Lu @ 2009-04-27 3:30 ` Ingo Molnar 2009-05-14 15:41 ` Len Brown 2 siblings, 0 replies; 10+ messages in thread From: Ingo Molnar @ 2009-04-27 3:30 UTC (permalink / raw) To: Yinghai Lu, Eric W. Biederman, Tejun Heo Cc: Len Brown, Thomas Gleixner, H. Peter Anvin, Jesse Barnes, Andrew Morton, Bjorn Helgaas, linux-kernel@vger.kernel.org, ACPI Devel Maling List, linux-pci * Yinghai Lu <yinghai@kernel.org> wrote: > > We already have per cpu vector for 32bit, and don't need this trick any more. > > on 3 ioapic system (24 per ioapic) before patch got > ACPI: PCI Interrupt Link [ILSB] enabled at IRQ 71 > IOAPIC[2]: Set routing entry (10-23 -> 0xa9 -> IRQ 64 Mode:1 Active:1) > pci 0000:80:01.1: PCI INT A -> Link[ILSB] -> GSI 71 (level, low) -> IRQ 64 > ACPI: PCI Interrupt Link [LE5B] enabled at IRQ 67 > IOAPIC[2]: Set routing entry (10-19 -> 0xb1 -> IRQ 65 Mode:1 Active:1) > pci 0000:83:00.0: PCI INT B -> Link[LE5B] -> GSI 67 (level, low) -> IRQ 65 > ACPI: PCI Interrupt Link [LE5A] enabled at IRQ 66 > IOAPIC[2]: Set routing entry (10-18 -> 0xb9 -> IRQ 66 Mode:1 Active:1) > pci 0000:83:00.1: PCI INT A -> Link[LE5A] -> GSI 66 (level, low) -> IRQ 66 > ACPI: PCI Interrupt Link [LE5D] enabled at IRQ 65 > IOAPIC[2]: Set routing entry (10-17 -> 0xc1 -> IRQ 67 Mode:1 Active:1) > pci 0000:84:00.0: PCI INT B -> Link[LE5D] -> GSI 65 (level, low) -> IRQ 67 > ACPI: PCI Interrupt Link [LE5C] enabled at IRQ 64 > IOAPIC[2]: Set routing entry (10-16 -> 0xc9 -> IRQ 68 Mode:1 Active:1) > pci 0000:84:00.1: PCI INT A -> Link[LE5C] -> GSI 64 (level, low) -> IRQ 68 > pci 0000:87:00.0: PCI INT B -> Link[LE5A] -> GSI 66 (level, low) -> IRQ 66 > pci 0000:87:00.1: PCI INT A -> Link[LE5D] -> GSI 65 (level, low) -> IRQ 67 > pci 0000:88:00.0: PCI INT B -> Link[LE5C] -> GSI 64 (level, low) -> IRQ 68 > pci 0000:88:00.1: PCI INT A -> Link[LE5B] -> GSI 67 (level, low) -> IRQ 65 > pci 0000:8b:00.0: PCI INT B -> Link[LE5A] -> GSI 66 (level, low) -> IRQ 66 > pci 0000:8b:00.1: PCI INT A -> Link[LE5D] -> GSI 65 (level, low) -> IRQ 67 > pci 0000:8c:00.0: PCI INT B -> Link[LE5C] -> GSI 64 (level, low) -> IRQ 68 > pci 0000:8c:00.1: PCI INT A -> Link[LE5B] -> GSI 67 (level, low) -> IRQ 65 > > after patch will get > ACPI: PCI Interrupt Link [ILSB] enabled at IRQ 71 > IOAPIC[2]: Set routing entry (10-23 -> 0xa9 -> IRQ 71 Mode:1 Active:1) > pci 0000:80:01.1: PCI INT A -> Link[ILSB] -> GSI 71 (level, low) -> IRQ 71 > ACPI: PCI Interrupt Link [LE5B] enabled at IRQ 67 > IOAPIC[2]: Set routing entry (10-19 -> 0xb1 -> IRQ 67 Mode:1 Active:1) > pci 0000:83:00.0: PCI INT B -> Link[LE5B] -> GSI 67 (level, low) -> IRQ 67 > ACPI: PCI Interrupt Link [LE5A] enabled at IRQ 66 > IOAPIC[2]: Set routing entry (10-18 -> 0xb9 -> IRQ 66 Mode:1 Active:1) > pci 0000:83:00.1: PCI INT A -> Link[LE5A] -> GSI 66 (level, low) -> IRQ 66 > ACPI: PCI Interrupt Link [LE5D] enabled at IRQ 65 > IOAPIC[2]: Set routing entry (10-17 -> 0xc1 -> IRQ 65 Mode:1 Active:1) > pci 0000:84:00.0: PCI INT B -> Link[LE5D] -> GSI 65 (level, low) -> IRQ 65 > ACPI: PCI Interrupt Link [LE5C] enabled at IRQ 64 > IOAPIC[2]: Set routing entry (10-16 -> 0xc9 -> IRQ 64 Mode:1 Active:1) > pci 0000:84:00.1: PCI INT A -> Link[LE5C] -> GSI 64 (level, low) -> IRQ 64 > pci 0000:87:00.0: PCI INT B -> Link[LE5A] -> GSI 66 (level, low) -> IRQ 66 > pci 0000:87:00.1: PCI INT A -> Link[LE5D] -> GSI 65 (level, low) -> IRQ 65 > pci 0000:88:00.0: PCI INT B -> Link[LE5C] -> GSI 64 (level, low) -> IRQ 64 > pci 0000:88:00.1: PCI INT A -> Link[LE5B] -> GSI 67 (level, low) -> IRQ 67 > pci 0000:8b:00.0: PCI INT B -> Link[LE5A] -> GSI 66 (level, low) -> IRQ 66 > pci 0000:8b:00.1: PCI INT A -> Link[LE5D] -> GSI 65 (level, low) -> IRQ 65 > pci 0000:8c:00.0: PCI INT B -> Link[LE5C] -> GSI 64 (level, low) -> IRQ 64 > pci 0000:8c:00.1: PCI INT A -> Link[LE5B] -> GSI 67 (level, low) -> IRQ 67 > > [ Impact: make irq = gsi on 32bit system with more ioapics ] > > Signed-off-by: Yinghai Lu <yinghai@kernel.org> > > --- > arch/x86/kernel/acpi/boot.c | 65 ++++---------------------------------------- > 1 file changed, 7 insertions(+), 58 deletions(-) > > Index: linux-2.6/arch/x86/kernel/acpi/boot.c > =================================================================== > --- linux-2.6.orig/arch/x86/kernel/acpi/boot.c > +++ linux-2.6/arch/x86/kernel/acpi/boot.c > @@ -1162,22 +1162,9 @@ int mp_register_gsi(struct device *dev, > { > int ioapic; > int ioapic_pin; > -#ifdef CONFIG_X86_32 > -#define MAX_GSI_NUM 4096 > -#define IRQ_COMPRESSION_START 64 > - > - static int pci_irq = IRQ_COMPRESSION_START; > - /* > - * Mapping between Global System Interrupts, which > - * represent all possible interrupts, and IRQs > - * assigned to actual devices. > - */ > - static int gsi_to_irq[MAX_GSI_NUM]; > -#else > > if (acpi_irq_model != ACPI_IRQ_MODEL_IOAPIC) > return gsi; > -#endif > > /* Don't set up the ACPI SCI because it's already set up */ > if (acpi_gbl_FADT.sci_interrupt == gsi) > @@ -1196,66 +1183,28 @@ int mp_register_gsi(struct device *dev, > gsi = ioapic_renumber_irq(ioapic, gsi); > #endif > > - /* > - * Avoid pin reprogramming. PRTs typically include entries > - * with redundant pin->gsi mappings (but unique PCI devices); > - * we only program the IOAPIC on the first. > - */ > if (ioapic_pin > MP_MAX_IOAPIC_PIN) { > printk(KERN_ERR "Invalid reference to IOAPIC pin " > "%d-%d\n", mp_ioapic_routing[ioapic].apic_id, > ioapic_pin); > return gsi; > } > + > + /* > + * Avoid pin reprogramming. PRTs typically include entries > + * with redundant pin->gsi mappings (but unique PCI devices); > + * we only program the IOAPIC on the first. > + */ > if (test_bit(ioapic_pin, mp_ioapic_routing[ioapic].pin_programmed)) { > pr_debug("Pin %d-%d already programmed\n", > mp_ioapic_routing[ioapic].apic_id, ioapic_pin); > -#ifdef CONFIG_X86_32 > - return (gsi < IRQ_COMPRESSION_START ? gsi : gsi_to_irq[gsi]); > -#else > return gsi; > -#endif > } > - > set_bit(ioapic_pin, mp_ioapic_routing[ioapic].pin_programmed); > -#ifdef CONFIG_X86_32 > - /* > - * For GSI >= 64, use IRQ compression > - */ > - if ((gsi >= IRQ_COMPRESSION_START) > - && (triggering == ACPI_LEVEL_SENSITIVE)) { > - /* > - * For PCI devices assign IRQs in order, avoiding gaps > - * due to unused I/O APIC pins. > - */ > - int irq = gsi; > - if (gsi < MAX_GSI_NUM) { > - /* > - * Retain the VIA chipset work-around (gsi > 15), but > - * avoid a problem where the 8254 timer (IRQ0) is setup > - * via an override (so it's not on pin 0 of the ioapic), > - * and at the same time, the pin 0 interrupt is a PCI > - * type. The gsi > 15 test could cause these two pins > - * to be shared as IRQ0, and they are not shareable. > - * So test for this condition, and if necessary, avoid > - * the pin collision. > - */ > - gsi = pci_irq++; > - /* > - * Don't assign IRQ used by ACPI SCI > - */ > - if (gsi == acpi_gbl_FADT.sci_interrupt) > - gsi = pci_irq++; > - gsi_to_irq[irq] = gsi; > - } else { > - printk(KERN_ERR "GSI %u is too high\n", gsi); > - return gsi; > - } > - } > -#endif > io_apic_set_pci_routing(dev, ioapic, ioapic_pin, gsi, > triggering == ACPI_EDGE_SENSITIVE ? 0 : 1, > polarity == ACPI_ACTIVE_HIGH ? 0 : 1); > + > return gsi; > } > Nice! Acked-by: Ingo Molnar <mingo@elte.hu> Len, any preference about which tree should carry this? Ingo ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] x86/acpi: remove compress irq trick for 32bit 2009-04-26 21:53 ` [PATCH] x86/acpi: remove compress irq trick for 32bit Yinghai Lu 2009-04-26 21:55 ` [PATCH] x86/acpi: calling mp_config_acpi_gsi in mp_register_gsi Yinghai Lu 2009-04-27 3:30 ` [PATCH] x86/acpi: remove compress irq trick for 32bit Ingo Molnar @ 2009-05-14 15:41 ` Len Brown 2009-05-15 13:06 ` Ingo Molnar 2 siblings, 1 reply; 10+ messages in thread From: Len Brown @ 2009-05-14 15:41 UTC (permalink / raw) To: Yinghai Lu Cc: Ingo Molnar, Thomas Gleixner, H. Peter Anvin, Jesse Barnes, Andrew Morton, Bjorn Helgaas, linux-kernel@vger.kernel.org, ACPI Devel Maling List, linux-pci Yinghai, I'm really happy to see this workaround finally get removed. Acked-by: Len Brown <len.brown@intel.com> Ingo, go ahead and keep this with your irq patches. thanks, Len Brown, Intel Open Source Technology Center ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] x86/acpi: remove compress irq trick for 32bit 2009-05-14 15:41 ` Len Brown @ 2009-05-15 13:06 ` Ingo Molnar 0 siblings, 0 replies; 10+ messages in thread From: Ingo Molnar @ 2009-05-15 13:06 UTC (permalink / raw) To: Len Brown Cc: Yinghai Lu, Thomas Gleixner, H. Peter Anvin, Jesse Barnes, Andrew Morton, Bjorn Helgaas, linux-kernel@vger.kernel.org, ACPI Devel Maling List, linux-pci * Len Brown <lenb@kernel.org> wrote: > Yinghai, > I'm really happy to see this workaround finally get removed. > > Acked-by: Len Brown <len.brown@intel.com> > > Ingo, > go ahead and keep this with your irq patches. thanks Len! Ingo ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 6/9] irq: make io_apic_set_pci_routing to take device 2009-04-17 4:23 ` [PATCH 6/9] irq: make io_apic_set_pci_routing to take device Yinghai Lu 2009-04-23 4:42 ` Len Brown @ 2009-04-28 1:01 ` Yinghai Lu 1 sibling, 0 replies; 10+ messages in thread From: Yinghai Lu @ 2009-04-28 1:01 UTC (permalink / raw) To: Ingo Molnar, Thomas Gleixner, H. Peter Anvin, Andrew Morton, Suresh Siddha Cc: linux-kernel@vger.kernel.org, ACPI Devel Maling List, linux-ia64 Impact: so use dev_to_node later Signed-off-by: Yinghai Lu <yinghai@kernel.org> Cc: linux-acpi@vger.kernel.org Acked-by: Len Brown <lenb@kernel.org> Cc: Bjorn Helgaas <bjorn.helgaas@hp.com> Cc: linux-ia64@vger.kernel.org Cc: Tony Luck <tony.luck@intel.com> --- arch/ia64/kernel/acpi.c | 5 +++-- arch/x86/include/asm/io_apic.h | 4 ++-- arch/x86/include/asm/mpspec.h | 4 +++- arch/x86/kernel/acpi/boot.c | 8 ++++---- arch/x86/kernel/apic/io_apic.c | 3 ++- drivers/acpi/pci_irq.c | 5 +++-- drivers/char/hpet.c | 4 ++-- drivers/pnp/pnpacpi/rsparser.c | 2 +- include/linux/acpi.h | 2 +- 9 files changed, 21 insertions(+), 16 deletions(-) Index: linux-2.6/arch/ia64/kernel/acpi.c =================================================================== --- linux-2.6.orig/arch/ia64/kernel/acpi.c +++ linux-2.6/arch/ia64/kernel/acpi.c @@ -636,7 +636,7 @@ void __init acpi_numa_arch_fixup(void) * success: return IRQ number (>=0) * failure: return < 0 */ -int acpi_register_gsi(u32 gsi, int triggering, int polarity) +int acpi_register_gsi(struct device *dev, u32 gsi, int triggering, int polarity) { if (acpi_irq_model == ACPI_IRQ_MODEL_PLATFORM) return gsi; @@ -678,7 +678,8 @@ static int __init acpi_parse_fadt(struct fadt = (struct acpi_table_fadt *)fadt_header; - acpi_register_gsi(fadt->sci_interrupt, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW); + acpi_register_gsi(NULL, fadt->sci_interrupt, ACPI_LEVEL_SENSITIVE, + ACPI_ACTIVE_LOW); return 0; } Index: linux-2.6/arch/x86/include/asm/io_apic.h =================================================================== --- linux-2.6.orig/arch/x86/include/asm/io_apic.h +++ linux-2.6/arch/x86/include/asm/io_apic.h @@ -154,8 +154,8 @@ extern int timer_through_8259; extern int io_apic_get_unique_id(int ioapic, int apic_id); extern int io_apic_get_version(int ioapic); extern int io_apic_get_redir_entries(int ioapic); -extern int io_apic_set_pci_routing(int ioapic, int pin, int irq, - int edge_level, int active_high_low); +extern int io_apic_set_pci_routing(struct device *dev, int ioapic, int pin, + int irq, int edge_level, int active_high_low); #endif /* CONFIG_ACPI */ extern int (*ioapic_renumber_irq)(int ioapic, int irq); Index: linux-2.6/arch/x86/include/asm/mpspec.h =================================================================== --- linux-2.6.orig/arch/x86/include/asm/mpspec.h +++ linux-2.6/arch/x86/include/asm/mpspec.h @@ -72,7 +72,9 @@ extern void mp_register_ioapic(int id, u extern void mp_override_legacy_irq(u8 bus_irq, u8 polarity, u8 trigger, u32 gsi); extern void mp_config_acpi_legacy_irqs(void); -extern int mp_register_gsi(u32 gsi, int edge_level, int active_high_low); +struct device; +extern int mp_register_gsi(struct device *dev, u32 gsi, int edge_level, + int active_high_low); extern int acpi_probe_gsi(void); #ifdef CONFIG_X86_IO_APIC extern int mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin, Index: linux-2.6/arch/x86/kernel/acpi/boot.c =================================================================== --- linux-2.6.orig/arch/x86/kernel/acpi/boot.c +++ linux-2.6/arch/x86/kernel/acpi/boot.c @@ -522,7 +522,7 @@ int acpi_gsi_to_irq(u32 gsi, unsigned in * success: return IRQ number (>=0) * failure: return < 0 */ -int acpi_register_gsi(u32 gsi, int triggering, int polarity) +int acpi_register_gsi(struct device *dev, u32 gsi, int triggering, int polarity) { unsigned int irq; unsigned int plat_gsi = gsi; @@ -539,7 +539,7 @@ int acpi_register_gsi(u32 gsi, int trigg #ifdef CONFIG_X86_IO_APIC if (acpi_irq_model == ACPI_IRQ_MODEL_IOAPIC) { - plat_gsi = mp_register_gsi(gsi, triggering, polarity); + plat_gsi = mp_register_gsi(dev, gsi, triggering, polarity); } #endif acpi_gsi_to_irq(plat_gsi, &irq); @@ -1158,7 +1158,7 @@ void __init mp_config_acpi_legacy_irqs(v } } -int mp_register_gsi(u32 gsi, int triggering, int polarity) +int mp_register_gsi(struct device *dev, u32 gsi, int triggering, int polarity) { int ioapic; int ioapic_pin; @@ -1253,7 +1253,7 @@ int mp_register_gsi(u32 gsi, int trigger } } #endif - io_apic_set_pci_routing(ioapic, ioapic_pin, gsi, + io_apic_set_pci_routing(dev, ioapic, ioapic_pin, gsi, triggering == ACPI_EDGE_SENSITIVE ? 0 : 1, polarity == ACPI_ACTIVE_HIGH ? 0 : 1); return gsi; Index: linux-2.6/arch/x86/kernel/apic/io_apic.c =================================================================== --- linux-2.6.orig/arch/x86/kernel/apic/io_apic.c +++ linux-2.6/arch/x86/kernel/apic/io_apic.c @@ -3916,7 +3916,8 @@ int __init io_apic_get_version(int ioapi } #endif -int io_apic_set_pci_routing (int ioapic, int pin, int irq, int triggering, int polarity) +int io_apic_set_pci_routing(struct device *dev, int ioapic, int pin, int irq, + int triggering, int polarity) { struct irq_desc *desc; struct irq_cfg *cfg; Index: linux-2.6/drivers/acpi/pci_irq.c =================================================================== --- linux-2.6.orig/drivers/acpi/pci_irq.c +++ linux-2.6/drivers/acpi/pci_irq.c @@ -401,7 +401,8 @@ int acpi_pci_irq_enable(struct pci_dev * /* Interrupt Line values above 0xF are forbidden */ if (dev->irq > 0 && (dev->irq <= 0xF)) { printk(" - using IRQ %d\n", dev->irq); - acpi_register_gsi(dev->irq, ACPI_LEVEL_SENSITIVE, + acpi_register_gsi(&dev->dev, dev->irq, + ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW); return 0; } else { @@ -410,7 +411,7 @@ int acpi_pci_irq_enable(struct pci_dev * } } - rc = acpi_register_gsi(gsi, triggering, polarity); + rc = acpi_register_gsi(&dev->dev, gsi, triggering, polarity); if (rc < 0) { dev_warn(&dev->dev, "PCI INT %c: failed to register GSI\n", pin_name(pin)); Index: linux-2.6/drivers/char/hpet.c =================================================================== --- linux-2.6.orig/drivers/char/hpet.c +++ linux-2.6/drivers/char/hpet.c @@ -224,7 +224,7 @@ static void hpet_timer_set_irq(struct hp break; } - gsi = acpi_register_gsi(irq, ACPI_LEVEL_SENSITIVE, + gsi = acpi_register_gsi(NULL, irq, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW); if (gsi > 0) break; @@ -939,7 +939,7 @@ static acpi_status hpet_resources(struct irqp = &res->data.extended_irq; for (i = 0; i < irqp->interrupt_count; i++) { - irq = acpi_register_gsi(irqp->interrupts[i], + irq = acpi_register_gsi(NULL, irqp->interrupts[i], irqp->triggering, irqp->polarity); if (irq < 0) return AE_ERROR; Index: linux-2.6/drivers/pnp/pnpacpi/rsparser.c =================================================================== --- linux-2.6.orig/drivers/pnp/pnpacpi/rsparser.c +++ linux-2.6/drivers/pnp/pnpacpi/rsparser.c @@ -123,7 +123,7 @@ static void pnpacpi_parse_allocated_irqr } flags = irq_flags(triggering, polarity, shareable); - irq = acpi_register_gsi(gsi, triggering, polarity); + irq = acpi_register_gsi(&dev->dev, gsi, triggering, polarity); if (irq >= 0) pcibios_penalize_isa_irq(irq, 1); else Index: linux-2.6/include/linux/acpi.h =================================================================== --- linux-2.6.orig/include/linux/acpi.h +++ linux-2.6/include/linux/acpi.h @@ -119,7 +119,7 @@ extern int pci_mmcfg_config_num; extern int sbf_port; extern unsigned long acpi_realmode_flags; -int acpi_register_gsi (u32 gsi, int triggering, int polarity); +int acpi_register_gsi (struct device *dev, u32 gsi, int triggering, int polarity); int acpi_gsi_to_irq (u32 gsi, unsigned int *irq); #ifdef CONFIG_X86_IO_APIC ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2009-05-15 13:06 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <49E68C41.4020801@kernel.org>
[not found] ` <20090416090315.GF9813@elte.hu>
[not found] ` <49E802CE.5030406@kernel.org>
2009-04-17 4:23 ` [PATCH 6/9] irq: make io_apic_set_pci_routing to take device Yinghai Lu
2009-04-23 4:42 ` Len Brown
2009-04-26 21:53 ` [PATCH] x86/acpi: remove compress irq trick for 32bit Yinghai Lu
2009-04-26 21:55 ` [PATCH] x86/acpi: calling mp_config_acpi_gsi in mp_register_gsi Yinghai Lu
2009-04-26 23:25 ` Yinghai Lu
2009-04-27 1:12 ` [PATCH] x86/acpi: calling mp_config_acpi_gsi in mp_register_gsi -v2 Yinghai Lu
2009-04-27 3:30 ` [PATCH] x86/acpi: remove compress irq trick for 32bit Ingo Molnar
2009-05-14 15:41 ` Len Brown
2009-05-15 13:06 ` Ingo Molnar
2009-04-28 1:01 ` [PATCH 6/9] irq: make io_apic_set_pci_routing to take device Yinghai Lu
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).