aboutsummaryrefslogtreecommitdiffstats
path: root/arch/microblaze/kernel/entry.S
diff options
context:
space:
mode:
authorMichal Simek <monstr@monstr.eu>2010-06-22 18:50:31 +0200
committerMichal Simek <monstr@monstr.eu>2010-08-04 10:45:13 +0200
commit80c5ff6b9b2dd9a2e99d3d6f74df5e6f888d43e9 (patch)
tree2323252b5612056e5d040b40d9429511201b60f4 /arch/microblaze/kernel/entry.S
parentmicroblaze: Fix _user_exception function (diff)
downloadlinux-dev-80c5ff6b9b2dd9a2e99d3d6f74df5e6f888d43e9.tar.xz
linux-dev-80c5ff6b9b2dd9a2e99d3d6f74df5e6f888d43e9.zip
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/microblaze/kernel/entry.S')
-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):
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: