summaryrefslogtreecommitdiffstats
path: root/src/usr/targeting/targetservicestart.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/targeting/targetservicestart.C')
-rwxr-xr-xsrc/usr/targeting/targetservicestart.C47
1 files changed, 38 insertions, 9 deletions
diff --git a/src/usr/targeting/targetservicestart.C b/src/usr/targeting/targetservicestart.C
index 20dce1e48..795bd4072 100755
--- a/src/usr/targeting/targetservicestart.C
+++ b/src/usr/targeting/targetservicestart.C
@@ -221,29 +221,40 @@ static void initTargeting(errlHndl_t& io_pError)
}
}
- initializeAttributes(l_targetService, l_isMpipl, l_isIstepMode, l_scratch);
- //Ensure all mutex attributes are reset on MPIPL
+ initializeAttributes(l_targetService, l_isMpipl, l_isIstepMode,
+ l_scratch);
+
+
+ uint32_t l_peerTargetsAdjusted = 0;
+ uint32_t l_numberMutexAttrsReset = 0;
+
if(l_isMpipl)
{
- // updatePeerTargets will write to read-only attribute pages
- // to get around vmm fails we need to allow writes to readonly
- // memory for the duration of this loop (unlocking is done above)
- uint32_t l_peerTargetsAdjusted = 0;
- uint32_t l_numberMutexAttrsReset = 0;
+
+
for( auto targ_iter = l_targetService.begin();
targ_iter != l_targetService.end();
targ_iter++)
{
const Target* l_pTarget = *targ_iter;
- // Check if there any mutex attributes we need to reset on this target
- l_numberMutexAttrsReset += l_targetService.resetMutexAttributes(l_pTarget);
+
+ // Ensure all mutex attributes are setup correctly for MPIPL
+ // Check if there any mutex attributes
+ // we need to reset on this target
+ l_numberMutexAttrsReset +=
+ l_targetService.resetMutexAttributes(l_pTarget);
// Update any peer target addresses if necessary
+ // updatePeerTargets will write to read-only attribute pages.
+ // To get around vmm fails we need to allow writes to readonly
+ // memory for the duration of this loop (unlocking is done
+ // above).
if(l_targetService.updatePeerTarget(l_pTarget))
{
l_peerTargetsAdjusted++;
}
}
+
// Now that the loop is complete we can re-apply
// the read only permissions to the read only attr pages
l_targetService.modifyReadOnlyPagePermissions(false);
@@ -252,6 +263,24 @@ static void initTargeting(errlHndl_t& io_pError)
TARG_INF("Number of mutex attributes reset: %d",
l_numberMutexAttrsReset);
}
+ else
+ {
+
+ for( auto targ_iter = l_targetService.begin();
+ targ_iter != l_targetService.end();
+ targ_iter++)
+ {
+ const Target* l_pTarget = *targ_iter;
+
+ // Ensure all mutex attributes are setup correctly for IPL
+ // Recursive Mutexes need to be setup since they are defaulted
+ // to all zero.
+ // Check if there any mutex attributes
+ // we need to reset on this target
+ l_targetService.resetMutexAttributes(l_pTarget);
+ }
+ }
+
checkProcessorTargeting(l_targetService);
OpenPOWER on IntegriCloud