aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/kernel/head31.S
diff options
context:
space:
mode:
authorMartin Schwidefsky <schwidefsky@de.ibm.com>2006-10-01 02:27:45 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-10-01 03:39:22 -0400
commit3c1fcfe229e99752c74efb945a4a3f560be04204 (patch)
tree44085d9b599e06a92426141811a6f712beac17aa /arch/s390/kernel/head31.S
parentcdc39363d33506b0e067d41fc91f89d186bdf7f7 (diff)
[PATCH] Directed yield: direct yield of spinlocks for s390.
Use the new diagnose 0x9c in the spinlock implementation for s390. It yields the remaining timeslice of the virtual cpu that tries to acquire a lock to the virtual cpu that is the current holder of the lock. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Ingo Molnar <mingo@elte.hu> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/s390/kernel/head31.S')
-rw-r--r--arch/s390/kernel/head31.S11
1 files changed, 11 insertions, 0 deletions
diff --git a/arch/s390/kernel/head31.S b/arch/s390/kernel/head31.S
index 1fa9fa1ca740..1b952a3664e2 100644
--- a/arch/s390/kernel/head31.S
+++ b/arch/s390/kernel/head31.S
@@ -254,6 +254,16 @@ startup_continue:
254 oi 3(%r12),0x80 # set IDTE flag 254 oi 3(%r12),0x80 # set IDTE flag
255.Lchkidte: 255.Lchkidte:
256 256
257#
258# find out if the diag 0x9c is available
259#
260 mvc __LC_PGM_NEW_PSW(8),.Lpcdiag9c-.LPG1(%r13)
261 stap __LC_CPUID+4 # store cpu address
262 lh %r1,__LC_CPUID+4
263 diag %r1,0,0x9c # test diag 0x9c
264 oi 2(%r12),1 # set diag9c flag
265.Lchkdiag9c:
266
257 lpsw .Lentry-.LPG1(13) # jump to _stext in primary-space, 267 lpsw .Lentry-.LPG1(13) # jump to _stext in primary-space,
258 # virtual and never return ... 268 # virtual and never return ...
259 .align 8 269 .align 8
@@ -281,6 +291,7 @@ startup_continue:
281.Lpccsp:.long 0x00080000,0x80000000 + .Lchkcsp 291.Lpccsp:.long 0x00080000,0x80000000 + .Lchkcsp
282.Lpcmvpg:.long 0x00080000,0x80000000 + .Lchkmvpg 292.Lpcmvpg:.long 0x00080000,0x80000000 + .Lchkmvpg
283.Lpcidte:.long 0x00080000,0x80000000 + .Lchkidte 293.Lpcidte:.long 0x00080000,0x80000000 + .Lchkidte
294.Lpcdiag9c:.long 0x00080000,0x80000000 + .Lchkdiag9c
284.Lmemsize:.long memory_size 295.Lmemsize:.long memory_size
285.Lmchunk:.long memory_chunk 296.Lmchunk:.long memory_chunk
286.Lmflags:.long machine_flags 297.Lmflags:.long machine_flags