[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.