From: "Eric W. Biederman" This moves the declarations for the architecture helpers into include/linux/htirq.h from the generic include/linux/pci.h. Hopefully this will make this distinction clearer. htirq.h is included where it is needed. The dependency on the msi code is fixed and removed. The Makefile is tidied up. Signed-off-by: Eric W. Biederman Cc: Ingo Molnar Cc: Tony Luck Cc: Andi Kleen Cc: Thomas Gleixner Cc: Greg KH Cc: Benjamin Herrenschmidt Signed-off-by: Andrew Morton --- arch/i386/kernel/io_apic.c | 5 ++--- arch/x86_64/kernel/io_apic.c | 1 + drivers/pci/Kconfig | 1 - drivers/pci/Makefile | 4 +++- drivers/pci/htirq.c | 1 + include/linux/htirq.h | 15 +++++++++++++++ include/linux/pci.h | 11 ----------- 7 files changed, 22 insertions(+), 16 deletions(-) diff -puN arch/i386/kernel/io_apic.c~htirq-tidy-up-the-htirq-code arch/i386/kernel/io_apic.c --- a/arch/i386/kernel/io_apic.c~htirq-tidy-up-the-htirq-code +++ a/arch/i386/kernel/io_apic.c @@ -33,6 +33,7 @@ #include #include #include +#include #include #include @@ -2409,9 +2410,8 @@ static int __init ioapic_init_sysfs(void device_initcall(ioapic_init_sysfs); -#ifdef CONFIG_PCI_MSI /* - * Dynamic irq allocate and deallocation for MSI + * Dynamic irq allocate and deallocation */ int create_irq(void) { @@ -2450,7 +2450,6 @@ void destroy_irq(unsigned int irq) irq_vector[irq] = 0; spin_unlock_irqrestore(&vector_lock, flags); } -#endif /* CONFIG_PCI_MSI */ /* * MSI mesage composition diff -puN arch/x86_64/kernel/io_apic.c~htirq-tidy-up-the-htirq-code arch/x86_64/kernel/io_apic.c --- a/arch/x86_64/kernel/io_apic.c~htirq-tidy-up-the-htirq-code +++ a/arch/x86_64/kernel/io_apic.c @@ -31,6 +31,7 @@ #include #include #include +#include #ifdef CONFIG_ACPI #include #endif diff -puN drivers/pci/Kconfig~htirq-tidy-up-the-htirq-code drivers/pci/Kconfig --- a/drivers/pci/Kconfig~htirq-tidy-up-the-htirq-code +++ a/drivers/pci/Kconfig @@ -55,7 +55,6 @@ config PCI_DEBUG config HT_IRQ bool "Interrupts on hypertransport devices" default y - depends on PCI_MSI depends on X86_LOCAL_APIC && X86_IO_APIC help This allows native hypertransport devices to use interrupts. diff -puN drivers/pci/Makefile~htirq-tidy-up-the-htirq-code drivers/pci/Makefile --- a/drivers/pci/Makefile~htirq-tidy-up-the-htirq-code +++ a/drivers/pci/Makefile @@ -17,6 +17,9 @@ obj-$(CONFIG_HOTPLUG_PCI) += hotplug/ # Build the PCI MSI interrupt support obj-$(CONFIG_PCI_MSI) += msi.o +# Build the Hypertransport interrupt support +obj-$(CONFIG_HT_IRQ) += htirq.o + # # Some architectures use the generic PCI setup functions # @@ -29,7 +32,6 @@ obj-$(CONFIG_PPC32) += setup-irq.o obj-$(CONFIG_PPC64) += setup-bus.o obj-$(CONFIG_MIPS) += setup-bus.o setup-irq.o obj-$(CONFIG_X86_VISWS) += setup-irq.o -obj-$(CONFIG_HT_IRQ) += htirq.o # # ACPI Related PCI FW Functions diff -puN drivers/pci/htirq.c~htirq-tidy-up-the-htirq-code drivers/pci/htirq.c --- a/drivers/pci/htirq.c~htirq-tidy-up-the-htirq-code +++ a/drivers/pci/htirq.c @@ -11,6 +11,7 @@ #include #include #include +#include /* Global ht irq lock. * diff -puN /dev/null include/linux/htirq.h --- /dev/null +++ a/include/linux/htirq.h @@ -0,0 +1,15 @@ +#ifndef LINUX_HTIRQ_H +#define LINUX_HTIRQ_H + +/* Helper functions.. */ +void write_ht_irq_low(unsigned int irq, u32 data); +void write_ht_irq_high(unsigned int irq, u32 data); +u32 read_ht_irq_low(unsigned int irq); +u32 read_ht_irq_high(unsigned int irq); +void mask_ht_irq(unsigned int irq); +void unmask_ht_irq(unsigned int irq); + +/* The arch hook for getting things started */ +int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev); + +#endif /* LINUX_HTIRQ_H */ diff -puN include/linux/pci.h~htirq-tidy-up-the-htirq-code include/linux/pci.h --- a/include/linux/pci.h~htirq-tidy-up-the-htirq-code +++ a/include/linux/pci.h @@ -616,20 +616,9 @@ extern void msi_remove_pci_irq_vectors(s #endif #ifdef CONFIG_HT_IRQ -/* Helper functions.. */ -void write_ht_irq_low(unsigned int irq, u32 data); -void write_ht_irq_high(unsigned int irq, u32 data); -u32 read_ht_irq_low(unsigned int irq); -u32 read_ht_irq_high(unsigned int irq); -void mask_ht_irq(unsigned int irq); -void unmask_ht_irq(unsigned int irq); - /* The functions a driver should call */ int ht_create_irq(struct pci_dev *dev, int idx); void ht_destroy_irq(unsigned int irq); - -/* The arch hook for getting things started */ -int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev); #endif /* CONFIG_HT_IRQ */ extern void pci_block_user_cfg_access(struct pci_dev *dev); _