diff options
Diffstat (limited to 'arch/x86/include/asm/hw_irq.h')
| -rw-r--r-- | arch/x86/include/asm/hw_irq.h | 35 | 
1 files changed, 27 insertions, 8 deletions
| diff --git a/arch/x86/include/asm/hw_irq.h b/arch/x86/include/asm/hw_irq.h index ba180d93b08c..eeac829a0f44 100644 --- a/arch/x86/include/asm/hw_irq.h +++ b/arch/x86/include/asm/hw_irq.h @@ -27,7 +27,7 @@  /* Interrupt handlers registered during init_IRQ */  extern void apic_timer_interrupt(void); -extern void generic_interrupt(void); +extern void x86_platform_ipi(void);  extern void error_interrupt(void);  extern void perf_pending_interrupt(void); @@ -79,14 +79,33 @@ static inline void set_io_apic_irq_attr(struct io_apic_irq_attr *irq_attr,  					int ioapic, int ioapic_pin,  					int trigger, int polarity)  { -	irq_attr->ioapic     = ioapic; -	irq_attr->ioapic_pin = ioapic_pin; -	irq_attr->trigger    = trigger; -	irq_attr->polarity   = polarity; +	irq_attr->ioapic	= ioapic; +	irq_attr->ioapic_pin	= ioapic_pin; +	irq_attr->trigger	= trigger; +	irq_attr->polarity	= polarity;  } -extern int IO_APIC_get_PCI_irq_vector(int bus, int devfn, int pin, -					struct io_apic_irq_attr *irq_attr); +/* + * This is performance-critical, we want to do it O(1) + * + * Most irqs are mapped 1:1 with pins. + */ +struct irq_cfg { +	struct irq_pin_list	*irq_2_pin; +	cpumask_var_t		domain; +	cpumask_var_t		old_domain; +	u8			vector; +	u8			move_in_progress : 1; +}; + +extern struct irq_cfg *irq_cfg(unsigned int); +extern int assign_irq_vector(int, struct irq_cfg *, const struct cpumask *); +extern void send_cleanup_vector(struct irq_cfg *); + +struct irq_desc; +extern unsigned int set_desc_affinity(struct irq_desc *, const struct cpumask *, +				      unsigned int *dest_id); +extern int IO_APIC_get_PCI_irq_vector(int bus, int devfn, int pin, struct io_apic_irq_attr *irq_attr);  extern void setup_ioapic_dest(void);  extern void enable_IO_APIC(void); @@ -101,7 +120,7 @@ extern void eisa_set_level_irq(unsigned int irq);  /* SMP */  extern void smp_apic_timer_interrupt(struct pt_regs *);  extern void smp_spurious_interrupt(struct pt_regs *); -extern void smp_generic_interrupt(struct pt_regs *); +extern void smp_x86_platform_ipi(struct pt_regs *);  extern void smp_error_interrupt(struct pt_regs *);  #ifdef CONFIG_X86_IO_APIC  extern asmlinkage void smp_irq_move_cleanup_interrupt(void); | 
