Browse Source

cris build fixes: irq fixes

- New file include/asm-cris/irq_regs.h.
- Change handling of registers for do_IRQ.
- Add GENERIC_HARDIRQS to Kconfig.

Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
Acked-by: Mikael Starvik <starvik@axis.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Jesper Nilsson 17 years ago
parent
commit
eb2746ddc3
2 changed files with 8 additions and 2 deletions
  1. 4 0
      arch/cris/Kconfig
  2. 4 2
      arch/cris/kernel/irq.c

+ 4 - 0
arch/cris/Kconfig

@@ -57,6 +57,10 @@ menu "General setup"
 
 
 source "fs/Kconfig.binfmt"
 source "fs/Kconfig.binfmt"
 
 
+config GENERIC_HARDIRQS
+	bool
+	default y
+
 config ETRAX_CMDLINE
 config ETRAX_CMDLINE
 	string "Kernel command line"
 	string "Kernel command line"
 	default "root=/dev/mtdblock3"
 	default "root=/dev/mtdblock3"

+ 4 - 2
arch/cris/kernel/irq.c

@@ -2,7 +2,7 @@
  *
  *
  *	linux/arch/cris/kernel/irq.c
  *	linux/arch/cris/kernel/irq.c
  *
  *
- *      Copyright (c) 2000,2001 Axis Communications AB
+ *      Copyright (c) 2000,2007 Axis Communications AB
  *
  *
  *      Authors: Bjorn Wesen (bjornw@axis.com)
  *      Authors: Bjorn Wesen (bjornw@axis.com)
  *
  *
@@ -92,14 +92,16 @@ skip:
 asmlinkage void do_IRQ(int irq, struct pt_regs * regs)
 asmlinkage void do_IRQ(int irq, struct pt_regs * regs)
 {
 {
 	unsigned long sp;
 	unsigned long sp;
+	struct pt_regs *old_regs = set_irq_regs(regs);
 	irq_enter();
 	irq_enter();
 	sp = rdsp();
 	sp = rdsp();
 	if (unlikely((sp & (PAGE_SIZE - 1)) < (PAGE_SIZE/8))) {
 	if (unlikely((sp & (PAGE_SIZE - 1)) < (PAGE_SIZE/8))) {
 		printk("do_IRQ: stack overflow: %lX\n", sp);
 		printk("do_IRQ: stack overflow: %lX\n", sp);
 		show_stack(NULL, (unsigned long *)sp);
 		show_stack(NULL, (unsigned long *)sp);
 	}
 	}
-	__do_IRQ(irq, regs);
+	__do_IRQ(irq);
         irq_exit();
         irq_exit();
+	set_irq_regs(old_regs);
 }
 }
 
 
 void weird_irq(void)
 void weird_irq(void)