Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d5c352cd authored by Heiko Carstens's avatar Heiko Carstens Committed by Martin Schwidefsky
Browse files

s390: move thread_info into task_struct



This is the s390 variant of commit 15f4eae7 ("x86: Move
thread_info into task_struct").

Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent c360192b
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -169,6 +169,7 @@ config S390
	select OLD_SIGSUSPEND3
	select SPARSE_IRQ
	select SYSCTL_EXCEPTION_TRACE
	select THREAD_INFO_IN_TASK
	select TTY
	select VIRT_CPU_ACCOUNTING
	select VIRT_TO_BUS
+1 −1
Original line number Diff line number Diff line
@@ -95,7 +95,7 @@ struct lowcore {

	/* Current process. */
	__u64	current_task;			/* 0x0310 */
	__u64	thread_info;			/* 0x0318 */
	__u8	pad_0x318[0x320-0x318];		/* 0x0318 */
	__u64	kernel_stack;			/* 0x0320 */

	/* Interrupt, panic and restart stack. */
+0 −11
Original line number Diff line number Diff line
@@ -30,10 +30,8 @@
 * - if the contents of this structure are changed, the assembly constants must also be changed
 */
struct thread_info {
	struct task_struct	*task;		/* main task structure */
	unsigned long		flags;		/* low level flags */
	unsigned long		sys_call_table;	/* System call table address */
	unsigned int		cpu;		/* current CPU */
	unsigned int		system_call;
	__u64			user_timer;
	__u64			system_timer;
@@ -45,20 +43,11 @@ struct thread_info {
 */
#define INIT_THREAD_INFO(tsk)			\
{						\
	.task		= &tsk,			\
	.flags		= 0,			\
	.cpu		= 0,			\
}

#define init_thread_info	(init_thread_union.thread_info)
#define init_stack		(init_thread_union.stack)

/* how to get the thread information struct from C */
static inline struct thread_info *current_thread_info(void)
{
	return (struct thread_info *) S390_lowcore.thread_info;
}

void arch_release_task_struct(struct task_struct *tsk);
int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src);

+6 −9
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@
int main(void)
{
	/* task struct offsets */
	OFFSET(__TASK_thread_info, task_struct, stack);
	OFFSET(__TASK_stack, task_struct, stack);
	OFFSET(__TASK_thread, task_struct, thread);
	OFFSET(__TASK_pid, task_struct, pid);
	BLANK();
@@ -39,13 +39,11 @@ int main(void)
	OFFSET(__THREAD_trap_tdb, thread_struct, trap_tdb);
	BLANK();
	/* thread info offsets */
	OFFSET(__TI_task, thread_info, task);
	OFFSET(__TI_flags, thread_info, flags);
	OFFSET(__TI_sysc_table, thread_info, sys_call_table);
	OFFSET(__TI_cpu, thread_info, cpu);
	OFFSET(__TI_user_timer, thread_info, user_timer);
	OFFSET(__TI_system_timer, thread_info, system_timer);
	OFFSET(__TI_last_break, thread_info, last_break);
	OFFSET(__TI_flags, task_struct, thread_info.flags);
	OFFSET(__TI_sysc_table,  task_struct, thread_info.sys_call_table);
	OFFSET(__TI_user_timer, task_struct, thread_info.user_timer);
	OFFSET(__TI_system_timer, task_struct, thread_info.system_timer);
	OFFSET(__TI_last_break, task_struct, thread_info.last_break);
	BLANK();
	/* pt_regs offsets */
	OFFSET(__PT_ARGS, pt_regs, args);
@@ -160,7 +158,6 @@ int main(void)
	OFFSET(__LC_INT_CLOCK, lowcore, int_clock);
	OFFSET(__LC_MCCK_CLOCK, lowcore, mcck_clock);
	OFFSET(__LC_CURRENT, lowcore, current_task);
	OFFSET(__LC_THREAD_INFO, lowcore, thread_info);
	OFFSET(__LC_KERNEL_STACK, lowcore, kernel_stack);
	OFFSET(__LC_ASYNC_STACK, lowcore, async_stack);
	OFFSET(__LC_PANIC_STACK, lowcore, panic_stack);
+8 −9
Original line number Diff line number Diff line
@@ -186,14 +186,13 @@ ENTRY(__switch_to)
	stmg	%r6,%r15,__SF_GPRS(%r15)	# store gprs of prev task
	lgr	%r1,%r2
	aghi	%r1,__TASK_thread		# thread_struct of prev task
	lg	%r5,__TASK_thread_info(%r3)	# get thread_info of next
	lg	%r5,__TASK_stack(%r3)		# start of kernel stack of next
	stg	%r15,__THREAD_ksp(%r1)		# store kernel stack of prev
	lgr	%r1,%r3
	aghi	%r1,__TASK_thread		# thread_struct of next task
	lgr	%r15,%r5
	aghi	%r15,STACK_INIT			# end of kernel stack of next
	stg	%r3,__LC_CURRENT		# store task struct of next
	stg	%r5,__LC_THREAD_INFO		# store thread info of next
	stg	%r15,__LC_KERNEL_STACK		# store end of kernel stack
	lg	%r15,__THREAD_ksp(%r1)		# load kernel stack of next
	/* c4 is used in guest detection: arch/s390/kernel/perf_cpum_sf.c */
@@ -274,7 +273,7 @@ ENTRY(system_call)
.Lsysc_stmg:
	stmg	%r8,%r15,__LC_SAVE_AREA_SYNC
	lg	%r10,__LC_LAST_BREAK
	lg	%r12,__LC_THREAD_INFO
	lg	%r12,__LC_CURRENT
	lghi	%r14,_PIF_SYSCALL
.Lsysc_per:
	lg	%r15,__LC_KERNEL_STACK
@@ -457,7 +456,7 @@ ENTRY(system_call)
#
ENTRY(ret_from_fork)
	la	%r11,STACK_FRAME_OVERHEAD(%r15)
	lg	%r12,__LC_THREAD_INFO
	lg	%r12,__LC_CURRENT
	brasl	%r14,schedule_tail
	TRACE_IRQS_ON
	ssm	__LC_SVC_NEW_PSW	# reenable interrupts
@@ -478,7 +477,7 @@ ENTRY(pgm_check_handler)
	stpt	__LC_SYNC_ENTER_TIMER
	stmg	%r8,%r15,__LC_SAVE_AREA_SYNC
	lg	%r10,__LC_LAST_BREAK
	lg	%r12,__LC_THREAD_INFO
	lg	%r12,__LC_CURRENT
	larl	%r13,cleanup_critical
	lmg	%r8,%r9,__LC_PGM_OLD_PSW
	tmhh	%r8,0x0001		# test problem state bit
@@ -501,7 +500,7 @@ ENTRY(pgm_check_handler)
2:	LAST_BREAK %r14
	UPDATE_VTIME %r14,%r15,__LC_SYNC_ENTER_TIMER
	lg	%r15,__LC_KERNEL_STACK
	lg	%r14,__TI_task(%r12)
	lgr	%r14,%r12
	aghi	%r14,__TASK_thread	# pointer to thread_struct
	lghi	%r13,__LC_PGM_TDB
	tm	__LC_PGM_ILC+2,0x02	# check for transaction abort
@@ -567,7 +566,7 @@ ENTRY(io_int_handler)
	stpt	__LC_ASYNC_ENTER_TIMER
	stmg	%r8,%r15,__LC_SAVE_AREA_ASYNC
	lg	%r10,__LC_LAST_BREAK
	lg	%r12,__LC_THREAD_INFO
	lg	%r12,__LC_CURRENT
	larl	%r13,cleanup_critical
	lmg	%r8,%r9,__LC_IO_OLD_PSW
	SWITCH_ASYNC __LC_SAVE_AREA_ASYNC,__LC_ASYNC_ENTER_TIMER
@@ -741,7 +740,7 @@ ENTRY(ext_int_handler)
	stpt	__LC_ASYNC_ENTER_TIMER
	stmg	%r8,%r15,__LC_SAVE_AREA_ASYNC
	lg	%r10,__LC_LAST_BREAK
	lg	%r12,__LC_THREAD_INFO
	lg	%r12,__LC_CURRENT
	larl	%r13,cleanup_critical
	lmg	%r8,%r9,__LC_EXT_OLD_PSW
	SWITCH_ASYNC __LC_SAVE_AREA_ASYNC,__LC_ASYNC_ENTER_TIMER
@@ -889,7 +888,7 @@ ENTRY(mcck_int_handler)
	spt	__LC_CPU_TIMER_SAVE_AREA-4095(%r1)	# revalidate cpu timer
	lmg	%r0,%r15,__LC_GPREGS_SAVE_AREA-4095(%r1)# revalidate gprs
	lg	%r10,__LC_LAST_BREAK
	lg	%r12,__LC_THREAD_INFO
	lg	%r12,__LC_CURRENT
	larl	%r13,cleanup_critical
	lmg	%r8,%r9,__LC_MCK_OLD_PSW
	TSTMSK	__LC_MCCK_CODE,MCCK_CODE_SYSTEM_DAMAGE
Loading