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

Commit da1ba891 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'for-linus' of git://git390.osdl.marist.edu/pub/scm/linux-2.6:
  [S390] guest page hinting light
  [S390] tty3270: fix put_char fail/success conversion.
  [S390] compat ptrace cleanup
  [S390] s390mach compile warning
  [S390] cio: Fix parsing mechanism for blacklisted devices.
  [S390] cio: Remove cio_msg kernel parameter.
  [S390] s390-kvm: leave sie context on work. Removes preemption requirement
  [S390] s390: Optimize user and work TIF check
parents 8b2cc917 45e576b1
Loading
Loading
Loading
Loading
+0 −11
Original line number Diff line number Diff line
@@ -8,17 +8,6 @@ Command line parameters

  Enable logging of debug information in case of ccw device timeouts.


* cio_msg = yes | no
  
  Determines whether information on found devices and sensed device 
  characteristics should be shown during startup or when new devices are
  found, i. e. messages of the types "Detected device 0.0.4711 on subchannel
  0.0.0042" and "SenseID: Device 0.0.4711 reports: ...".

  Default is off.


* cio_ignore = {all} |
	       {<device> | <range of devices>} |
	       {!<device> | !<range of devices>}
+7 −0
Original line number Diff line number Diff line
@@ -430,6 +430,13 @@ config CMM_IUCV
	  Select this option to enable the special message interface to
	  the cooperative memory management.

config PAGE_STATES
	bool "Unused page notification"
	help
	  This enables the notification of unused pages to the
	  hypervisor. The ESSA instruction is used to do the states
	  changes between a page that has content and the unused state.

config VIRT_TIMER
	bool "Virtual CPU timer support"
	help
+1 −1
Original line number Diff line number Diff line
@@ -121,7 +121,7 @@ sys32_ptrace_wrapper:
	lgfr	%r3,%r3			# long
	llgtr	%r4,%r4			# long
	llgfr	%r5,%r5			# long
	jg	sys_ptrace		# branch to system call
	jg	compat_sys_ptrace	# branch to system call

	.globl	sys32_alarm_wrapper
sys32_alarm_wrapper:
+14 −15
Original line number Diff line number Diff line
@@ -279,8 +279,6 @@ sysc_do_restart:
	st	%r2,SP_R2(%r15)   # store return value (change R2 on stack)

sysc_return:
	tm	SP_PSW+1(%r15),0x01	# returning to user ?
	bno	BASED(sysc_restore)
	tm	__TI_flags+3(%r9),_TIF_WORK_SVC
	bnz	BASED(sysc_work)  # there is work to do (signals etc.)
sysc_restore:
@@ -312,6 +310,8 @@ sysc_work_loop:
# One of the work bits is on. Find out which one.
#
sysc_work:
	tm	SP_PSW+1(%r15),0x01	# returning to user ?
	bno	BASED(sysc_restore)
	tm	__TI_flags+3(%r9),_TIF_MCCK_PENDING
	bo	BASED(sysc_mcck_pending)
	tm	__TI_flags+3(%r9),_TIF_NEED_RESCHED
@@ -602,12 +602,6 @@ io_no_vtime:
	la	%r2,SP_PTREGS(%r15)	# address of register-save area
	basr	%r14,%r1		# branch to standard irq handler
io_return:
	tm	SP_PSW+1(%r15),0x01	# returning to user ?
#ifdef CONFIG_PREEMPT
	bno	BASED(io_preempt)	# no -> check for preemptive scheduling
#else
	bno	BASED(io_restore)	# no-> skip resched & signal
#endif
	tm	__TI_flags+3(%r9),_TIF_WORK_INT
	bnz	BASED(io_work)		# there is work to do (signals etc.)
io_restore:
@@ -629,10 +623,18 @@ io_restore_trace_psw:
	.long	0, io_restore_trace + 0x80000000
#endif

#ifdef CONFIG_PREEMPT
io_preempt:
#
# switch to kernel stack, then check the TIF bits
#
io_work:
	tm	SP_PSW+1(%r15),0x01	# returning to user ?
#ifndef CONFIG_PREEMPT
	bno	BASED(io_restore)	# no-> skip resched & signal
#else
	bnz	BASED(io_work_user)	# no -> check for preemptive scheduling
	# check for preemptive scheduling
	icm	%r0,15,__TI_precount(%r9)
	bnz	BASED(io_restore)
	bnz	BASED(io_restore)	# preemption disabled
	l	%r1,SP_R15(%r15)
	s	%r1,BASED(.Lc_spsize)
	mvc	SP_PTREGS(__PT_SIZE,%r1),SP_PTREGS(%r15)
