aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorMichal Simek <monstr@monstr.eu>2010-06-22 12:50:31 -0400
committerMichal Simek <monstr@monstr.eu>2010-08-04 04:45:13 -0400
commit80c5ff6b9b2dd9a2e99d3d6f74df5e6f888d43e9 (patch)
tree2323252b5612056e5d040b40d9429511201b60f4 /arch
parent25f6e59657211b3f7d912520c53fb7d98ebe960b (diff)
microblaze: Fix _interrupt function
Save instructions by using delay slot and clear UMS only if kernel comes from user space. Signed-off-by: Michal Simek <monstr@monstr.eu>
Diffstat (limited to 'arch')
-rw-r--r--arch/microblaze/kernel/entry.S8
1 files changed, 3 insertions, 5 deletions
diff --git a/arch/microblaze/kernel/entry.S b/arch/microblaze/kernel/entry.S
index 4c06e1a46a25..f4fda8578551 100644
--- a/arch/microblaze/kernel/entry.S
+++ b/arch/microblaze/kernel/entry.S
@@ -747,15 +747,13 @@ C_ENTRY(_interrupt):
747 swi r0, r1, PTO + PT_MODE; 747 swi r0, r1, PTO + PT_MODE;
748 lwi r11, r0, TOPHYS(PER_CPU(ENTRY_SP)); 748 lwi r11, r0, TOPHYS(PER_CPU(ENTRY_SP));
749 swi r11, r1, PTO+PT_R1; 749 swi r11, r1, PTO+PT_R1;
750 clear_ums;
7502: 7512:
751 lwi CURRENT_TASK, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); 752 lwi CURRENT_TASK, r0, TOPHYS(PER_CPU(CURRENT_SAVE));
752 tovirt(r1,r1) 753 tovirt(r1,r1)
753 addik r5, r1, PTO;
754 set_vms;
755 addik r11, r0, do_IRQ;
756 addik r15, r0, irq_call; 754 addik r15, r0, irq_call;
757irq_call:rtbd r11, 0; 755irq_call:rtbd r0, do_IRQ;
758 nop; 756 addik r5, r1, PTO;
759 757
760/* MS: we are in virtual mode */ 758/* MS: we are in virtual mode */
761ret_from_irq: 759ret_from_irq: