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@xxxxxxxxxx> > > --- > 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 > -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html