WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Change do_IRQ high bit masking., Xen patchbot -unstable <=