diff options
author | Alan Mayer <ajm@sgi.com> | 2008-04-15 15:36:56 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-05-12 21:28:06 +0200 |
commit | 305b92a2323eeaa4b481f409d54f778dd7e21a46 (patch) | |
tree | 0f32832b033de27b2ae5909bb06d4eabdd1a9b0b /include/asm-x86/desc.h | |
parent | 1a331957efd214fc3a84f70956dfaec65e70c031 (diff) | |
download | op-kernel-dev-305b92a2323eeaa4b481f409d54f778dd7e21a46.zip op-kernel-dev-305b92a2323eeaa4b481f409d54f778dd7e21a46.tar.gz |
x86: change FIRST_SYSTEM_VECTOR to a variable
The SGI UV system needs several more system vectors than a vanilla
x86_64 system. Rather than burden the other archs with extra system
vectors that they don't use, change FIRST_SYSTEM_VECTOR to a variable,
so that it can be dynamic.
Signed-off-by: Alan Mayer <ajm@sgi.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'include/asm-x86/desc.h')
-rw-r--r-- | include/asm-x86/desc.h | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/include/asm-x86/desc.h b/include/asm-x86/desc.h index 268a012..b3875d4 100644 --- a/include/asm-x86/desc.h +++ b/include/asm-x86/desc.h @@ -311,6 +311,28 @@ static inline void set_intr_gate(unsigned int n, void *addr) _set_gate(n, GATE_INTERRUPT, addr, 0, 0, __KERNEL_CS); } +#define SYS_VECTOR_FREE 0 +#define SYS_VECTOR_ALLOCED 1 + +extern int first_system_vector; +extern char system_vectors[]; + +static inline void alloc_system_vector(int vector) +{ + if (system_vectors[vector] == SYS_VECTOR_FREE) { + system_vectors[vector] = SYS_VECTOR_ALLOCED; + if (first_system_vector > vector) + first_system_vector = vector; + } else + BUG(); +} + +static inline void alloc_intr_gate(unsigned int n, void *addr) +{ + alloc_system_vector(n); + set_intr_gate(n, addr); +} + /* * This routine sets up an interrupt gate at directory privilege level 3. */ |