From: Eric W. Biederman By precomputing old_mask I remove an extra if statement, remove an indentation level and make the code slightly easier to read. This comes before my bugfix in the next patch so the patch and the resulting code stay readable. Signed-off-by: Eric W. Biederman Cc: Andi Kleen Signed-off-by: Andrew Morton --- arch/x86_64/kernel/io_apic.c | 13 +++++-------- 1 files changed, 5 insertions(+), 8 deletions(-) diff -puN arch/x86_64/kernel/io_apic.c~x86_64-irq-simplfy-__assign_irq_vector arch/x86_64/kernel/io_apic.c --- a/arch/x86_64/kernel/io_apic.c~x86_64-irq-simplfy-__assign_irq_vector +++ a/arch/x86_64/kernel/io_apic.c @@ -685,6 +685,7 @@ static int __assign_irq_vector(int irq, * 0x80, because int 0x80 is hm, kind of importantish. ;) */ static int current_vector = FIRST_DEVICE_VECTOR, current_offset = 0; + cpumask_t old_mask = CPU_MASK_NONE; int old_vector = -1; int cpu; @@ -699,11 +700,12 @@ static int __assign_irq_vector(int irq, cpus_and(*result, irq_domain[irq], mask); if (!cpus_empty(*result)) return old_vector; + cpus_and(old_mask, irq_domain[irq], cpu_online_map); } for_each_cpu_mask(cpu, mask) { cpumask_t domain, new_mask; - int new_cpu; + int new_cpu, old_cpu; int vector, offset; domain = vector_allocation_domain(cpu); @@ -728,13 +730,8 @@ next: /* Found one! */ current_vector = vector; current_offset = offset; - if (old_vector >= 0) { - cpumask_t old_mask; - int old_cpu; - cpus_and(old_mask, irq_domain[irq], cpu_online_map); - for_each_cpu_mask(old_cpu, old_mask) - per_cpu(vector_irq, old_cpu)[old_vector] = -1; - } + for_each_cpu_mask(old_cpu, old_mask) + per_cpu(vector_irq, old_cpu)[old_vector] = -1; for_each_cpu_mask(new_cpu, new_mask) per_cpu(vector_irq, new_cpu)[vector] = irq; irq_vector[irq] = vector; _