diff options
Diffstat (limited to 'src/usr/targeting/targetservicestart.C')
-rwxr-xr-x | src/usr/targeting/targetservicestart.C | 47 |
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); |