@@ -646,10 +648,7 @@ io_resume_loop:
	br	%r1			# call schedule
#endif

#
# switch to kernel stack, then check the TIF bits
#
io_work:
io_work_user:
	l	%r1,__LC_KERNEL_STACK
	s	%r1,BASED(.Lc_spsize)
	mvc	SP_PTREGS(__PT_SIZE,%r1),SP_PTREGS(%r15)
+42 −15
Original line number Diff line number Diff line
@@ -271,8 +271,6 @@ sysc_noemu:
	stg	%r2,SP_R2(%r15) # store return value (change R2 on stack)

sysc_return:
	tm	SP_PSW+1(%r15),0x01	# returning to user ?
	jno	sysc_restore
	tm	__TI_flags+7(%r9),_TIF_WORK_SVC
	jnz	sysc_work	# there is work to do (signals etc.)
sysc_restore:
@@ -304,6 +302,8 @@ sysc_work_loop:
# One of the work bits is on. Find out which one.
#
sysc_work:
	tm	SP_PSW+1(%r15),0x01	# returning to user ?
	jno	sysc_restore
	tm	__TI_flags+7(%r9),_TIF_MCCK_PENDING
	jo	sysc_mcck_pending
	tm	__TI_flags+7(%r9),_TIF_NEED_RESCHED
@@ -585,12 +585,6 @@ io_no_vtime:
	la	%r2,SP_PTREGS(%r15)	# address of register-save area
	brasl	%r14,do_IRQ		# call standard irq handler
io_return:
	tm	SP_PSW+1(%r15),0x01	# returning to user ?
#ifdef CONFIG_PREEMPT
	jno	io_preempt		# no -> check for preemptive scheduling
#else
	jno	io_restore		# no-> skip resched & signal
#endif
	tm	__TI_flags+7(%r9),_TIF_WORK_INT
	jnz	io_work 		# there is work to do (signals etc.)
io_restore:
@@ -612,10 +606,41 @@ io_restore_trace_psw:
	.quad	0, io_restore_trace
#endif

#ifdef CONFIG_PREEMPT
io_preempt:
#
# There is work todo, we need to check if we return to userspace, then
# check, if we are in SIE, if yes leave it
#
io_work:
	tm	SP_PSW+1(%r15),0x01	# returning to user ?
#ifndef CONFIG_PREEMPT
#if defined(CONFIG_KVM) || defined(CONFIG_KVM_MODULE)
	jnz	io_work_user		# yes -> no need to check for SIE
	la	%r1, BASED(sie_opcode)	# we return to kernel here
	lg	%r2, SP_PSW+8(%r15)
	clc	0(2,%r1), 0(%r2)	# is current instruction = SIE?
	jne	io_restore		# no-> return to kernel
	lg	%r1, SP_PSW+8(%r15)	# yes-> add 4 bytes to leave SIE
	aghi	%r1, 4
	stg	%r1, SP_PSW+8(%r15)
	j	io_restore		# return to kernel
#else
	jno	io_restore		# no-> skip resched & signal
#endif
#else
	jnz	io_work_user		# yes -> do resched & signal
#if defined(CONFIG_KVM) || defined(CONFIG_KVM_MODULE)
	la	%r1, BASED(sie_opcode)
	lg	%r2, SP_PSW+8(%r15)
	clc	0(2,%r1), 0(%r2)	# is current instruction = SIE?
	jne	0f			# no -> leave PSW alone
	lg	%r1, SP_PSW+8(%r15)	# yes-> add 4 bytes to leave SIE
	aghi	%r1, 4
	stg	%r1, SP_PSW+8(%r15)
0:
#endif
	# check for preemptive scheduling
	icm	%r0,15,__TI_precount(%r9)
	jnz	io_restore
	jnz	io_restore		# preemption is disabled
	# switch to kernel stack
	lg	%r1,SP_R15(%r15)
	aghi	%r1,-SP_SIZE
@@ -629,10 +654,7 @@ io_resume_loop:
	jg	preempt_schedule_irq
#endif

#
# switch to kernel stack, then check TIF bits
#
io_work:
io_work_user:
	lg	%r1,__LC_KERNEL_STACK
	aghi	%r1,-SP_SIZE
	mvc	SP_PTREGS(__PT_SIZE,%r1),SP_PTREGS(%r15)
@@ -653,6 +675,11 @@ io_work_loop:
	j	io_restore
io_work_done:

#if defined(CONFIG_KVM) || defined(CONFIG_KVM_MODULE)
sie_opcode:
	.long 0xb2140000
#endif

#
# _TIF_MCCK_PENDING is set, call handler
#
Loading