diff options
| author | Dean Sanner <dsanner@us.ibm.com> | 2018-02-04 08:31:59 -0600 |
|---|---|---|
| committer | William G. Hoffa <wghoffa@us.ibm.com> | 2018-02-06 12:04:48 -0500 |
| commit | 7b2ee59900c674255f559034535923709b4ae070 (patch) | |
| tree | fb8e798816e1f52d46ce3f2c5674b48720449ffe /src/usr/mbox | |
| parent | 9225a7cd9cfa3d29d32d46f2fd9a76ff3e53df37 (diff) | |
| download | talos-hostboot-7b2ee59900c674255f559034535923709b4ae070.tar.gz talos-hostboot-7b2ee59900c674255f559034535923709b4ae070.zip | |
Fixes for multinode istep 21.1
-Reordered start_payload to ensure that common things like
disabling special wakeup, closing down SBE windows, core xstop,
and clearing PM bars are executed as part of our shutdown path
-Due to above, needed to correct shared libs loaded on non master
HB instance
-Added back in the P8 code to pass the payload base to slave HB
Instances on populate attr IPC message
Change-Id: I5371b9daf7a4e1aadd1743badcd4219604a38ce7
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/53343
Tested-by: William G. Hoffa <wghoffa@us.ibm.com>
Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com>
Diffstat (limited to 'src/usr/mbox')
| -rw-r--r-- | src/usr/mbox/ipcSp.C | 54 |
1 files changed, 36 insertions, 18 deletions
diff --git a/src/usr/mbox/ipcSp.C b/src/usr/mbox/ipcSp.C index 2004c6f91..f38b92454 100644 --- a/src/usr/mbox/ipcSp.C +++ b/src/usr/mbox/ipcSp.C @@ -113,6 +113,10 @@ void IpcSp::msgHandler() if(!err) { + // msg->extra_data contains PAYLOAD Base + RUNTIME::setPayloadBaseAddress( + reinterpret_cast<uint64_t>(msg->extra_data)); + // msg->data[0] contains the node number err = RUNTIME::populate_HbRsvMem( msg->data[0] ); } @@ -170,22 +174,32 @@ void IpcSp::msgHandler() break; case IPC_START_PAYLOAD: - - if ( !VFS::module_is_loaded( "libstart_payload.so" ) ) + { + const int NUM_MOD = 3; + const char * mods[NUM_MOD] = + {"libp9_cpuWkup.so", "libistep21.so", "libpm.so"}; + bool loaded_mods[NUM_MOD] = {false, false, false}; + for (auto cnt = 0; cnt < NUM_MOD; ++cnt) { - err = VFS::module_load( "libstart_payload.so" ); - - if ( err ) - { - TRACFCOMP( g_trac_ipc, - "Could not load runtime module" ); - } - else + if ( !VFS::module_is_loaded( mods[cnt] ) ) { - mod_loaded = true; + err = VFS::module_load( mods[cnt] ); + + if ( err ) + { + TRACFCOMP( g_trac_ipc, + "Could not load %s module", mods[cnt] ); + break; + } + else + { + loaded_mods[cnt] = true; + } } } + if (err) break; + if(!err) { // Function will not return unless error @@ -199,21 +213,25 @@ void IpcSp::msgHandler() INITSERVICE::doShutdown(l_errPlid, true); } - if(mod_loaded) + for (auto cnt = 0; cnt < NUM_MOD; ++cnt) { - err = VFS::module_unload( "libstart_payload.so" ); - - if (err) + if ( loaded_mods[cnt] ) { - errlCommit(err, IPC_COMP_ID); + err = VFS::module_unload( mods[cnt] ); + + if (err) + { + errlCommit(err, IPC_COMP_ID); + } + loaded_mods[cnt] = false; } - mod_loaded = false; + } msg_free(msg); break; - + } default: TRACFCOMP( g_trac_ipc, |

