diff options
Diffstat (limited to 'arch/x86/kernel/irq.c')
| -rw-r--r-- | arch/x86/kernel/irq.c | 16 | 
1 files changed, 12 insertions, 4 deletions
diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c index 283a76a9cc40..11ccfb0a63e7 100644 --- a/arch/x86/kernel/irq.c +++ b/arch/x86/kernel/irq.c @@ -17,6 +17,7 @@  #include <asm/idle.h>  #include <asm/mce.h>  #include <asm/hw_irq.h> +#include <asm/desc.h>  #define CREATE_TRACE_POINTS  #include <asm/trace/irq_vectors.h> @@ -334,10 +335,17 @@ int check_irq_vectors_for_cpu_disable(void)  	for_each_online_cpu(cpu) {  		if (cpu == this_cpu)  			continue; -		for (vector = FIRST_EXTERNAL_VECTOR; vector < NR_VECTORS; -		     vector++) { -			if (per_cpu(vector_irq, cpu)[vector] < 0) -				count++; +		/* +		 * We scan from FIRST_EXTERNAL_VECTOR to first system +		 * vector. If the vector is marked in the used vectors +		 * bitmap or an irq is assigned to it, we don't count +		 * it as available. +		 */ +		for (vector = FIRST_EXTERNAL_VECTOR; +		     vector < first_system_vector; vector++) { +			if (!test_bit(vector, used_vectors) && +			    per_cpu(vector_irq, cpu)[vector] < 0) +					count++;  		}  	}  | 
