diff options
| author | Joel Becker <joel.becker@oracle.com> | 2010-10-15 16:03:09 -0400 |
|---|---|---|
| committer | Joel Becker <joel.becker@oracle.com> | 2010-10-15 16:03:09 -0400 |
| commit | fc3718918f13ad72827d62d36ea0f5fb55090644 (patch) | |
| tree | 4f9551256e02d08be37bab137f3d94182a67504c /arch/ia64/kernel | |
| parent | 7bdb0d18bfd381cc5491eb95973ec5604b356c7e (diff) | |
| parent | d4396eafe402b710a8535137b3bf2abe6c059a15 (diff) | |
Merge branch 'globalheartbeat-2' of git://oss.oracle.com/git/smushran/linux-2.6 into ocfs2-merge-window
Conflicts:
fs/ocfs2/ocfs2.h
Diffstat (limited to 'arch/ia64/kernel')
| -rw-r--r-- | arch/ia64/kernel/fsys.S | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/arch/ia64/kernel/fsys.S b/arch/ia64/kernel/fsys.S index 3567d54f8cee..331d42bda77a 100644 --- a/arch/ia64/kernel/fsys.S +++ b/arch/ia64/kernel/fsys.S | |||
| @@ -420,22 +420,31 @@ EX(.fail_efault, ld8 r14=[r33]) // r14 <- *set | |||
| 420 | ;; | 420 | ;; |
| 421 | 421 | ||
| 422 | RSM_PSR_I(p0, r18, r19) // mask interrupt delivery | 422 | RSM_PSR_I(p0, r18, r19) // mask interrupt delivery |
| 423 | mov ar.ccv=0 | ||
| 424 | andcm r14=r14,r17 // filter out SIGKILL & SIGSTOP | 423 | andcm r14=r14,r17 // filter out SIGKILL & SIGSTOP |
| 424 | mov r8=EINVAL // default to EINVAL | ||
| 425 | 425 | ||
| 426 | #ifdef CONFIG_SMP | 426 | #ifdef CONFIG_SMP |
| 427 | mov r17=1 | 427 | // __ticket_spin_trylock(r31) |
| 428 | ld4 r17=[r31] | ||
| 428 | ;; | 429 | ;; |
| 429 | cmpxchg4.acq r18=[r31],r17,ar.ccv // try to acquire the lock | 430 | mov.m ar.ccv=r17 |
| 430 | mov r8=EINVAL // default to EINVAL | 431 | extr.u r9=r17,17,15 |
| 432 | adds r19=1,r17 | ||
| 433 | extr.u r18=r17,0,15 | ||
| 434 | ;; | ||
| 435 | cmp.eq p6,p7=r9,r18 | ||
| 431 | ;; | 436 | ;; |
| 437 | (p6) cmpxchg4.acq r9=[r31],r19,ar.ccv | ||
| 438 | (p6) dep.z r20=r19,1,15 // next serving ticket for unlock | ||
| 439 | (p7) br.cond.spnt.many .lock_contention | ||
| 440 | ;; | ||
| 441 | cmp4.eq p0,p7=r9,r17 | ||
| 442 | adds r31=2,r31 | ||
| 443 | (p7) br.cond.spnt.many .lock_contention | ||
| 432 | ld8 r3=[r2] // re-read current->blocked now that we hold the lock | 444 | ld8 r3=[r2] // re-read current->blocked now that we hold the lock |
| 433 | cmp4.ne p6,p0=r18,r0 | ||
| 434 | (p6) br.cond.spnt.many .lock_contention | ||
| 435 | ;; | 445 | ;; |
| 436 | #else | 446 | #else |
| 437 | ld8 r3=[r2] // re-read current->blocked now that we hold the lock | 447 | ld8 r3=[r2] // re-read current->blocked now that we hold the lock |
| 438 | mov r8=EINVAL // default to EINVAL | ||
| 439 | #endif | 448 | #endif |
| 440 | add r18=IA64_TASK_PENDING_OFFSET+IA64_SIGPENDING_SIGNAL_OFFSET,r16 | 449 | add r18=IA64_TASK_PENDING_OFFSET+IA64_SIGPENDING_SIGNAL_OFFSET,r16 |
| 441 | add r19=IA64_TASK_SIGNAL_OFFSET,r16 | 450 | add r19=IA64_TASK_SIGNAL_OFFSET,r16 |
| @@ -490,7 +499,9 @@ EX(.fail_efault, ld8 r14=[r33]) // r14 <- *set | |||
| 490 | (p6) br.cond.spnt.few 1b // yes -> retry | 499 | (p6) br.cond.spnt.few 1b // yes -> retry |
| 491 | 500 | ||
| 492 | #ifdef CONFIG_SMP | 501 | #ifdef CONFIG_SMP |
| 493 | st4.rel [r31]=r0 // release the lock | 502 | // __ticket_spin_unlock(r31) |
| 503 | st2.rel [r31]=r20 | ||
| 504 | mov r20=0 // i must not leak kernel bits... | ||
| 494 | #endif | 505 | #endif |
| 495 | SSM_PSR_I(p0, p9, r31) | 506 | SSM_PSR_I(p0, p9, r31) |
| 496 | ;; | 507 | ;; |
| @@ -512,7 +523,8 @@ EX(.fail_efault, (p15) st8 [r34]=r3) | |||
| 512 | 523 | ||
| 513 | .sig_pending: | 524 | .sig_pending: |
| 514 | #ifdef CONFIG_SMP | 525 | #ifdef CONFIG_SMP |
| 515 | st4.rel [r31]=r0 // release the lock | 526 | // __ticket_spin_unlock(r31) |
| 527 | st2.rel [r31]=r20 // release the lock | ||
| 516 | #endif | 528 | #endif |
| 517 | SSM_PSR_I(p0, p9, r17) | 529 | SSM_PSR_I(p0, p9, r17) |
| 518 | ;; | 530 | ;; |
