Use new _AssertAndRelease macro

This is the usual way to release a lock. Most MP calls employ it
indirectly, through their return path.
This commit is contained in:
Elliot Nunn 2017-12-12 15:54:19 +08:00
parent b27256fbb6
commit fba585b5e3
13 changed files with 97 additions and 839 deletions

View File

@ -465,16 +465,7 @@ MPCall_70 ; OUTSIDE REFERER
rlwinm. r16, r16, 0, 30, 30
bne+ ReleaseAndReturnMPCallOOM
bl NKCreateAddressSpaceSub
sync
lwz r16, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, MPCall_70_0x54
mflr r16
bl panic
MPCall_70_0x54
stw r16, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock, scratch=r16
mr. r3, r8
li r4, 0x00
bne+ CommonMPCallReturnPath
@ -825,13 +816,7 @@ MPCall_72_0x38
stw r8, Area.LogicalBase(r31)
mr r8, r31
bl createarea
sync
lwz r16, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, MPCall_72_0x90
mflr r16
bl panic
_AssertAndRelease PSA.SchLock, scratch=r16
MPCall_72_0x90
stw r16, PSA.SchLock + Lock.Count(r1)
@ -1305,16 +1290,7 @@ createarea_0x5f0
bgt+ createarea_0x5f0
createarea_0x62c
sync
lwz r16, -0x0ad0(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, createarea_0x648
mflr r16
bl panic
createarea_0x648
stw r16, -0x0ad0(r1)
_AssertAndRelease PSA.PoolLock, scratch=r16
createarea_0x64c
lwz r16, Area.TwoFiftySix(r31)
@ -1386,16 +1362,7 @@ major_0x102a8_0xc
; createarea
major_0x102c8 ; OUTSIDE REFERER
sync
lwz r16, -0x0ad0(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, major_0x102c8_0x1c
mflr r16
bl panic
major_0x102c8_0x1c
stw r16, -0x0ad0(r1)
_AssertAndRelease PSA.PoolLock, scratch=r16
addi r30, r8, 0x08
lwz r8, -0x0420(r1)
@ -1548,13 +1515,7 @@ MPCall_73 ; OUTSIDE REFERER
stw r8, Area.TwoFiftySix(r31)
mr r8, r31
bl createarea
sync
lwz r16, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, MPCall_73_0xb0
mflr r16
bl panic
_AssertAndRelease PSA.SchLock, scratch=r16
MPCall_73_0xb0
stw r16, PSA.SchLock + Lock.Count(r1)
@ -1623,16 +1584,7 @@ MPCall_74_0x5c
stw r17, 0x000c(r16)
MPCall_74_0xbc
sync
lwz r18, -0x0b90(r1)
cmpwi cr1, r18, 0x00
li r18, 0x00
bne+ cr1, MPCall_74_0xd8
mflr r18
bl panic
MPCall_74_0xd8
stw r18, -0x0b90(r1)
_AssertAndRelease PSA.HTABLock, scratch=r18
lwz r8, 0x0040(r31)
rlwinm. r16, r29, 0, 25, 25
cmpwi cr1, r8, 0x00
@ -1668,16 +1620,7 @@ MPCall_74_0x14c
; r1 = kdp
; r8 = maybe the page
bl free_list_add_page
sync
lwz r18, -0x0ad0(r1)
cmpwi cr1, r18, 0x00
li r18, 0x00
bne+ cr1, MPCall_74_0x16c
mflr r18
bl panic
MPCall_74_0x16c
stw r18, -0x0ad0(r1)
_AssertAndRelease PSA.PoolLock, scratch=r18
b MPCall_74_0x178
MPCall_74_0x174
@ -1717,16 +1660,7 @@ MPCall_74_0x1e0
; r1 = kdp
; r8 = maybe the page
bl free_list_add_page
sync
lwz r18, -0x0ad0(r1)
cmpwi cr1, r18, 0x00
li r18, 0x00
bne+ cr1, MPCall_74_0x200
mflr r18
bl panic
MPCall_74_0x200
stw r18, -0x0ad0(r1)
_AssertAndRelease PSA.PoolLock, scratch=r18
b MPCall_74_0x20c
MPCall_74_0x208
@ -1835,16 +1769,7 @@ MPCall_75_0x100
ble+ MPCall_75_0x100
MPCall_75_0x138
sync
lwz r8, -0x0b90(r1)
cmpwi cr1, r8, 0x00
li r8, 0x00
bne+ cr1, MPCall_75_0x154
mflr r8
bl panic
MPCall_75_0x154
stw r8, -0x0b90(r1)
_AssertAndRelease PSA.HTABLock, scratch=r8
lwz r16, Area.TwoFiftySix(r31)
rlwinm. r8, r16, 0, 25, 25
bne- MPCall_75_0x16c
@ -1852,16 +1777,7 @@ MPCall_75_0x154
bne- MPCall_75_0x16c
MPCall_75_0x16c
sync
lwz r8, -0x0ad0(r1)
cmpwi cr1, r8, 0x00
li r8, 0x00
bne+ cr1, MPCall_75_0x188
mflr r8
bl panic
MPCall_75_0x188
stw r8, -0x0ad0(r1)
_AssertAndRelease PSA.PoolLock, scratch=r8
b MPCall_75_0x190
MPCall_75_0x190
@ -1946,16 +1862,7 @@ MPCall_130 ; OUTSIDE REFERER
mr r8, r29
bl MPCall_95_0x1e4
sync
lwz r14, -0x0b90(r1)
cmpwi cr1, r14, 0x00
li r14, 0x00
bne+ cr1, MPCall_130_0xcc
mflr r14
bl panic
MPCall_130_0xcc
stw r14, -0x0b90(r1)
_AssertAndRelease PSA.HTABLock, scratch=r14
beq+ Local_Panic
rlwinm r8, r16, 0, 29, 30
lwz r16, 0x0000(r30)
@ -2023,16 +1930,7 @@ MPCall_130_0x19c
li r16, 0x06
rlwimi r17, r16, 0, 29, 30
stw r17, 0x0000(r30)
sync
lwz r14, -0x0b90(r1)
cmpwi cr1, r14, 0x00
li r14, 0x00
bne+ cr1, MPCall_130_0x1c8
mflr r14
bl panic
MPCall_130_0x1c8
stw r14, -0x0b90(r1)
_AssertAndRelease PSA.HTABLock, scratch=r14
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
@ -2128,16 +2026,7 @@ KCSetAreaAccess_0x118
add r29, r29, r19
subf. r8, r29, r28
bge+ KCSetAreaAccess_0x9c
sync
lwz r14, -0x0b90(r1)
cmpwi cr1, r14, 0x00
li r14, 0x00
bne+ cr1, KCSetAreaAccess_0x14c
mflr r14
bl panic
KCSetAreaAccess_0x14c
stw r14, -0x0b90(r1)
_AssertAndRelease PSA.HTABLock, scratch=r14
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
@ -2173,16 +2062,7 @@ KCSetAreaAccess_0x1bc
add r29, r29, r27
subf. r8, r29, r28
bge+ KCSetAreaAccess_0x1a4
sync
lwz r14, -0x0b90(r1)
cmpwi cr1, r14, 0x00
li r14, 0x00
bne+ cr1, KCSetAreaAccess_0x1e4
mflr r14
bl panic
KCSetAreaAccess_0x1e4
stw r14, -0x0b90(r1)
_AssertAndRelease PSA.HTABLock, scratch=r14
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
@ -2370,16 +2250,7 @@ MPCall_123 ; OUTSIDE REFERER
bltl- cr5, MPCall_95_0x2e0
bltl- cr5, MPCall_95_0x348
lwz r17, 0x0000(r30)
sync
lwz r14, -0x0b90(r1)
cmpwi cr1, r14, 0x00
li r14, 0x00
bne+ cr1, MPCall_123_0xa4
mflr r14
bl panic
MPCall_123_0xa4
stw r14, -0x0b90(r1)
_AssertAndRelease PSA.HTABLock, scratch=r14
bl major_0x10d38
mr r5, r18
@ -2670,16 +2541,7 @@ MPCall_81_0x70
rlwimi r5, r4, 0, 20, 31
MPCall_81_0xa4
sync
lwz r8, -0x0b90(r1)
cmpwi cr1, r8, 0x00
li r8, 0x00
bne+ cr1, MPCall_81_0xc0
mflr r8
bl panic
MPCall_81_0xc0
stw r8, -0x0b90(r1)
_AssertAndRelease PSA.HTABLock, scratch=r8
b ReleaseAndReturnMPCall
MPCall_81_0xc8
@ -2771,16 +2633,7 @@ MPCall_98_0x10c
MPCall_98_0x118
stw r16, 0x013c(r6)
sync
lwz r8, -0x0b90(r1)
cmpwi cr1, r8, 0x00
li r8, 0x00
bne+ cr1, MPCall_98_0x138
mflr r8
bl panic
MPCall_98_0x138
stw r8, -0x0b90(r1)
_AssertAndRelease PSA.HTABLock, scratch=r8
b ReleaseAndReturnMPCall
MPCall_98_0x140
@ -2846,16 +2699,7 @@ MPCall_83 ; OUTSIDE REFERER
_Lock PSA.PoolLock, scratch1=r16, scratch2=r17
bl MPCall_83_0x90
sync
lwz r16, -0x0ad0(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, MPCall_83_0x38
mflr r16
bl panic
MPCall_83_0x38
stw r16, -0x0ad0(r1)
_AssertAndRelease PSA.PoolLock, scratch=r16
mr. r4, r8
bne+ ReturnZeroFromMPCall
@ -2939,16 +2783,7 @@ MPCall_84_0x3c
li r3, 0x00
MPCall_84_0x48
sync
lwz r16, -0x0ad0(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, MPCall_84_0x64
mflr r16
bl panic
MPCall_84_0x64
stw r16, -0x0ad0(r1)
_AssertAndRelease PSA.PoolLock, scratch=r16
b CommonMPCallReturnPath
@ -3065,16 +2900,7 @@ KCMapPage_0x8c
bl MPCall_95_0x1e4
beq+ Local_Panic
lwz r29, 0x0000(r30)
sync
lwz r14, -0x0b90(r1)
cmpwi cr1, r14, 0x00
li r14, 0x00
bne+ cr1, KCMapPage_0xd0
mflr r14
bl panic
KCMapPage_0xd0
stw r14, -0x0b90(r1)
_AssertAndRelease PSA.HTABLock, scratch=r14
clrlwi. r8, r29, 0x1f
bne+ ReleaseAndReturnMPCallOOM
lwz r17, 0x0134(r6)
@ -3084,16 +2910,7 @@ KCMapPage_0xd0
_Lock PSA.PoolLock, scratch1=r16, scratch2=r17
bl MPCall_83_0x90
sync
lwz r16, -0x0ad0(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, KCMapPage_0x120
mflr r16
bl panic
KCMapPage_0x120
stw r16, -0x0ad0(r1)
_AssertAndRelease PSA.PoolLock, scratch=r16
mr. r5, r8
beq+ MPCall_83_0x5c
@ -3246,29 +3063,11 @@ KCUnmapPages_0x148
stw r28, Area.Length2(r31)
KCUnmapPages_0x158
sync
lwz r14, -0x0b90(r1)
cmpwi cr1, r14, 0x00
li r14, 0x00
bne+ cr1, KCUnmapPages_0x174
mflr r14
bl panic
KCUnmapPages_0x174
stw r14, -0x0b90(r1)
_AssertAndRelease PSA.HTABLock, scratch=r14
; r1 = kdp
bne+ cr3, ReleaseAndReturnZeroFromMPCall
sync
lwz r14, -0x0ad0(r1)
cmpwi cr1, r14, 0x00
li r14, 0x00
bne+ cr1, KCUnmapPages_0x198
mflr r14
bl panic
KCUnmapPages_0x198
stw r14, -0x0ad0(r1)
_AssertAndRelease PSA.PoolLock, scratch=r14
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
@ -3329,31 +3128,13 @@ NKMakePhysicallyContiguous_0xac
add r28, r28, r29
subf. r8, r27, r5
bge+ NKMakePhysicallyContiguous_0x80
sync
lwz r14, -0x0b90(r1)
cmpwi cr1, r14, 0x00
li r14, 0x00
bne+ cr1, NKMakePhysicallyContiguous_0xd8
mflr r14
bl panic
NKMakePhysicallyContiguous_0xd8
stw r14, -0x0b90(r1)
_AssertAndRelease PSA.HTABLock, scratch=r14
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
NKMakePhysicallyContiguous_0xe0
sync
lwz r14, -0x0b90(r1)
cmpwi cr1, r14, 0x00
li r14, 0x00
bne+ cr1, NKMakePhysicallyContiguous_0xfc
mflr r14
bl panic
NKMakePhysicallyContiguous_0xfc
stw r14, -0x0b90(r1)
_AssertAndRelease PSA.HTABLock, scratch=r14
_Lock PSA.PoolLock, scratch1=r16, scratch2=r17
@ -3373,29 +3154,11 @@ NKMakePhysicallyContiguous_0xfc
dc.l 0x4bff9554
NKMakePhysicallyContiguous_0x150
sync
lwz r16, -0x0b90(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, NKMakePhysicallyContiguous_0x16c
mflr r16
bl panic
NKMakePhysicallyContiguous_0x16c
stw r16, -0x0b90(r1)
_AssertAndRelease PSA.HTABLock, scratch=r16
b ReleaseAndReturnMPCallOOM
NKMakePhysicallyContiguous_0x174
sync
lwz r16, -0x0ad0(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, NKMakePhysicallyContiguous_0x190
mflr r16
bl panic
NKMakePhysicallyContiguous_0x190
stw r16, -0x0ad0(r1)
_AssertAndRelease PSA.PoolLock, scratch=r16
b ReleaseAndReturnMPCallOOM
@ -3459,16 +3222,7 @@ KCLockPages_0x94
stw r16, PSA.UnheldFreePageCount(r1)
KCLockPages_0xc8
sync
lwz r16, -0x0ad0(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, KCLockPages_0xe4
mflr r16
bl panic
KCLockPages_0xe4
stw r16, -0x0ad0(r1)
_AssertAndRelease PSA.PoolLock, scratch=r16
ble+ ReleaseAndReturnMPCallOOM
mr r27, r4
@ -3566,16 +3320,7 @@ KCUnlockPages_0xc4
lwz r16, PSA.UnheldFreePageCount(r1)
add r16, r16, r28
stw r16, PSA.UnheldFreePageCount(r1)
sync
lwz r16, -0x0ad0(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, KCUnlockPages_0x114
mflr r16
bl panic
KCUnlockPages_0x114
stw r16, -0x0ad0(r1)
_AssertAndRelease PSA.PoolLock, scratch=r16
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
@ -3646,16 +3391,7 @@ KCHoldPages_0x90
stw r16, PSA.UnheldFreePageCount(r1)
KCHoldPages_0xc4
sync
lwz r16, -0x0ad0(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, KCHoldPages_0xe0
mflr r16
bl panic
KCHoldPages_0xe0
stw r16, -0x0ad0(r1)
_AssertAndRelease PSA.PoolLock, scratch=r16
ble+ ReleaseAndReturnMPCallOOM
mr r27, r4
@ -3753,16 +3489,7 @@ KCUnholdPages_0xc4
lwz r16, PSA.UnheldFreePageCount(r1)
add r16, r16, r28
stw r16, PSA.UnheldFreePageCount(r1)
sync
lwz r16, -0x0ad0(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, KCUnholdPages_0x114
mflr r16
bl panic
KCUnholdPages_0x114
stw r16, -0x0ad0(r1)
_AssertAndRelease PSA.PoolLock, scratch=r16
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
@ -3799,16 +3526,7 @@ MPCall_91 ; OUTSIDE REFERER
bltl- cr5, MPCall_95_0x2e0
bltl- cr5, MPCall_95_0x348
lwz r29, 0x0000(r30)
sync
lwz r14, -0x0b90(r1)
cmpwi cr1, r14, 0x00
li r14, 0x00
bne+ cr1, MPCall_91_0x94
mflr r14
bl panic
MPCall_91_0x94
stw r14, -0x0b90(r1)
_AssertAndRelease PSA.HTABLock, scratch=r14
mr r8, r4
bl MPCall_95_0x254
li r19, 0x00
@ -3832,16 +3550,7 @@ MPCall_91_0xac
b ReleaseAndReturnZeroFromMPCall
MPCall_91_0xcc
sync
lwz r14, -0x0b90(r1)
cmpwi cr1, r14, 0x00
li r14, 0x00
bne+ cr1, MPCall_91_0xe8
mflr r14
bl panic
MPCall_91_0xe8
stw r14, -0x0b90(r1)
_AssertAndRelease PSA.HTABLock, scratch=r14
b ReleaseAndReturnMPCallOOM
@ -3893,31 +3602,13 @@ MPCall_92_0x9c
or r16, r16, r8
and r16, r16, r9
stw r16, 0x0000(r30)
sync
lwz r14, -0x0b90(r1)
cmpwi cr1, r14, 0x00
li r14, 0x00
bne+ cr1, MPCall_92_0xd0
mflr r14
bl panic
MPCall_92_0xd0
stw r14, -0x0b90(r1)
_AssertAndRelease PSA.HTABLock, scratch=r14
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_92_0xd8
sync
lwz r14, -0x0b90(r1)
cmpwi cr1, r14, 0x00
li r14, 0x00
bne+ cr1, MPCall_92_0xf4
mflr r14
bl panic
MPCall_92_0xf4
stw r14, -0x0b90(r1)
_AssertAndRelease PSA.HTABLock, scratch=r14
b ReleaseAndReturnMPCallOOM
@ -4000,16 +3691,7 @@ MPCall_94 ; OUTSIDE REFERER
bltl- cr5, MPCall_95_0x348
MPCall_94_0xa0
sync
lwz r16, -0x0b90(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, MPCall_94_0xbc
mflr r16
bl panic
MPCall_94_0xbc
stw r16, -0x0b90(r1)
_AssertAndRelease PSA.HTABLock, scratch=r16
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
@ -4149,16 +3831,7 @@ MPCall_95_0xe0
mr r8, r29
bl MPCall_95_0x1e4
beq+ Local_Panic
sync
lwz r16, -0x0b90(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, MPCall_95_0x134
mflr r16
bl panic
MPCall_95_0x134
stw r16, -0x0b90(r1)
_AssertAndRelease PSA.HTABLock, scratch=r16
lwz r16, 0x0000(r30)
clrlwi. r8, r16, 0x1f
beq- MPCall_95_0x180

View File

@ -207,16 +207,7 @@ print_common_0x80
mtspr srr1, r27
print_common_0x8c
sync
lwz r30, -0x0af0(r1)
cmpwi cr1, r30, 0x00
li r30, 0x00
bne+ cr1, print_common_0xa8
mflr r30
bl panic
print_common_0xa8
stw r30, -0x0af0(r1)
_AssertAndRelease PSA.DbugLock, scratch=r30

View File

@ -588,16 +588,7 @@ major_0x02ccc_0x430
major_0x02ccc_0x4a8
mr r8, r31
bl TaskReadyAsPrev
sync
lwz r31, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r31, 0x00
li r31, 0x00
bne+ cr1, major_0x02ccc_0x4cc
mflr r31
bl panic
major_0x02ccc_0x4cc
stw r31, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock, scratch=r31
mtcr r28
bns- cr6, major_0x02ccc_0x504
lwz r8, 0x0064(r6)
@ -688,16 +679,7 @@ IntDecrementer_0x54
addi r8, r8, 0x01
stw r8, 0x0e8c(r1)
bl TimerDispatch
sync
lwz r8, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r8, 0x00
li r8, 0x00
bne+ cr1, IntDecrementer_0x9c
mflr r8
bl panic
IntDecrementer_0x9c
stw r8, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock, scratch=r8
; r6 = ewa
bl Restore_r14_r31
@ -1115,16 +1097,7 @@ IntDSIOtherOther_0x1c8
_Lock PSA.HTABLock, scratch1=r28, scratch2=r31
bl PagingFunc1
sync
lwz r28, -0x0b90(r1)
cmpwi cr1, r28, 0x00
li r28, 0x00
bne+ cr1, IntDSIOtherOther_0x208
mflr r28
bl panic
IntDSIOtherOther_0x208
stw r28, -0x0b90(r1)
_AssertAndRelease PSA.HTABLock, scratch=r28
mfsprg r28, 2
mtlr r28
beq+ IntDSIOtherOther_0x19c
@ -1195,16 +1168,7 @@ IntMachineCheckMemRetry ; OUTSIDE REFERER
IntMachineCheckMemRetry_0x124
sync
isync
sync
lwz r28, -0x0b90(r1)
cmpwi cr1, r28, 0x00
li r28, 0x00
bne+ cr1, IntMachineCheckMemRetry_0x148
mflr r28
bl panic
IntMachineCheckMemRetry_0x148
stw r28, -0x0b90(r1)
_AssertAndRelease PSA.HTABLock, scratch=r28
IntMachineCheckMemRetry_0x14c ; OUTSIDE REFERER
cmplw r10, r19
@ -1249,16 +1213,7 @@ IntISI ; OUTSIDE REFERER
mr r27, r10
bl PagingFunc1
sync
lwz r28, -0x0b90(r1)
cmpwi cr1, r28, 0x00
li r28, 0x00
bne+ cr1, IntISI_0x50
mflr r28
bl panic
IntISI_0x50
stw r28, -0x0b90(r1)
_AssertAndRelease PSA.HTABLock, scratch=r28
mfsprg r8, 0
bne- major_0x039dc
mfsprg r24, 3
@ -1392,16 +1347,7 @@ IntDSIOther ; OUTSIDE REFERER
mfspr r27, dar
bl PagingFunc1
sync
lwz r28, -0x0b90(r1)
cmpwi cr1, r28, 0x00
li r28, 0x00
bne+ cr1, IntDSIOther_0x58
mflr r28
bl panic
IntDSIOther_0x58
stw r28, -0x0b90(r1)
_AssertAndRelease PSA.HTABLock, scratch=r28
mfsprg r8, 0
bne+ major_0x039dc
lmw r14, 0x0038(r8)
@ -1898,16 +1844,7 @@ IntPerfMonitor ; OUTSIDE REFERER
bl major_0x0db04
IntPerfMonitor_0x88
sync
lwz r8, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r8, 0x00
li r8, 0x00
bne+ cr1, IntPerfMonitor_0xa4
mflr r8
bl panic
IntPerfMonitor_0xa4
stw r8, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock, scratch=r8
; r6 = ewa
bl Restore_r14_r31
@ -1944,16 +1881,7 @@ IntThermalEvent ; OUTSIDE REFERER
bl major_0x0db04
IntThermalEvent_0x68
sync
lwz r8, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r8, 0x00
li r8, 0x00
bne+ cr1, IntThermalEvent_0x84
mflr r8
bl panic
IntThermalEvent_0x84
stw r8, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock, scratch=r8
; r6 = ewa
bl Restore_r14_r31

View File

@ -134,17 +134,7 @@ MPCallBad ; OUTSIDE REFERER
; MPCall_75
ReleaseAndMPCallWasBad ; OUTSIDE REFERER
sync
lwz r16, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, @dont_panic
mflr r16
bl panic
@dont_panic
stw r16, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock, scratch=r16
b MPCallBad
@ -241,17 +231,7 @@ ReleaseAndMPCallWasBad ; OUTSIDE REFERER
; > r1 = kdp
ReleaseAndReturnZeroFromMPCall ; OUTSIDE REFERER
sync
lwz r16, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, @dont_panic
mflr r16
bl panic
@dont_panic
stw r16, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock, scratch=r16
@ -347,17 +327,7 @@ ReturnZeroFromMPCall ; OUTSIDE REFERER
; MPCall_95
major_0x0af60 ; OUTSIDE REFERER
sync
lwz r16, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, @dont_panic
mflr r16
bl panic
@dont_panic
stw r16, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock, scratch=r16
@ -391,51 +361,21 @@ major_0x0af60_0x20 ; OUTSIDE REFERER
ReleaseAndTimeoutMPCall ; OUTSIDE REFERER
sync
lwz r16, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, @dont_panic
mflr r16
bl panic
@dont_panic
stw r16, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock, scratch=r16
li r3, kMPTimeOutErr
b CommonMPCallReturnPath
ReleaseAndReturnMPCallTaskAborted ; OUTSIDE REFERER
sync
lwz r16, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, @dont_panic
mflr r16
bl panic
@dont_panic
stw r16, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock, scratch=r16
li r3, kMPTaskAbortedErr
b CommonMPCallReturnPath
ReleaseAndReturnMPCallOOM ; OUTSIDE REFERER
sync
lwz r16, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, @dont_panic
mflr r16
bl panic
@dont_panic
stw r16, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock, scratch=r16
@ -472,16 +412,7 @@ ReturnMPCallOOM ; OUTSIDE REFERER
; MPCall_52
ReleaseAndReturnMPCallBlueBlocking ; OUTSIDE REFERER
sync
lwz r16, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, major_0x0b02c_0x1c
mflr r16
bl panic
major_0x0b02c_0x1c
stw r16, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock + Lock.Count, scratch=r16
@ -526,16 +457,7 @@ ReturnMPCallBlueBlocking ; OUTSIDE REFERER
; MPCall_129
major_0x0b054 ; OUTSIDE REFERER
sync
lwz r16, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, major_0x0b054_0x1c
mflr r16
bl panic
major_0x0b054_0x1c
stw r16, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock + Lock.Count, scratch=r16
@ -643,34 +565,14 @@ ReturnParamErrFromMPCall ; OUTSIDE REFERER
; MPCall_129
ReleaseAndReturnMPCallPrivilegedErr ; OUTSIDE REFERER
sync
lwz r16, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, @dont_panic
mflr r16
bl panic
@dont_panic
stw r16, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock, scratch=r16
li r3, kMPPrivilegedErr
b CommonMPCallReturnPath
ReleaseAndReturnMPCallInvalidIDErr ; OUTSIDE REFERER
sync
lwz r16, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, @dont_panic
mflr r16
bl panic
@dont_panic
stw r16, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock, scratch=r16
@ -705,16 +607,7 @@ ReturnMPCallInvalidIDErr ; OUTSIDE REFERER
; KCUnholdPages
major_0x0b0cc ; OUTSIDE REFERER
sync
lwz r16, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, major_0x0b0cc_0x1c
mflr r16
bl panic
major_0x0b0cc_0x1c
stw r16, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock + Lock.Count, scratch=r16
li r3, -0x725a
b CommonMPCallReturnPath
@ -757,17 +650,7 @@ AlternateMPCallReturnPath ; OUTSIDE REFERER
b TrulyCommonMPCallReturnPath
ReleaseAndReturnMPCall ; OUTSIDE REFERER
sync
lwz r16, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, @dont_panic
mflr r16
bl panic
@dont_panic
stw r16, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock, scratch=r16
@ -852,16 +735,7 @@ MPCall_0 ; OUTSIDE REFERER
bl VMDoSomeIO
mr r7, r30
mr r6, r29
sync
lwz r16, -0x0b90(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, MPCall_0_0x8c
mflr r16
bl panic
MPCall_0_0x8c
stw r16, -0x0b90(r1)
_AssertAndRelease PSA.HTABLock, scratch=r16
_Lock PSA.PoolLock, scratch1=r16, scratch2=r17
@ -872,31 +746,13 @@ MPCall_0_0x8c
; r8 = anywhere in new page (phys)
; r9 = page_virt
bl ExtendPool
sync
lwz r16, -0x0ad0(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, MPCall_0_0xd0
mflr r16
bl panic
MPCall_0_0xd0
stw r16, -0x0ad0(r1)
_AssertAndRelease PSA.PoolLock, scratch=r16
b ReturnZeroFromMPCall
MPCall_0_0xd8
mr r7, r30
mr r6, r29
sync
lwz r16, -0x0b90(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, MPCall_0_0xfc
mflr r16
bl panic
MPCall_0_0xfc
stw r16, -0x0b90(r1)
_AssertAndRelease PSA.HTABLock, scratch=r16
b ReturnMPCallOOM
@ -1148,16 +1004,7 @@ MPCall_6 ; OUTSIDE REFERER
bne+ cr1, ReleaseAndReturnMPCallOOM
mr r8, r3
bl DeleteID
sync
lwz r16, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, MPCall_6_0x68
mflr r16
bl panic
MPCall_6_0x68
stw r16, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock + Lock.Count, scratch=r16
mr r8, r31
bl PoolFree
b ReturnZeroFromMPCall
@ -1184,16 +1031,7 @@ MPCall_6_0xb4
bl TaskReadyAsPrev
mr r8, r31
bl major_0x14af8
sync
lwz r16, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, MPCall_6_0xec
mflr r16
bl panic
MPCall_6_0xec
stw r16, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock + Lock.Count, scratch=r16
b CommonMPCallReturnPath
@ -1238,16 +1076,7 @@ KCYieldWithHint_0x68
KCYieldWithHint_0x7c
mr r8, r31
bl major_0x14af8
sync
lwz r16, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, KCYieldWithHint_0xa0
mflr r16
bl panic
KCYieldWithHint_0xa0
stw r16, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock + Lock.Count, scratch=r16
b CommonMPCallReturnPath
@ -1872,21 +1701,8 @@ KCStartCPU ; OUTSIDE REFERER
andi. r8, r8, 0xbfcf
stw r8, Task.ContextBlock + ContextBlock.MSR(r31)
sync ; flush pending lwarxen?
; This feels like cheating with the Sch lock
lwz r16, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r16, 0
li r16, 0
bne+ cr1, @do_not_panic
mflr r16
bl panic
@do_not_panic
stw r16, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock, scratch=r16
; Some EWA/KDP stuff I do not understand
@ -1982,16 +1798,7 @@ KCStopScheduling ; OUTSIDE REFERER
stw r8, 0x01fc(r31)
KCStopScheduling_0x94
sync
lwz r16, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, KCStopScheduling_0xb0
mflr r16
bl panic
KCStopScheduling_0xb0
stw r16, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock + Lock.Count, scratch=r16
b MPCall_6_0x78
@ -2508,16 +2315,7 @@ MPCall_115_0x64
cmpwi r16, 0x00
beq+ MPCall_115_0x54
stw r30, 0x000c(r31)
sync
lwz r16, -0x0af0(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, MPCall_115_0x90
mflr r16
bl panic
MPCall_115_0x90
stw r16, -0x0af0(r1)
_AssertAndRelease PSA.DbugLock, scratch=r16
MPCall_115_0x94
cmpwi r5, 0x00

View File

@ -162,6 +162,19 @@ HalfLoadedReg set (&reg)
mr r9, &scratch2
ENDM
MACRO
_AssertAndRelease &lockoffset, &scratch==r18
sync
lwz &scratch, &lockoffset(r1)
cmpwi cr1, &scratch, 0
li &scratch, 0
bne+ cr1, @okay
mflr &scratch
bl panic
@okay stw &scratch, &lockoffset(r1)
ENDM
MACRO
_bset &dest, &src, &bit

View File

@ -266,17 +266,8 @@ PoolFree ; OUTSIDE REFERER
PoolCommonReturn ; OUTSIDE REFERER
mfsprg r18, 0
sync
lwz r15, PSA.PoolLock + Lock.Count(r1)
cmpwi cr1, r15, 0
li r15, 0
bne+ cr1, @no_panic
mflr r15
bl panic
@no_panic
stw r15, PSA.PoolLock + Lock.Count(r1)
_AssertAndRelease PSA.PoolLock, scratch=r15
lwz r17, EWA.PoolSavedLR(r18)
mtlr r17

View File

@ -98,31 +98,12 @@ CommonPIHPath_0xc ; OUTSIDE REFERER
and r13, r13, r29
@negative
sync
lwz r8, PSA.PIHLock(r1)
cmpwi cr1, r8, 0
li r8, 0
bne+ cr1, @pih_unlocked
mflr r8
bl panic
@pih_unlocked
stw r8, PSA.PIHLock(r1) ; redundant
_AssertAndRelease PSA.PIHLock, scratch=r8
bl Restore_r20_r31
b skeleton_key
CommonPIHPath_0x78
sync
lwz r8, -0x0b70(r1)
cmpwi cr1, r8, 0x00
li r8, 0x00
bne+ cr1, CommonPIHPath_0x94
mflr r8
bl panic
CommonPIHPath_0x94
stw r8, -0x0b70(r1)
_AssertAndRelease PSA.PIHLock, scratch=r8
bl Save_r14_r19
_Lock PSA.SchLock, scratch1=r8, scratch2=r9
@ -139,16 +120,7 @@ CommonPIHPath_0x94
stw r9, 0x0010(r30)
stw r22, 0x0014(r30)
bl major_0x0db04
sync
lwz r8, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r8, 0x00
li r8, 0x00
bne+ cr1, CommonPIHPath_0xf4
mflr r8
bl panic
CommonPIHPath_0xf4
stw r8, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock, scratch=r8
; r6 = ewa
bl Restore_r14_r31
@ -158,16 +130,7 @@ CommonPIHPath_0x100
li r27, 0x00
lwz r23, 0x067c(r1)
stw r27, -0x0428(r1)
sync
lwz r8, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r8, 0x00
li r8, 0x00
bne+ cr1, CommonPIHPath_0x128
mflr r8
bl panic
CommonPIHPath_0x128
stw r8, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock, scratch=r8
bl Restore_r14_r19
_Lock PSA.PIHLock, scratch1=r8, scratch2=r9
@ -175,18 +138,7 @@ CommonPIHPath_0x128
b CommonPIHPath_0xc
CommonPIHPath_0x14c
sync
lwz r8, -0x0b70(r1)
cmpwi cr1, r8, 0x00
li r8, 0x00
bne+ cr1, CommonPIHPath_0x168
mflr r8
bl panic
CommonPIHPath_0x168
; This is where we have some real fun...
stw r8, -0x0b70(r1)
_AssertAndRelease PSA.PIHLock, scratch=r8
bl Save_r14_r19
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
@ -245,16 +197,7 @@ CommonPIHPath_0x218
CommonPIHPath_0x230
mr r8, r31
bl major_0x14af8
sync
lwz r16, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, CommonPIHPath_0x254
mflr r16
bl panic
CommonPIHPath_0x254
stw r16, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock, scratch=r16
; r6 = ewa
bl Restore_r14_r31

View File

@ -1602,16 +1602,7 @@ NKDeleteTimer ; OUTSIDE REFERER
bl major_0x136c8
NKDeleteTimer_0x48
sync
lwz r16, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, NKDeleteTimer_0x64
mflr r16
bl panic
NKDeleteTimer_0x64
stw r16, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock, scratch=r16
lwz r8, 0x001c(r31)
cmpwi r8, 0x00
bnel- PoolFree

View File

@ -172,16 +172,7 @@ kcRTASDispatch_0x190
lwz r29, 0x01ec(r6)
lwz r30, 0x01f4(r6)
lwz r31, 0x01fc(r6)
sync
lwz r8, -0x0b10(r1)
cmpwi cr1, r8, 0x00
li r8, 0x00
bne+ cr1, kcRTASDispatch_0x268
mflr r8
bl panic
kcRTASDispatch_0x268
stw r8, -0x0b10(r1)
_AssertAndRelease PSA.RTASLock, scratch=r8
li r3, 0x00
b skeleton_key

View File

@ -1267,16 +1267,7 @@ major_0x142dc_0x1bc
lbz r28, 0x0019(r31)
stb r27, 0x0018(r31)
stb r28, -0x0117(r14)
sync
lwz r27, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r27, 0x00
li r27, 0x00
bne+ cr1, major_0x142dc_0x1e8
mflr r27
bl panic
major_0x142dc_0x1e8
stw r27, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock, scratch=r27
; r6 = ewa
bl Restore_r14_r31
@ -1587,16 +1578,7 @@ major_0x14548_0x24c
lfd f31, 0x02f8(r6)
major_0x14548_0x380
sync
lwz r8, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r8, 0x00
li r8, 0x00
bne+ cr1, major_0x14548_0x39c
mflr r8
bl panic
major_0x14548_0x39c
stw r8, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock, scratch=r8
; sprg0 = for r1 and r6
; r1 = kdp
@ -2182,16 +2164,7 @@ StopProcessor
stw r17, 0x0008(r18)
stw r17, 0x000c(r16)
bl TasksFuncThatIsNotAMPCall
sync
lwz r16, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, StopProcessor_0xa0
mflr r16
bl panic
StopProcessor_0xa0
stw r16, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock, scratch=r16
_log 'SIGP kStopProcessor^n'
li r3, 0x03
lhz r4, 0x022a(r31)

View File

@ -398,16 +398,7 @@ MPCall_9 ; OUTSIDE REFERER
stb r17, 0x0019(r31)
mr r8, r31
bl major_0x14af8_0xa0
sync
lwz r16, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, MPCall_9_0x8c
mflr r16
bl panic
MPCall_9_0x8c
stw r16, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock, scratch=r16
subi r10, r10, 4
b MPCall_6_0x78
@ -728,16 +719,7 @@ KCThrowException_0xb8
stb r17, 0x0019(r31)
mr r8, r31
bl major_0x14af8_0xa0
sync
lwz r16, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, KCThrowException_0xf0
mflr r16
bl panic
KCThrowException_0xf0
stw r16, PSA.SchLock + Lock.Count(r1)
_AssertAndRelease PSA.SchLock, scratch=r16
subi r10, r10, 4
b MPCall_6_0x78

View File

@ -513,16 +513,9 @@ panic_common
_log ' - wish me luck.^n'
bl prereturn
lwz r8, 0x0904(r1)
sync
lwz r9, PSA.ThudLock + Lock.Count(r1)
cmpwi cr1, r9, 0x00
li r9, 0x00
bne+ cr1, @0x7b4
mflr r9
bl panic
@0x7b4
stw r9, PSA.ThudLock + Lock.Count(r1)
_AssertAndRelease PSA.ThudLock, scratch=r9
mtlr r8
blr

View File

@ -188,16 +188,7 @@ VMReturn ; OUTSIDE REFERER
lwz r16, 0x0040(r8)
lwz r7, -0x0010(r8)
lwz r6, -0x0014(r8)
sync
lwz r8, -0x0b90(r1)
cmpwi cr1, r8, 0x00
li r8, 0x00
bne+ cr1, VMReturn_0x4c
mflr r8
bl panic
VMReturn_0x4c
stw r8, -0x0b90(r1)
_AssertAndRelease PSA.HTABLock, scratch=r8
b skeleton_key