diff options
author | Yinghai Lu <yinghai@kernel.org> | 2009-01-25 05:38:09 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-01-26 17:37:11 -0500 |
commit | bb3f0b59ad005d2d2ecbbe9bd048eab6d1ecbd31 (patch) | |
tree | fd503e9a65bd77601cea99a892a031c6ba086fd8 /arch/x86/kernel/traps.c | |
parent | 3415dd9146c574bffe8f012c096bfc2bc62b9508 (diff) |
x86: make irqinit_32.c more like irqinit_64.c, v2
Impact: cleanup
1. add smp_intr_init and apic_intr_init for 32bit, the same as 64bit
2. move the apic_intr_init() call before set gate with interrupt[i]
3. for 64bit, if ia32_emulation is not used, will make per_cpu to use 0x80 vector.
[ v2: should use !test_bit() instead of test_bit() with 32bit ]
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/traps.c')
-rw-r--r-- | arch/x86/kernel/traps.c | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c index ed5aee5f3fcc..d36a502d87ab 100644 --- a/arch/x86/kernel/traps.c +++ b/arch/x86/kernel/traps.c | |||
@@ -979,8 +979,13 @@ void __init trap_init(void) | |||
979 | #endif | 979 | #endif |
980 | set_intr_gate(19, &simd_coprocessor_error); | 980 | set_intr_gate(19, &simd_coprocessor_error); |
981 | 981 | ||
982 | /* Reserve all the builtin and the syscall vector: */ | ||
983 | for (i = 0; i < FIRST_EXTERNAL_VECTOR; i++) | ||
984 | set_bit(i, used_vectors); | ||
985 | |||
982 | #ifdef CONFIG_IA32_EMULATION | 986 | #ifdef CONFIG_IA32_EMULATION |
983 | set_system_intr_gate(IA32_SYSCALL_VECTOR, ia32_syscall); | 987 | set_system_intr_gate(IA32_SYSCALL_VECTOR, ia32_syscall); |
988 | set_bit(IA32_SYSCALL_VECTOR, used_vectors); | ||
984 | #endif | 989 | #endif |
985 | 990 | ||
986 | #ifdef CONFIG_X86_32 | 991 | #ifdef CONFIG_X86_32 |
@@ -997,17 +1002,9 @@ void __init trap_init(void) | |||
997 | } | 1002 | } |
998 | 1003 | ||
999 | set_system_trap_gate(SYSCALL_VECTOR, &system_call); | 1004 | set_system_trap_gate(SYSCALL_VECTOR, &system_call); |
1000 | #endif | ||
1001 | |||
1002 | /* Reserve all the builtin and the syscall vector: */ | ||
1003 | for (i = 0; i < FIRST_EXTERNAL_VECTOR; i++) | ||
1004 | set_bit(i, used_vectors); | ||
1005 | |||
1006 | #ifdef CONFIG_X86_64 | ||
1007 | set_bit(IA32_SYSCALL_VECTOR, used_vectors); | ||
1008 | #else | ||
1009 | set_bit(SYSCALL_VECTOR, used_vectors); | 1005 | set_bit(SYSCALL_VECTOR, used_vectors); |
1010 | #endif | 1006 | #endif |
1007 | |||
1011 | /* | 1008 | /* |
1012 | * Should be a barrier for any external CPU state: | 1009 | * Should be a barrier for any external CPU state: |
1013 | */ | 1010 | */ |