s390/switch_to: use generic header file
Move the switch_to() implementation to process.c and use the generic switch_to.h header file instead, like some other architectures. This addresses also the oddity that the old switch_to() implementation assigns the return value of __switch_to() to 'prev' instead of 'last', like it should. Remove also all includes of switch_to.h from C files, except process.c. Acked-by: Alexander Gordeev <agordeev@linux.ibm.com> Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
This commit is contained in:
parent
304103736b
commit
340750c13c
@ -203,6 +203,10 @@ static inline int test_and_clear_pt_regs_flag(struct pt_regs *regs, int flag)
|
||||
return ret;
|
||||
}
|
||||
|
||||
struct task_struct;
|
||||
|
||||
void update_cr_regs(struct task_struct *task);
|
||||
|
||||
/*
|
||||
* These are defined as per linux/ptrace.h, which see.
|
||||
*/
|
||||
|
@ -4,7 +4,6 @@
|
||||
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/ptrace.h>
|
||||
#include <asm/switch_to.h>
|
||||
|
||||
struct stack_frame_user {
|
||||
unsigned long back_chain;
|
||||
|
@ -1,36 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Copyright IBM Corp. 1999, 2009
|
||||
*
|
||||
* Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>
|
||||
*/
|
||||
|
||||
#ifndef __ASM_SWITCH_TO_H
|
||||
#define __ASM_SWITCH_TO_H
|
||||
|
||||
#include <linux/thread_info.h>
|
||||
#include <asm/fpu/api.h>
|
||||
#include <asm/access-regs.h>
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/guarded_storage.h>
|
||||
|
||||
extern struct task_struct *__switch_to(void *, void *);
|
||||
extern void update_cr_regs(struct task_struct *task);
|
||||
|
||||
#define switch_to(prev, next, last) do { \
|
||||
/* save_fpu_regs() sets the CIF_FPU flag, which enforces \
|
||||
* a restore of the floating point / vector registers as \
|
||||
* soon as the next task returns to user space \
|
||||
*/ \
|
||||
save_fpu_regs(); \
|
||||
save_access_regs(&prev->thread.acrs[0]); \
|
||||
save_ri_cb(prev->thread.ri_cb); \
|
||||
save_gs_cb(prev->thread.gs_cb); \
|
||||
update_cr_regs(next); \
|
||||
restore_access_regs(&next->thread.acrs[0]); \
|
||||
restore_ri_cb(next->thread.ri_cb, prev->thread.ri_cb); \
|
||||
restore_gs_cb(next->thread.gs_cb); \
|
||||
prev = __switch_to(prev, next); \
|
||||
} while (0)
|
||||
|
||||
#endif /* __ASM_SWITCH_TO_H */
|
@ -171,13 +171,13 @@ _LPP_OFFSET = __LC_LPP
|
||||
nop 0
|
||||
|
||||
/*
|
||||
* Scheduler resume function, called by switch_to
|
||||
* gpr2 = (task_struct *) prev
|
||||
* gpr3 = (task_struct *) next
|
||||
* Scheduler resume function, called by __switch_to
|
||||
* gpr2 = (task_struct *)prev
|
||||
* gpr3 = (task_struct *)next
|
||||
* Returns:
|
||||
* gpr2 = prev
|
||||
*/
|
||||
SYM_FUNC_START(__switch_to)
|
||||
SYM_FUNC_START(__switch_to_asm)
|
||||
stmg %r6,%r15,__SF_GPRS(%r15) # store gprs of prev task
|
||||
lghi %r4,__TASK_stack
|
||||
lghi %r1,__TASK_thread
|
||||
@ -193,7 +193,7 @@ SYM_FUNC_START(__switch_to)
|
||||
lmg %r6,%r15,__SF_GPRS(%r15) # load gprs of next task
|
||||
ALTERNATIVE "nop", "lpp _LPP_OFFSET", 40
|
||||
BR_EX %r14
|
||||
SYM_FUNC_END(__switch_to)
|
||||
SYM_FUNC_END(__switch_to_asm)
|
||||
|
||||
#if IS_ENABLED(CONFIG_KVM)
|
||||
/*
|
||||
|
@ -19,6 +19,7 @@ void mcck_int_handler(void);
|
||||
void restart_int_handler(void);
|
||||
void early_pgm_check_handler(void);
|
||||
|
||||
struct task_struct *__switch_to_asm(struct task_struct *prev, struct task_struct *next);
|
||||
void __ret_from_fork(struct task_struct *prev, struct pt_regs *regs);
|
||||
void __do_pgm_check(struct pt_regs *regs);
|
||||
void __do_syscall(struct pt_regs *regs, int per_trap);
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include <linux/reboot.h>
|
||||
#include <linux/ftrace.h>
|
||||
#include <linux/debug_locks.h>
|
||||
#include <asm/guarded_storage.h>
|
||||
#include <asm/pfault.h>
|
||||
#include <asm/cio.h>
|
||||
#include <asm/setup.h>
|
||||
@ -26,7 +27,6 @@
|
||||
#include <asm/os_info.h>
|
||||
#include <asm/set_memory.h>
|
||||
#include <asm/stacktrace.h>
|
||||
#include <asm/switch_to.h>
|
||||
#include <asm/nmi.h>
|
||||
#include <asm/sclp.h>
|
||||
|
||||
|
@ -28,7 +28,6 @@
|
||||
#include <asm/cputime.h>
|
||||
#include <asm/nmi.h>
|
||||
#include <asm/crw.h>
|
||||
#include <asm/switch_to.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/pai.h>
|
||||
#include <asm/vx-insn.h>
|
||||
|
@ -31,15 +31,18 @@
|
||||
#include <linux/init_task.h>
|
||||
#include <linux/entry-common.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/guarded_storage.h>
|
||||
#include <asm/access-regs.h>
|
||||
#include <asm/switch_to.h>
|
||||
#include <asm/cpu_mf.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/vtimer.h>
|
||||
#include <asm/exec.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/nmi.h>
|
||||
#include <asm/smp.h>
|
||||
#include <asm/stacktrace.h>
|
||||
#include <asm/switch_to.h>
|
||||
#include <asm/runtime_instr.h>
|
||||
#include <asm/unwind.h>
|
||||
#include "entry.h"
|
||||
@ -190,6 +193,24 @@ void execve_tail(void)
|
||||
asm volatile("sfpc %0" : : "d" (0));
|
||||
}
|
||||
|
||||
struct task_struct *__switch_to(struct task_struct *prev, struct task_struct *next)
|
||||
{
|
||||
/*
|
||||
* save_fpu_regs() sets the CIF_FPU flag, which enforces
|
||||
* a restore of the floating point / vector registers as
|
||||
* soon as the next task returns to user space.
|
||||
*/
|
||||
save_fpu_regs();
|
||||
save_access_regs(&prev->thread.acrs[0]);
|
||||
save_ri_cb(prev->thread.ri_cb);
|
||||
save_gs_cb(prev->thread.gs_cb);
|
||||
update_cr_regs(next);
|
||||
restore_access_regs(&next->thread.acrs[0]);
|
||||
restore_ri_cb(next->thread.ri_cb, prev->thread.ri_cb);
|
||||
restore_gs_cb(next->thread.gs_cb);
|
||||
return __switch_to_asm(prev, next);
|
||||
}
|
||||
|
||||
unsigned long __get_wchan(struct task_struct *p)
|
||||
{
|
||||
struct unwind_state state;
|
||||
|
@ -24,11 +24,11 @@
|
||||
#include <linux/seccomp.h>
|
||||
#include <linux/compat.h>
|
||||
#include <trace/syscall.h>
|
||||
#include <asm/guarded_storage.h>
|
||||
#include <asm/access-regs.h>
|
||||
#include <asm/page.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <asm/unistd.h>
|
||||
#include <asm/switch_to.h>
|
||||
#include <asm/runtime_instr.h>
|
||||
#include <asm/facility.h>
|
||||
#include <asm/fpu/api.h>
|
||||
|
@ -12,7 +12,6 @@
|
||||
#include <linux/kdebug.h>
|
||||
#include <linux/sched/task_stack.h>
|
||||
|
||||
#include <asm/switch_to.h>
|
||||
#include <asm/facility.h>
|
||||
#include <asm/kprobes.h>
|
||||
#include <asm/dis.h>
|
||||
|
@ -29,7 +29,6 @@
|
||||
#include <asm/irqflags.h>
|
||||
#include <asm/checksum.h>
|
||||
#include <asm/os_info.h>
|
||||
#include <asm/switch_to.h>
|
||||
#include <asm/maccess.h>
|
||||
#include "sclp.h"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user