microblaze: Fix _interrupt function
authorMichal Simek <monstr@monstr.eu>
Tue, 22 Jun 2010 16:50:31 +0000 (18:50 +0200)
committerMichal Simek <monstr@monstr.eu>
Wed, 4 Aug 2010 08:45:13 +0000 (10:45 +0200)
Save instructions by using delay slot and
clear UMS only if kernel comes from user space.

Signed-off-by: Michal Simek <monstr@monstr.eu>
arch/microblaze/kernel/entry.S

index 4c06e1a..f4fda85 100644 (file)
@@ -747,15 +747,13 @@ C_ENTRY(_interrupt):
        swi     r0, r1, PTO + PT_MODE;
        lwi     r11, r0, TOPHYS(PER_CPU(ENTRY_SP));
        swi     r11, r1, PTO+PT_R1;
+       clear_ums;
 2:
        lwi     CURRENT_TASK, r0, TOPHYS(PER_CPU(CURRENT_SAVE));
        tovirt(r1,r1)
-       addik   r5, r1, PTO;
-       set_vms;
-       addik   r11, r0, do_IRQ;
        addik   r15, r0, irq_call;
-irq_call:rtbd  r11, 0;
-       nop;
+irq_call:rtbd  r0, do_IRQ;
+       addik   r5, r1, PTO;
 
 /* MS: we are in virtual mode */
 ret_from_irq: