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 | |
| 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>
| -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: |
