x86/irq: Standardize on CONFIG_SPARSE_IRQ=y
Sparseirq got introduced in v2.6.28 and Thomas did a huge cleanup around v2.6.38 that eliminated basically all disadvantages of it. So we can remove non-sparseirq support now and simplify our IRQ degrees of freedom a bit. Suggested-and-acked-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Yinghai Lu <yinghai@kernel.org> Link: http://lkml.kernel.org/r/4E95E21D.6090200@oracle.com Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
@@ -64,6 +64,7 @@ config X86
|
|||||||
select HAVE_TEXT_POKE_SMP
|
select HAVE_TEXT_POKE_SMP
|
||||||
select HAVE_GENERIC_HARDIRQS
|
select HAVE_GENERIC_HARDIRQS
|
||||||
select HAVE_SPARSE_IRQ
|
select HAVE_SPARSE_IRQ
|
||||||
|
select SPARSE_IRQ
|
||||||
select GENERIC_FIND_FIRST_BIT
|
select GENERIC_FIND_FIRST_BIT
|
||||||
select GENERIC_IRQ_PROBE
|
select GENERIC_IRQ_PROBE
|
||||||
select GENERIC_PENDING_IRQ if SMP
|
select GENERIC_PENDING_IRQ if SMP
|
||||||
|
@@ -160,19 +160,11 @@ static inline int invalid_vm86_irq(int irq)
|
|||||||
#define IO_APIC_VECTOR_LIMIT ( 32 * MAX_IO_APICS )
|
#define IO_APIC_VECTOR_LIMIT ( 32 * MAX_IO_APICS )
|
||||||
|
|
||||||
#ifdef CONFIG_X86_IO_APIC
|
#ifdef CONFIG_X86_IO_APIC
|
||||||
# ifdef CONFIG_SPARSE_IRQ
|
|
||||||
# define CPU_VECTOR_LIMIT (64 * NR_CPUS)
|
# define CPU_VECTOR_LIMIT (64 * NR_CPUS)
|
||||||
# define NR_IRQS \
|
# define NR_IRQS \
|
||||||
(CPU_VECTOR_LIMIT > IO_APIC_VECTOR_LIMIT ? \
|
(CPU_VECTOR_LIMIT > IO_APIC_VECTOR_LIMIT ? \
|
||||||
(NR_VECTORS + CPU_VECTOR_LIMIT) : \
|
(NR_VECTORS + CPU_VECTOR_LIMIT) : \
|
||||||
(NR_VECTORS + IO_APIC_VECTOR_LIMIT))
|
(NR_VECTORS + IO_APIC_VECTOR_LIMIT))
|
||||||
# else
|
|
||||||
# define CPU_VECTOR_LIMIT (32 * NR_CPUS)
|
|
||||||
# define NR_IRQS \
|
|
||||||
(CPU_VECTOR_LIMIT < IO_APIC_VECTOR_LIMIT ? \
|
|
||||||
(NR_VECTORS + CPU_VECTOR_LIMIT) : \
|
|
||||||
(NR_VECTORS + IO_APIC_VECTOR_LIMIT))
|
|
||||||
# endif
|
|
||||||
#else /* !CONFIG_X86_IO_APIC: */
|
#else /* !CONFIG_X86_IO_APIC: */
|
||||||
# define NR_IRQS NR_IRQS_LEGACY
|
# define NR_IRQS NR_IRQS_LEGACY
|
||||||
#endif
|
#endif
|
||||||
|
@@ -186,11 +186,7 @@ static struct irq_pin_list *alloc_irq_pin_list(int node)
|
|||||||
|
|
||||||
|
|
||||||
/* irq_cfg is indexed by the sum of all RTEs in all I/O APICs. */
|
/* irq_cfg is indexed by the sum of all RTEs in all I/O APICs. */
|
||||||
#ifdef CONFIG_SPARSE_IRQ
|
|
||||||
static struct irq_cfg irq_cfgx[NR_IRQS_LEGACY];
|
static struct irq_cfg irq_cfgx[NR_IRQS_LEGACY];
|
||||||
#else
|
|
||||||
static struct irq_cfg irq_cfgx[NR_IRQS];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int __init arch_early_irq_init(void)
|
int __init arch_early_irq_init(void)
|
||||||
{
|
{
|
||||||
@@ -234,7 +230,6 @@ int __init arch_early_irq_init(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_SPARSE_IRQ
|
|
||||||
static struct irq_cfg *irq_cfg(unsigned int irq)
|
static struct irq_cfg *irq_cfg(unsigned int irq)
|
||||||
{
|
{
|
||||||
return irq_get_chip_data(irq);
|
return irq_get_chip_data(irq);
|
||||||
@@ -269,22 +264,6 @@ static void free_irq_cfg(unsigned int at, struct irq_cfg *cfg)
|
|||||||
kfree(cfg);
|
kfree(cfg);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
struct irq_cfg *irq_cfg(unsigned int irq)
|
|
||||||
{
|
|
||||||
return irq < nr_irqs ? irq_cfgx + irq : NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct irq_cfg *alloc_irq_cfg(unsigned int irq, int node)
|
|
||||||
{
|
|
||||||
return irq_cfgx + irq;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void free_irq_cfg(unsigned int at, struct irq_cfg *cfg) { }
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static struct irq_cfg *alloc_irq_and_cfg_at(unsigned int at, int node)
|
static struct irq_cfg *alloc_irq_and_cfg_at(unsigned int at, int node)
|
||||||
{
|
{
|
||||||
int res = irq_alloc_desc_at(at, node);
|
int res = irq_alloc_desc_at(at, node);
|
||||||
@@ -3644,7 +3623,6 @@ int get_nr_irqs_gsi(void)
|
|||||||
return nr_irqs_gsi;
|
return nr_irqs_gsi;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_SPARSE_IRQ
|
|
||||||
int __init arch_probe_nr_irqs(void)
|
int __init arch_probe_nr_irqs(void)
|
||||||
{
|
{
|
||||||
int nr;
|
int nr;
|
||||||
@@ -3664,7 +3642,6 @@ int __init arch_probe_nr_irqs(void)
|
|||||||
|
|
||||||
return NR_IRQS_LEGACY;
|
return NR_IRQS_LEGACY;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
int io_apic_set_pci_routing(struct device *dev, int irq,
|
int io_apic_set_pci_routing(struct device *dev, int irq,
|
||||||
struct io_apic_irq_attr *irq_attr)
|
struct io_apic_irq_attr *irq_attr)
|
||||||
|
Reference in New Issue
Block a user