diff options
Diffstat (limited to 'arch/powerpc/kernel/interrupt.c')
| -rw-r--r-- | arch/powerpc/kernel/interrupt.c | 18 | 
1 files changed, 8 insertions, 10 deletions
| diff --git a/arch/powerpc/kernel/interrupt.c b/arch/powerpc/kernel/interrupt.c index 835b626cd476..7cd6ce3ec423 100644 --- a/arch/powerpc/kernel/interrupt.c +++ b/arch/powerpc/kernel/interrupt.c @@ -81,7 +81,7 @@ notrace long system_call_exception(long r3, long r4, long r5,  {  	syscall_fn f; -	kuep_lock(); +	kuap_lock();  	regs->orig_gpr3 = r3; @@ -148,7 +148,7 @@ notrace long system_call_exception(long r3, long r4, long r5,  	 */  	if (IS_ENABLED(CONFIG_PPC_TRANSACTIONAL_MEM) &&  			unlikely(MSR_TM_TRANSACTIONAL(regs->msr))) -		current_thread_info()->flags |= _TIF_RESTOREALL; +		set_bits(_TIF_RESTOREALL, ¤t_thread_info()->flags);  	/*  	 * If the system call was made with a transaction active, doom it and @@ -181,7 +181,7 @@ notrace long system_call_exception(long r3, long r4, long r5,  	local_irq_enable(); -	if (unlikely(current_thread_info()->flags & _TIF_SYSCALL_DOTRACE)) { +	if (unlikely(read_thread_flags() & _TIF_SYSCALL_DOTRACE)) {  		if (unlikely(trap_is_unsupported_scv(regs))) {  			/* Unsupported scv vector */  			_exception(SIGILL, regs, ILL_ILLOPC, regs->nip); @@ -343,7 +343,7 @@ interrupt_exit_user_prepare_main(unsigned long ret, struct pt_regs *regs)  	unsigned long ti_flags;  again: -	ti_flags = READ_ONCE(current_thread_info()->flags); +	ti_flags = read_thread_flags();  	while (unlikely(ti_flags & (_TIF_USER_WORK_MASK & ~_TIF_RESTORE_TM))) {  		local_irq_enable();  		if (ti_flags & _TIF_NEED_RESCHED) { @@ -359,7 +359,7 @@ again:  			do_notify_resume(regs, ti_flags);  		}  		local_irq_disable(); -		ti_flags = READ_ONCE(current_thread_info()->flags); +		ti_flags = read_thread_flags();  	}  	if (IS_ENABLED(CONFIG_PPC_BOOK3S_64) && IS_ENABLED(CONFIG_PPC_FPU)) { @@ -406,7 +406,6 @@ again:  	/* Restore user access locks last */  	kuap_user_restore(regs); -	kuep_unlock();  	return ret;  } @@ -437,7 +436,7 @@ notrace unsigned long syscall_exit_prepare(unsigned long r3,  	/* Check whether the syscall is issued inside a restartable sequence */  	rseq_syscall(regs); -	ti_flags = current_thread_info()->flags; +	ti_flags = read_thread_flags();  	if (unlikely(r3 >= (unsigned long)-MAX_ERRNO) && is_not_scv) {  		if (likely(!(ti_flags & (_TIF_NOERROR | _TIF_RESTOREALL)))) { @@ -532,8 +531,7 @@ notrace unsigned long interrupt_exit_kernel_prepare(struct pt_regs *regs)  	unsigned long flags;  	unsigned long ret = 0;  	unsigned long kuap; -	bool stack_store = current_thread_info()->flags & -						_TIF_EMULATE_STACK_STORE; +	bool stack_store = read_thread_flags() & _TIF_EMULATE_STACK_STORE;  	if (regs_is_unrecoverable(regs))  		unrecoverable_exception(regs); @@ -554,7 +552,7 @@ notrace unsigned long interrupt_exit_kernel_prepare(struct pt_regs *regs)  again:  		if (IS_ENABLED(CONFIG_PREEMPT)) {  			/* Return to preemptible kernel context */ -			if (unlikely(current_thread_info()->flags & _TIF_NEED_RESCHED)) { +			if (unlikely(read_thread_flags() & _TIF_NEED_RESCHED)) {  				if (preempt_count() == 0)  					preempt_schedule_irq();  			} |