diff options
Diffstat (limited to 'arch/tile/kernel/intvec_32.S')
-rw-r--r-- | arch/tile/kernel/intvec_32.S | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/arch/tile/kernel/intvec_32.S b/arch/tile/kernel/intvec_32.S index 6943515100f8..f212bf7cea86 100644 --- a/arch/tile/kernel/intvec_32.S +++ b/arch/tile/kernel/intvec_32.S | |||
@@ -1291,6 +1291,21 @@ STD_ENTRY(ret_from_fork) | |||
1291 | } | 1291 | } |
1292 | STD_ENDPROC(ret_from_fork) | 1292 | STD_ENDPROC(ret_from_fork) |
1293 | 1293 | ||
1294 | STD_ENTRY(ret_from_kernel_thread) | ||
1295 | jal sim_notify_fork | ||
1296 | jal schedule_tail | ||
1297 | FEEDBACK_REENTER(ret_from_fork) | ||
1298 | { | ||
1299 | move r0, r31 | ||
1300 | jalr r30 | ||
1301 | } | ||
1302 | FEEDBACK_REENTER(ret_from_kernel_thread) | ||
1303 | { | ||
1304 | movei r30, 0 /* not an NMI */ | ||
1305 | j .Lresume_userspace /* jump into middle of interrupt_return */ | ||
1306 | } | ||
1307 | STD_ENDPROC(ret_from_kernel_thread) | ||
1308 | |||
1294 | /* | 1309 | /* |
1295 | * Code for ill interrupt. | 1310 | * Code for ill interrupt. |
1296 | */ | 1311 | */ |
@@ -1437,15 +1452,6 @@ STD_ENTRY_LOCAL(bad_intr) | |||
1437 | panic "Unhandled interrupt %#x: PC %#lx" | 1452 | panic "Unhandled interrupt %#x: PC %#lx" |
1438 | STD_ENDPROC(bad_intr) | 1453 | STD_ENDPROC(bad_intr) |
1439 | 1454 | ||
1440 | /* Put address of pt_regs in reg and jump. */ | ||
1441 | #define PTREGS_SYSCALL(x, reg) \ | ||
1442 | STD_ENTRY(_##x); \ | ||
1443 | { \ | ||
1444 | PTREGS_PTR(reg, PTREGS_OFFSET_BASE); \ | ||
1445 | j x \ | ||
1446 | }; \ | ||
1447 | STD_ENDPROC(_##x) | ||
1448 | |||
1449 | /* | 1455 | /* |
1450 | * Special-case sigreturn to not write r0 to the stack on return. | 1456 | * Special-case sigreturn to not write r0 to the stack on return. |
1451 | * This is technically more efficient, but it also avoids difficulties | 1457 | * This is technically more efficient, but it also avoids difficulties |
@@ -1461,12 +1467,9 @@ STD_ENTRY_LOCAL(bad_intr) | |||
1461 | }; \ | 1467 | }; \ |
1462 | STD_ENDPROC(_##x) | 1468 | STD_ENDPROC(_##x) |
1463 | 1469 | ||
1464 | PTREGS_SYSCALL(sys_execve, r3) | ||
1465 | PTREGS_SYSCALL(sys_sigaltstack, r2) | ||
1466 | PTREGS_SYSCALL_SIGRETURN(sys_rt_sigreturn, r0) | 1470 | PTREGS_SYSCALL_SIGRETURN(sys_rt_sigreturn, r0) |
1467 | PTREGS_SYSCALL(sys_cmpxchg_badaddr, r1) | ||
1468 | 1471 | ||
1469 | /* Save additional callee-saves to pt_regs, put address in r4 and jump. */ | 1472 | /* Save additional callee-saves to pt_regs and jump to standard function. */ |
1470 | STD_ENTRY(_sys_clone) | 1473 | STD_ENTRY(_sys_clone) |
1471 | push_extra_callee_saves r4 | 1474 | push_extra_callee_saves r4 |
1472 | j sys_clone | 1475 | j sys_clone |