aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2008-11-11 16:03:07 -0500
committerH. Peter Anvin <hpa@zytor.com>2008-11-11 16:03:07 -0500
commit4687518c4cb7807fbeff21770e309080f9eb7f2f (patch)
treead5a423f3f70a0ab3ca16dd8a4a9a1aabdf94986 /arch/x86/kernel
parentf21f237cf55494c3a4209de323281a3b0528da10 (diff)
x86: 32 bit: interrupt stub consistency with 64 bit
Don't generate interrupt stubs for interrupt vectors below FIRST_EXTERNAL_VECTOR, and make the table of interrupt vectors (interrupt[]) __initconst. Both of these changes both conserve memory and improve consistency with 64 bits. Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'arch/x86/kernel')
-rw-r--r--arch/x86/kernel/entry_32.S6
-rw-r--r--arch/x86/kernel/irqinit_32.c2
2 files changed, 4 insertions, 4 deletions
diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S
index 28b597ef9ca1..4aea95652cff 100644
--- a/arch/x86/kernel/entry_32.S
+++ b/arch/x86/kernel/entry_32.S
@@ -622,16 +622,16 @@ END(syscall_badsys)
622 * Build the entry stubs and pointer table with 622 * Build the entry stubs and pointer table with
623 * some assembler magic. 623 * some assembler magic.
624 */ 624 */
625.section .rodata,"a" 625.section .init.rodata,"a"
626ENTRY(interrupt) 626ENTRY(interrupt)
627.text 627.text
628 628
629ENTRY(irq_entries_start) 629ENTRY(irq_entries_start)
630 RING0_INT_FRAME 630 RING0_INT_FRAME
631vector=0 631vector=FIRST_EXTERNAL_VECTOR
632.rept NR_VECTORS 632.rept NR_VECTORS
633 ALIGN 633 ALIGN
634 .if vector 634 .if vector != FIRST_EXTERNAL_VECTOR
635 CFI_ADJUST_CFA_OFFSET -4 635 CFI_ADJUST_CFA_OFFSET -4
636 .endif 636 .endif
6371: pushl $~(vector) 6371: pushl $~(vector)
diff --git a/arch/x86/kernel/irqinit_32.c b/arch/x86/kernel/irqinit_32.c
index 845aa9803e80..607db63044a5 100644
--- a/arch/x86/kernel/irqinit_32.c
+++ b/arch/x86/kernel/irqinit_32.c
@@ -129,7 +129,7 @@ void __init native_init_IRQ(void)
129 for (i = FIRST_EXTERNAL_VECTOR; i < NR_VECTORS; i++) { 129 for (i = FIRST_EXTERNAL_VECTOR; i < NR_VECTORS; i++) {
130 /* SYSCALL_VECTOR was reserved in trap_init. */ 130 /* SYSCALL_VECTOR was reserved in trap_init. */
131 if (i != SYSCALL_VECTOR) 131 if (i != SYSCALL_VECTOR)
132 set_intr_gate(i, interrupt[i]); 132 set_intr_gate(i, interrupt[i-FIRST_EXTERNAL_VECTOR]);
133 } 133 }
134 134
135 135