mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
[PATCH] genirq: cleanup: merge irq_affinity[] into irq_desc[]
Consolidation: remove the irq_affinity[NR_IRQS] array and move it into the irq_desc[NR_IRQS].affinity field. [akpm@osdl.org: sparc64 build fix] Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
74ffd553a3
commit
a53da52fd7
14 changed files with 26 additions and 24 deletions
|
@ -56,7 +56,7 @@ select_smp_affinity(unsigned int irq)
|
|||
cpu = (cpu < (NR_CPUS-1) ? cpu + 1 : 0);
|
||||
last_cpu = cpu;
|
||||
|
||||
irq_affinity[irq] = cpumask_of_cpu(cpu);
|
||||
irq_desc[irq].affinity = cpumask_of_cpu(cpu);
|
||||
irq_desc[irq].chip->set_affinity(irq, cpumask_of_cpu(cpu));
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -291,7 +291,7 @@ void fixup_irqs(cpumask_t map)
|
|||
if (irq == 2)
|
||||
continue;
|
||||
|
||||
cpus_and(mask, irq_affinity[irq], map);
|
||||
cpus_and(mask, irq_desc[irq].affinity, map);
|
||||
if (any_online_cpu(mask) == NR_CPUS) {
|
||||
printk("Breaking affinity for irq %i\n", irq);
|
||||
mask = map;
|
||||
|
|
|
@ -100,7 +100,7 @@ void set_irq_affinity_info (unsigned int irq, int hwid, int redir)
|
|||
cpu_set(cpu_logical_id(hwid), mask);
|
||||
|
||||
if (irq < NR_IRQS) {
|
||||
irq_affinity[irq] = mask;
|
||||
irq_desc[irq].affinity = mask;
|
||||
irq_redir[irq] = (char) (redir & 0xff);
|
||||
}
|
||||
}
|
||||
|
@ -131,7 +131,7 @@ static void migrate_irqs(void)
|
|||
if (desc->status == IRQ_PER_CPU)
|
||||
continue;
|
||||
|
||||
cpus_and(mask, irq_affinity[irq], cpu_online_map);
|
||||
cpus_and(mask, irq_desc[irq].affinity, cpu_online_map);
|
||||
if (any_online_cpu(mask) == NR_CPUS) {
|
||||
/*
|
||||
* Save it for phase 2 processing
|
||||
|
|
|
@ -94,7 +94,7 @@ int cpu_check_affinity(unsigned int irq, cpumask_t *dest)
|
|||
if (irq == TIMER_IRQ || irq == IPI_IRQ) {
|
||||
/* Bad linux design decision. The mask has already
|
||||
* been set; we must reset it */
|
||||
irq_affinity[irq] = CPU_MASK_ALL;
|
||||
irq_desc[irq].affinity = CPU_MASK_ALL;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -110,7 +110,7 @@ static void cpu_set_affinity_irq(unsigned int irq, cpumask_t dest)
|
|||
if (cpu_check_affinity(irq, &dest))
|
||||
return;
|
||||
|
||||
irq_affinity[irq] = dest;
|
||||
irq_desc[irq].affinity = dest;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -265,7 +265,7 @@ int txn_alloc_irq(unsigned int bits_wide)
|
|||
unsigned long txn_affinity_addr(unsigned int irq, int cpu)
|
||||
{
|
||||
#ifdef CONFIG_SMP
|
||||
irq_affinity[irq] = cpumask_of_cpu(cpu);
|
||||
irq_desc[irq].affinity = cpumask_of_cpu(cpu);
|
||||
#endif
|
||||
|
||||
return cpu_data[cpu].txn_addr;
|
||||
|
@ -326,7 +326,7 @@ void do_cpu_irq_mask(struct pt_regs *regs)
|
|||
/* Work our way from MSb to LSb...same order we alloc EIRs */
|
||||
for (irq = TIMER_IRQ; eirr_val && bit; bit>>=1, irq++) {
|
||||
#ifdef CONFIG_SMP
|
||||
cpumask_t dest = irq_affinity[irq];
|
||||
cpumask_t dest = irq_desc[irq].affinity;
|
||||
#endif
|
||||
if (!(bit & eirr_val))
|
||||
continue;
|
||||
|
|
|
@ -164,7 +164,7 @@ void fixup_irqs(cpumask_t map)
|
|||
if (irq_desc[irq].status & IRQ_PER_CPU)
|
||||
continue;
|
||||
|
||||
cpus_and(mask, irq_affinity[irq], map);
|
||||
cpus_and(mask, irq_desc[irq].affinity, map);
|
||||
if (any_online_cpu(mask) == NR_CPUS) {
|
||||
printk("Breaking affinity for irq %i\n", irq);
|
||||
mask = map;
|
||||
|
|
|
@ -238,7 +238,7 @@ static int get_irq_server(unsigned int irq)
|
|||
{
|
||||
unsigned int server;
|
||||
/* For the moment only implement delivery to all cpus or one cpu */
|
||||
cpumask_t cpumask = irq_affinity[irq];
|
||||
cpumask_t cpumask = irq_desc[irq].affinity;
|
||||
cpumask_t tmp = CPU_MASK_NONE;
|
||||
|
||||
if (!distribute_irqs)
|
||||
|
@ -729,7 +729,7 @@ void xics_migrate_irqs_away(void)
|
|||
|
||||
/* Reset affinity to all cpus */
|
||||
desc->chip->set_affinity(virq, CPU_MASK_ALL);
|
||||
irq_affinity[virq] = CPU_MASK_ALL;
|
||||
irq_desc[irq].affinity = CPU_MASK_ALL;
|
||||
unlock:
|
||||
spin_unlock_irqrestore(&desc->lock, flags);
|
||||
}
|
||||
|
|
|
@ -906,7 +906,7 @@ void mpic_setup_this_cpu(void)
|
|||
/* let the mpic know we want intrs. default affinity is 0xffffffff
|
||||
* until changed via /proc. That's how it's done on x86. If we want
|
||||
* it differently, then we should make sure we also change the default
|
||||
* values of irq_affinity in irq.c.
|
||||
* values of irq_desc[].affinity in irq.c.
|
||||
*/
|
||||
if (distribute_irqs) {
|
||||
for (i = 0; i < mpic->num_sources ; i++)
|
||||
|
|
|
@ -615,8 +615,8 @@ void __devinit do_openpic_setup_cpu(void)
|
|||
/* let the openpic know we want intrs. default affinity
|
||||
* is 0xffffffff until changed via /proc
|
||||
* That's how it's done on x86. If we want it differently, then
|
||||
* we should make sure we also change the default values of irq_affinity
|
||||
* in irq.c.
|
||||
* we should make sure we also change the default values of
|
||||
* irq_desc[].affinity in irq.c.
|
||||
*/
|
||||
for (i = 0; i < NumSources; i++)
|
||||
openpic_mapirq(i, msk, CPU_MASK_ALL);
|
||||
|
|
|
@ -224,7 +224,7 @@ static inline struct ino_bucket *virt_irq_to_bucket(unsigned int virt_irq)
|
|||
#ifdef CONFIG_SMP
|
||||
static int irq_choose_cpu(unsigned int virt_irq)
|
||||
{
|
||||
cpumask_t mask = irq_affinity[virt_irq];
|
||||
cpumask_t mask = irq_desc[virt_irq].affinity;
|
||||
int cpuid;
|
||||
|
||||
if (cpus_equal(mask, CPU_MASK_ALL)) {
|
||||
|
|
|
@ -146,7 +146,7 @@ void fixup_irqs(cpumask_t map)
|
|||
if (irq == 2)
|
||||
continue;
|
||||
|
||||
cpus_and(mask, irq_affinity[irq], map);
|
||||
cpus_and(mask, irq_desc[irq].affinity, map);
|
||||
if (any_online_cpu(mask) == NR_CPUS) {
|
||||
printk("Breaking affinity for irq %i\n", irq);
|
||||
mask = map;
|
||||
|
|
|
@ -77,6 +77,9 @@ typedef struct irq_desc {
|
|||
unsigned int irq_count; /* For detecting broken interrupts */
|
||||
unsigned int irqs_unhandled;
|
||||
spinlock_t lock;
|
||||
#ifdef CONFIG_SMP
|
||||
cpumask_t affinity;
|
||||
#endif
|
||||
#if defined (CONFIG_GENERIC_PENDING_IRQ) || defined (CONFIG_IRQBALANCE)
|
||||
unsigned int move_irq; /* Flag need to re-target intr dest*/
|
||||
#endif
|
||||
|
@ -96,12 +99,10 @@ irq_descp (int irq)
|
|||
extern int setup_irq(unsigned int irq, struct irqaction * new);
|
||||
|
||||
#ifdef CONFIG_GENERIC_HARDIRQS
|
||||
extern cpumask_t irq_affinity[NR_IRQS];
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
static inline void set_native_irq_info(int irq, cpumask_t mask)
|
||||
{
|
||||
irq_affinity[irq] = mask;
|
||||
irq_desc[irq].affinity = mask;
|
||||
}
|
||||
#else
|
||||
static inline void set_native_irq_info(int irq, cpumask_t mask)
|
||||
|
|
|
@ -32,7 +32,10 @@ irq_desc_t irq_desc[NR_IRQS] __cacheline_aligned = {
|
|||
[0 ... NR_IRQS-1] = {
|
||||
.status = IRQ_DISABLED,
|
||||
.chip = &no_irq_type,
|
||||
.lock = SPIN_LOCK_UNLOCKED
|
||||
.lock = SPIN_LOCK_UNLOCKED,
|
||||
#ifdef CONFIG_SMP
|
||||
.affinity = CPU_MASK_ALL
|
||||
#endif
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -16,8 +16,6 @@
|
|||
|
||||
#ifdef CONFIG_SMP
|
||||
|
||||
cpumask_t irq_affinity[NR_IRQS] = { [0 ... NR_IRQS-1] = CPU_MASK_ALL };
|
||||
|
||||
#if defined (CONFIG_GENERIC_PENDING_IRQ) || defined (CONFIG_IRQBALANCE)
|
||||
cpumask_t __cacheline_aligned pending_irq_cpumask[NR_IRQS];
|
||||
#endif
|
||||
|
|
|
@ -36,7 +36,7 @@ void proc_set_irq_affinity(unsigned int irq, cpumask_t mask_val)
|
|||
void proc_set_irq_affinity(unsigned int irq, cpumask_t mask_val)
|
||||
{
|
||||
set_balance_irq_affinity(irq, mask_val);
|
||||
irq_affinity[irq] = mask_val;
|
||||
irq_desc[irq].affinity = mask_val;
|
||||
irq_desc[irq].chip->set_affinity(irq, mask_val);
|
||||
}
|
||||
#endif
|
||||
|
@ -44,7 +44,7 @@ void proc_set_irq_affinity(unsigned int irq, cpumask_t mask_val)
|
|||
static int irq_affinity_read_proc(char *page, char **start, off_t off,
|
||||
int count, int *eof, void *data)
|
||||
{
|
||||
int len = cpumask_scnprintf(page, count, irq_affinity[(long)data]);
|
||||
int len = cpumask_scnprintf(page, count, irq_desc[(long)data].affinity);
|
||||
|
||||
if (count - len < 2)
|
||||
return -EINVAL;
|
||||
|
|
Loading…
Reference in a new issue