Introduce "used_vectors" bitmap which can be used to reserve vectors.
A message that is not in the archive (sent off-list or not yet received): [email protected]
A message that is not in the archive (sent off-list or not yet received): [email protected]
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH 5/5 Introduce "used_vectors" bitmap which can be used to reserve vectors.
This simplifies the io_apic.c __assign_irq_vector() logic and removes the explicit SYSCALL_VECTOR check, and also allows for vectors to be reserved by other mechanisms (ie. lguest).
--- arch/x86/kernel/i8259_32.c | 3 ++- arch/x86/kernel/io_apic_32.c | 13 ++++++++----- arch/x86/kernel/traps_32.c | 10 ++++++++++ include/asm-x86/irq_32.h | 3 +++ 4 files changed, 23 insertions(+), 6 deletions(-)
===================================================================
arch/x86/kernel/i8259_32.c +2 -1
@@ -400,7 +400,8 @@ void __init native_init_IRQ(void)int vector =FIRST_EXTERNAL_VECTOR + i;if (i >=NR_IRQS )break ; -if (vector !=SYSCALL_VECTOR ) +/* SYSCALL_VECTOR was reserved in trap_init. */ +if (!test_bit (vector, used_vectors))set_intr_gate (vector, interrupt[i]); }
===================================================================
arch/x86/kernel/io_apic_32.c +8 -5
@@ -1198,7 +1198,7 @@ static int __assign_irq_vector(int irq)static int __assign_irq_vector (int irq) {static int current_vector =FIRST_DEVICE_VECTOR , current_offset =0 ; -int vector, offset, i; +int vector, offset;BUG_ON ((unsigned )irq >=NR_IRQ_VECTORS );
@@ -1215,11 +1215,8 @@ next: }if (vector == current_vector)return -ENOSPC ; -if (vector ==SYSCALL_VECTOR ) +if (test_and_set_bit (vector, used_vectors)) goto next; -for (i =0 ; i <NR_IRQ_VECTORS ; i++) -if (irq_vector[i] == vector) - goto next; current_vector = vector; current_offset = offset;
@@ -2290,6 +2287,12 @@ static inline void __init check_timer(vovoid __init setup_IO_APIC (void ) { +int i; + +/* Reserve all the system vectors. */ +for (i =FIRST_SYSTEM_VECTOR ; i <NR_VECTORS ; i++) +set_bit (i, used_vectors); +enable_IO_APIC ();if (acpi_ioapic)
===================================================================
arch/x86/kernel/traps_32.c +10 -0
@@ -64,6 +64,9 @@#include "mach_traps.h" int panic_on_unrecovered_nmi; + +DECLARE_BITMAP (used_vectors,NR_VECTORS ); +EXPORT_SYMBOL_GPL (used_vectors); asmlinkage int system_call(void);
@@ -1156,6 +1159,8 @@ static void __init set_task_gate(unsignevoid __init trap_init (void ) { +int i; +#ifdef CONFIG_EISA void __iomem *p =ioremap (0x0FFFD9 ,4 );if (readl (p) =='E' +('I' <<8 )+('S' <<16 )+('A' <<24 )) {
@@ -1215,6 +1220,11 @@ void __init trap_init(void)set_system_gate (SYSCALL_VECTOR ,&system_call); +/* Reserve all the builtin and the syscall vector. */ +for (i =0 ; i <FIRST_EXTERNAL_VECTOR ; i++) +set_bit (i, used_vectors); +set_bit (SYSCALL_VECTOR , used_vectors); +/* * Should be a barrier for any external CPU state. */
===================================================================
include/asm-x86/irq_32.h +3 -0
@@ -45,4 +45,7 @@ void init_IRQ(void);void init_IRQ (void );void __init native_init_IRQ (void ); +/* Interrupt vector management */ +extern DECLARE_BITMAP(used_vectors, NR_VECTORS); +#endif /* _ASM_IRQ_H */
Quoted 3 lines · On Wed, 17 Oct 2007 20:56:04 +1000 Rusty Russell <[email protected]> wrote:
This simplifies the
io_apic.c__assign_irq_vector()logic and removes the explicitSYSCALL_VECTORcheck, and also allows for vectors to be reserved by other mechanisms (ie. lguest).
I already have this one as x86_64-mm-introduce-used_vectors-bitmap-which-can-be-used-to-reserve-vectors.patch
- part of the firstfloor tree.
Thomas is going through those patches and is getting them merged up - a large batch went through today.
So I assume he'll me merging this patch via that route, unless he has decided to skip it for some reason.
Either way, I guess I'll hang onto the firstfloor.org leftovers until each one has some sort of definite disposition.
Quoted 11 lines · Andrew Morton
Quoted 3 lines · On Wed, 17 Oct 2007 20:56:04 +1000 Rusty Russell <[email protected]> wrote:
This simplifies the
io_apic.c__assign_irq_vector()logic and removes the explicitSYSCALL_VECTORcheck, and also allows for vectors to be reserved by other mechanisms (ie. lguest).I already have this one as x86_64-mm-introduce-used_vectors-bitmap-which-can-be-used-to-reserve-vectors.patch
- part of the firstfloor tree.
Quoted 8 lines
Thomas is going through those patches and is getting them merged up - a large batch went through today.
So I assume he'll me merging this patch via that route, unless he has decided to skip it for some reason.
Either way, I guess I'll hang onto the firstfloor.org leftovers until each one has some sort of definite disposition.
It's in the "needs review" batch and I push out a git branch with the ones in our backlog when I'm done with picking up stuff here and there.
tglx