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>hifive-unleashed-5.1
parent
25f6e59657
commit
80c5ff6b9b
|
@ -747,15 +747,13 @@ C_ENTRY(_interrupt):
|
||||||
swi r0, r1, PTO + PT_MODE;
|
swi r0, r1, PTO + PT_MODE;
|
||||||
lwi r11, r0, TOPHYS(PER_CPU(ENTRY_SP));
|
lwi r11, r0, TOPHYS(PER_CPU(ENTRY_SP));
|
||||||
swi r11, r1, PTO+PT_R1;
|
swi r11, r1, PTO+PT_R1;
|
||||||
|
clear_ums;
|
||||||
2:
|
2:
|
||||||
lwi CURRENT_TASK, r0, TOPHYS(PER_CPU(CURRENT_SAVE));
|
lwi CURRENT_TASK, r0, TOPHYS(PER_CPU(CURRENT_SAVE));
|
||||||
tovirt(r1,r1)
|
tovirt(r1,r1)
|
||||||
addik r5, r1, PTO;
|
|
||||||
set_vms;
|
|
||||||
addik r11, r0, do_IRQ;
|
|
||||||
addik r15, r0, irq_call;
|
addik r15, r0, irq_call;
|
||||||
irq_call:rtbd r11, 0;
|
irq_call:rtbd r0, do_IRQ;
|
||||||
nop;
|
addik r5, r1, PTO;
|
||||||
|
|
||||||
/* MS: we are in virtual mode */
|
/* MS: we are in virtual mode */
|
||||||
ret_from_irq:
|
ret_from_irq:
|
||||||
|
|
Loading…
Reference in New Issue