[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] Change do_IRQ high bit masking.
# HG changeset patch # User cl349@xxxxxxxxxxxxxxxxxxxx # Node ID 4109c4e7804abeabe3b222673f2ba4dd1375be53 # Parent 98eaa430bdf3e0c7700104090c23a0f2412f1441 Change do_IRQ high bit masking. Allow more than 256 interrupt vectors on native by only setting the highest bit when marking orig_eax to indicate that we're not within a system call. Signed-off-by: Christian Limpach <Christian.Limpach@xxxxxxxxxxxx> diff -r 98eaa430bdf3 -r 4109c4e7804a linux-2.6-xen-sparse/arch/i386/kernel/entry-xen.S --- a/linux-2.6-xen-sparse/arch/i386/kernel/entry-xen.S Tue Mar 28 12:45:08 2006 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/entry-xen.S Tue Mar 28 13:19:22 2006 @@ -462,7 +462,7 @@ ENTRY(irq_entries_start) .rept NR_IRQS ALIGN -1: pushl $vector-256 +1: pushl 0x80000000+$vector jmp common_interrupt .data .long 1b @@ -479,7 +479,7 @@ #define BUILD_INTERRUPT(name, nr) \ ENTRY(name) \ - pushl $nr-256; \ + pushl 0x80000000+$nr; \ SAVE_ALL \ movl %esp,%eax; \ call smp_/**/name; \ diff -r 98eaa430bdf3 -r 4109c4e7804a linux-2.6-xen-sparse/arch/i386/kernel/irq-xen.c --- a/linux-2.6-xen-sparse/arch/i386/kernel/irq-xen.c Tue Mar 28 12:45:08 2006 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/irq-xen.c Tue Mar 28 13:19:22 2006 @@ -53,8 +53,8 @@ */ fastcall unsigned int do_IRQ(struct pt_regs *regs) { - /* high bits used in ret_from_ code */ - int irq = regs->orig_eax & __IRQ_MASK(HARDIRQ_BITS); + /* high bit used in ret_from_ code */ + int irq = regs->orig_eax & __IRQ_MASK(BITS_PER_LONG - 1); #ifdef CONFIG_4KSTACKS union irq_ctx *curctx, *irqctx; u32 *isp; diff -r 98eaa430bdf3 -r 4109c4e7804a linux-2.6-xen-sparse/arch/x86_64/kernel/entry-xen.S --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/entry-xen.S Tue Mar 28 12:45:08 2006 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/entry-xen.S Tue Mar 28 13:19:22 2006 @@ -584,7 +584,7 @@ */ .macro apicinterrupt num,func INTR_FRAME - pushq $\num-256 + pushq 0x8000000000000000+$\num CFI_ADJUST_CFA_OFFSET 8 interrupt \func jmp error_entry diff -r 98eaa430bdf3 -r 4109c4e7804a linux-2.6-xen-sparse/arch/x86_64/kernel/irq-xen.c --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/irq-xen.c Tue Mar 28 12:45:08 2006 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/irq-xen.c Tue Mar 28 13:19:22 2006 @@ -96,8 +96,8 @@ */ asmlinkage unsigned int do_IRQ(struct pt_regs *regs) { - /* high bits used in ret_from_ code */ - int irq = regs->orig_rax & __IRQ_MASK(HARDIRQ_BITS); + /* high bit used in ret_from_ code */ + int irq = regs->orig_rax & __IRQ_MASK(BITS_PER_LONG - 1); exit_idle(); irq_enter(); diff -r 98eaa430bdf3 -r 4109c4e7804a linux-2.6-xen-sparse/drivers/xen/core/evtchn.c --- a/linux-2.6-xen-sparse/drivers/xen/core/evtchn.c Tue Mar 28 12:45:08 2006 +++ b/linux-2.6-xen-sparse/drivers/xen/core/evtchn.c Tue Mar 28 13:19:22 2006 @@ -170,9 +170,9 @@ #include <asm/idle.h> #define IRQ_REG orig_rax #endif -#define do_IRQ(irq, regs) do { \ - (regs)->IRQ_REG = (irq); \ - do_IRQ((regs)); \ +#define do_IRQ(irq, regs) do { \ + (regs)->IRQ_REG = (irq) | (1UL << (BITS_PER_LONG - 1)); \ + do_IRQ((regs)); \ } while (0) #endif _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |