diff options
author | Michal Simek <monstr@monstr.eu> | 2010-06-22 12:50:31 -0400 |
---|---|---|
committer | Michal Simek <monstr@monstr.eu> | 2010-08-04 04:45:13 -0400 |
commit | 80c5ff6b9b2dd9a2e99d3d6f74df5e6f888d43e9 (patch) | |
tree | 2323252b5612056e5d040b40d9429511201b60f4 /arch/microblaze | |
parent | 25f6e59657211b3f7d912520c53fb7d98ebe960b (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/microblaze')
-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): | |||
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; | ||
750 | 2: | 751 | 2: |
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; |
757 | irq_call:rtbd r11, 0; | 755 | irq_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 */ |
761 | ret_from_irq: | 759 | ret_from_irq: |