tile: support CONTEXT_TRACKING and thus NOHZ_FULL
Add the TIF_NOHZ flag appropriately. Add call to user_exit() on entry to do_work_pending() and on entry to syscalls via do_syscall_trace_enter(), and also the top of do_syscall_trace_exit() just because it's done in x86. Add call to user_enter() at the bottom of do_work_pending() once we have no more work to do before returning to userspace. Wrap all the trap code in exception_enter() / exception_exit(). Signed-off-by: Chris Metcalf <cmetcalf@ezchip.com> Acked-by: Frederic Weisbecker <fweisbec@gmail.com>
This commit is contained in:
@@ -23,6 +23,7 @@
|
||||
#include <linux/types.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/prctl.h>
|
||||
#include <linux/context_tracking.h>
|
||||
#include <asm/cacheflush.h>
|
||||
#include <asm/traps.h>
|
||||
#include <asm/uaccess.h>
|
||||
@@ -738,6 +739,7 @@ static DEFINE_PER_CPU(unsigned long, ss_saved_pc);
|
||||
|
||||
void gx_singlestep_handle(struct pt_regs *regs, int fault_num)
|
||||
{
|
||||
enum ctx_state prev_state = exception_enter();
|
||||
unsigned long *ss_pc = this_cpu_ptr(&ss_saved_pc);
|
||||
struct thread_info *info = (void *)current_thread_info();
|
||||
int is_single_step = test_ti_thread_flag(info, TIF_SINGLESTEP);
|
||||
@@ -754,6 +756,7 @@ void gx_singlestep_handle(struct pt_regs *regs, int fault_num)
|
||||
__insn_mtspr(SPR_SINGLE_STEP_CONTROL_K, control);
|
||||
send_sigtrap(current, regs);
|
||||
}
|
||||
exception_exit(prev_state);
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user