The patch titled x86: increase interrupt vector range has been added to the -mm tree. Its filename is x86-increase-interrupt-vector-range.patch See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find out what to do about this From: Rusty Russell <rusty@xxxxxxxxxxxxxxx> Remove the limit of 256 interrupt vectors by changing the value stored in orig_{e,r}ax to be the complemented interrupt vector. The orig_{e,r}ax needs to be < 0 to allow the signal code to distinguish between return from interrupt and return from syscall. With this change applied, NR_IRQS can be > 256. Xen extends the IRQ numbering space to include room for dynamically allocated virtual interrupts (in the range 256-511), which requires a more permissive interface to do_IRQ. Signed-off-by: Ian Pratt <ian.pratt@xxxxxxxxxxxxx> Signed-off-by: Christian Limpach <Christian.Limpach@xxxxxxxxxxxx> Signed-off-by: Chris Wright <chrisw@xxxxxxxxxxxx> Signed-off-by: Rusty Russell <rusty@xxxxxxxxxxxxxxx> Cc: "Protasevich, Natalie" <Natalie.Protasevich@xxxxxxxxxx> Cc: Andi Kleen <ak@xxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxx> --- arch/i386/kernel/entry.S | 4 ++-- arch/i386/kernel/irq.c | 4 ++-- arch/x86_64/kernel/entry.S | 2 +- arch/x86_64/kernel/irq.c | 4 ++-- arch/x86_64/kernel/smp.c | 4 ++-- include/asm-x86_64/hw_irq.h | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff -puN arch/i386/kernel/entry.S~x86-increase-interrupt-vector-range arch/i386/kernel/entry.S --- devel/arch/i386/kernel/entry.S~x86-increase-interrupt-vector-range 2006-05-15 22:35:04.000000000 -0700 +++ devel-akpm/arch/i386/kernel/entry.S 2006-05-15 22:35:04.000000000 -0700 @@ -410,7 +410,7 @@ vector=0 ENTRY(irq_entries_start) .rept NR_IRQS ALIGN -1: pushl $vector-256 +1: pushl $~(vector) jmp common_interrupt .data .long 1b @@ -427,7 +427,7 @@ common_interrupt: #define BUILD_INTERRUPT(name, nr) \ ENTRY(name) \ - pushl $nr-256; \ + pushl $~(nr); \ SAVE_ALL \ movl %esp,%eax; \ call smp_/**/name; \ diff -puN arch/i386/kernel/irq.c~x86-increase-interrupt-vector-range arch/i386/kernel/irq.c --- devel/arch/i386/kernel/irq.c~x86-increase-interrupt-vector-range 2006-05-15 22:35:04.000000000 -0700 +++ devel-akpm/arch/i386/kernel/irq.c 2006-05-15 22:35:04.000000000 -0700 @@ -53,8 +53,8 @@ static union irq_ctx *softirq_ctx[NR_CPU */ fastcall unsigned int do_IRQ(struct pt_regs *regs) { - /* high bits used in ret_from_ code */ - int irq = regs->orig_eax & 0xff; + /* high bit used in ret_from_ code */ + int irq = ~regs->orig_eax; #ifdef CONFIG_4KSTACKS union irq_ctx *curctx, *irqctx; u32 *isp; diff -puN arch/x86_64/kernel/entry.S~x86-increase-interrupt-vector-range arch/x86_64/kernel/entry.S --- devel/arch/x86_64/kernel/entry.S~x86-increase-interrupt-vector-range 2006-05-15 22:35:04.000000000 -0700 +++ devel-akpm/arch/x86_64/kernel/entry.S 2006-05-15 22:35:04.000000000 -0700 @@ -610,7 +610,7 @@ END(common_interrupt) */ .macro apicinterrupt num,func INTR_FRAME - pushq $\num-256 + pushq $~(\num) CFI_ADJUST_CFA_OFFSET 8 interrupt \func jmp ret_from_intr diff -puN arch/x86_64/kernel/irq.c~x86-increase-interrupt-vector-range arch/x86_64/kernel/irq.c --- devel/arch/x86_64/kernel/irq.c~x86-increase-interrupt-vector-range 2006-05-15 22:35:04.000000000 -0700 +++ devel-akpm/arch/x86_64/kernel/irq.c 2006-05-15 22:35:04.000000000 -0700 @@ -91,8 +91,8 @@ skip: */ asmlinkage unsigned int do_IRQ(struct pt_regs *regs) { - /* high bits used in ret_from_ code */ - unsigned irq = regs->orig_rax & 0xff; + /* high bit used in ret_from_ code */ + unsigned irq = ~regs->orig_rax; exit_idle(); irq_enter(); diff -puN arch/x86_64/kernel/smp.c~x86-increase-interrupt-vector-range arch/x86_64/kernel/smp.c --- devel/arch/x86_64/kernel/smp.c~x86-increase-interrupt-vector-range 2006-05-15 22:35:04.000000000 -0700 +++ devel-akpm/arch/x86_64/kernel/smp.c 2006-05-15 22:35:04.000000000 -0700 @@ -135,10 +135,10 @@ asmlinkage void smp_invalidate_interrupt cpu = smp_processor_id(); /* - * orig_rax contains the interrupt vector - 256. + * orig_rax contains the negated interrupt vector. * Use that to determine where the sender put the data. */ - sender = regs->orig_rax + 256 - INVALIDATE_TLB_VECTOR_START; + sender = ~regs->orig_rax - INVALIDATE_TLB_VECTOR_START; f = &per_cpu(flush_state, sender); if (!cpu_isset(cpu, f->flush_cpumask)) diff -puN include/asm-x86_64/hw_irq.h~x86-increase-interrupt-vector-range include/asm-x86_64/hw_irq.h --- devel/include/asm-x86_64/hw_irq.h~x86-increase-interrupt-vector-range 2006-05-15 22:35:04.000000000 -0700 +++ devel-akpm/include/asm-x86_64/hw_irq.h 2006-05-15 22:35:04.000000000 -0700 @@ -124,7 +124,7 @@ asmlinkage void IRQ_NAME(nr); \ __asm__( \ "\n.p2align\n" \ "IRQ" #nr "_interrupt:\n\t" \ - "push $" #nr "-256 ; " \ + "push $~(" #nr ") ; " \ "jmp common_interrupt"); #if defined(CONFIG_X86_IO_APIC) _ Patches currently in -mm which might be from rusty@xxxxxxxxxxxxxxx are origin.patch x86-increase-interrupt-vector-range.patch kernel-kernel-cpuc-to-mutexes.patch ensure-null-deref-cant-possibly-happen-in-is_exported.patch define-__raw_get_cpu_var-and-use-it.patch allow-for-per-cpu-data-being-in-tdata-and-tbss-sections.patch allow-for-per-cpu-data-being-in-tdata-and-tbss-sections-fix.patch allow-for-per-cpu-data-being-in-tdata-and-tbss-sections-tidy.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html