diff options
author | Michal Simek <monstr@monstr.eu> | 2010-06-22 18:50:31 +0200 |
---|---|---|
committer | Michal Simek <monstr@monstr.eu> | 2010-08-04 10:45:13 +0200 |
commit | 80c5ff6b9b2dd9a2e99d3d6f74df5e6f888d43e9 (patch) | |
tree | 2323252b5612056e5d040b40d9429511201b60f4 /arch/microblaze/kernel | |
parent | 25f6e59657211b3f7d912520c53fb7d98ebe960b (diff) | |
download | blackbird-op-linux-80c5ff6b9b2dd9a2e99d3d6f74df5e6f888d43e9.tar.gz blackbird-op-linux-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')
-rw-r--r-- | arch/microblaze/kernel/entry.S | 8 |
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: |