Loading arch/tile/Kconfig +2 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ config TILE select ARCH_HAVE_NMI_SAFE_CMPXCHG select GENERIC_CLOCKEVENTS select MODULES_USE_ELF_RELA select GENERIC_KERNEL_THREAD select GENERIC_KERNEL_EXECVE # FIXME: investigate whether we need/want these options. # select HAVE_IOREMAP_PROT Loading arch/tile/include/asm/switch_to.h +4 −1 Original line number Diff line number Diff line Loading @@ -68,7 +68,10 @@ extern unsigned long get_switch_to_pc(void); /* Support function for forking a new task. */ void ret_from_fork(void); /* Called from ret_from_fork() when a new process starts up. */ /* Support function for forking a new kernel thread. */ void ret_from_kernel_thread(void *fn, void *arg); /* Called from ret_from_xxx() when a new process starts up. */ struct task_struct *sim_notify_fork(struct task_struct *prev); #endif /* !__ASSEMBLY__ */ Loading arch/tile/kernel/entry.S +0 −11 Original line number Diff line number Diff line Loading @@ -27,17 +27,6 @@ STD_ENTRY(current_text_addr) { move r0, lr; jrp lr } STD_ENDPROC(current_text_addr) /* * Implement execve(). The i386 code has a note that forking from kernel * space results in no copy on write until the execve, so we should be * careful not to write to the stack here. */ STD_ENTRY(kernel_execve) moveli TREG_SYSCALL_NR_NAME, __NR_execve swint1 jrp lr STD_ENDPROC(kernel_execve) /* * We don't run this function directly, but instead copy it to a page * we map into every user process. See vdso_setup(). Loading arch/tile/kernel/intvec_32.S +15 −0 Original line number Diff line number Diff line Loading @@ -1291,6 +1291,21 @@ STD_ENTRY(ret_from_fork) } STD_ENDPROC(ret_from_fork) STD_ENTRY(ret_from_kernel_thread) jal sim_notify_fork jal schedule_tail FEEDBACK_REENTER(ret_from_fork) { move r0, r31 jalr r30 } FEEDBACK_REENTER(ret_from_kernel_thread) { movei r30, 0 /* not an NMI */ j .Lresume_userspace /* jump into middle of interrupt_return */ } STD_ENDPROC(ret_from_kernel_thread) /* * Code for ill interrupt. */ Loading arch/tile/kernel/intvec_64.S +15 −0 Original line number Diff line number Diff line Loading @@ -1150,6 +1150,21 @@ STD_ENTRY(ret_from_fork) } STD_ENDPROC(ret_from_fork) STD_ENTRY(ret_from_kernel_thread) jal sim_notify_fork jal schedule_tail FEEDBACK_REENTER(ret_from_fork) { move r0, r31 jalr r30 } FEEDBACK_REENTER(ret_from_kernel_thread) { movei r30, 0 /* not an NMI */ j .Lresume_userspace /* jump into middle of interrupt_return */ } STD_ENDPROC(ret_from_kernel_thread) /* Various stub interrupt handlers and syscall handlers */ STD_ENTRY_LOCAL(_kernel_double_fault) Loading Loading
arch/tile/Kconfig +2 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ config TILE select ARCH_HAVE_NMI_SAFE_CMPXCHG select GENERIC_CLOCKEVENTS select MODULES_USE_ELF_RELA select GENERIC_KERNEL_THREAD select GENERIC_KERNEL_EXECVE # FIXME: investigate whether we need/want these options. # select HAVE_IOREMAP_PROT Loading
arch/tile/include/asm/switch_to.h +4 −1 Original line number Diff line number Diff line Loading @@ -68,7 +68,10 @@ extern unsigned long get_switch_to_pc(void); /* Support function for forking a new task. */ void ret_from_fork(void); /* Called from ret_from_fork() when a new process starts up. */ /* Support function for forking a new kernel thread. */ void ret_from_kernel_thread(void *fn, void *arg); /* Called from ret_from_xxx() when a new process starts up. */ struct task_struct *sim_notify_fork(struct task_struct *prev); #endif /* !__ASSEMBLY__ */ Loading
arch/tile/kernel/entry.S +0 −11 Original line number Diff line number Diff line Loading @@ -27,17 +27,6 @@ STD_ENTRY(current_text_addr) { move r0, lr; jrp lr } STD_ENDPROC(current_text_addr) /* * Implement execve(). The i386 code has a note that forking from kernel * space results in no copy on write until the execve, so we should be * careful not to write to the stack here. */ STD_ENTRY(kernel_execve) moveli TREG_SYSCALL_NR_NAME, __NR_execve swint1 jrp lr STD_ENDPROC(kernel_execve) /* * We don't run this function directly, but instead copy it to a page * we map into every user process. See vdso_setup(). Loading
arch/tile/kernel/intvec_32.S +15 −0 Original line number Diff line number Diff line Loading @@ -1291,6 +1291,21 @@ STD_ENTRY(ret_from_fork) } STD_ENDPROC(ret_from_fork) STD_ENTRY(ret_from_kernel_thread) jal sim_notify_fork jal schedule_tail FEEDBACK_REENTER(ret_from_fork) { move r0, r31 jalr r30 } FEEDBACK_REENTER(ret_from_kernel_thread) { movei r30, 0 /* not an NMI */ j .Lresume_userspace /* jump into middle of interrupt_return */ } STD_ENDPROC(ret_from_kernel_thread) /* * Code for ill interrupt. */ Loading
arch/tile/kernel/intvec_64.S +15 −0 Original line number Diff line number Diff line Loading @@ -1150,6 +1150,21 @@ STD_ENTRY(ret_from_fork) } STD_ENDPROC(ret_from_fork) STD_ENTRY(ret_from_kernel_thread) jal sim_notify_fork jal schedule_tail FEEDBACK_REENTER(ret_from_fork) { move r0, r31 jalr r30 } FEEDBACK_REENTER(ret_from_kernel_thread) { movei r30, 0 /* not an NMI */ j .Lresume_userspace /* jump into middle of interrupt_return */ } STD_ENDPROC(ret_from_kernel_thread) /* Various stub interrupt handlers and syscall handlers */ STD_ENTRY_LOCAL(_kernel_double_fault) Loading