summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf
diff options
context:
space:
mode:
authorBill Hoffa <wghoffa@us.ibm.com>2014-03-27 10:16:15 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-05-29 12:49:26 -0500
commita8e490184f0f436d8fa1e175c7f9d7368923340b (patch)
treee967ed626d53e1f13aaac3b81bd2f83ad9f0bca0 /src/usr/hwpf
parent192aff0a38f60718af72a730b0c968a35a56d74f (diff)
downloadtalos-hostboot-a8e490184f0f436d8fa1e175c7f9d7368923340b.tar.gz
talos-hostboot-a8e490184f0f436d8fa1e175c7f9d7368923340b.zip
Only accept Istep Messages to Master Node after system SMP established
Change-Id: I993a9684b4ee93541b75b4bfc22f22ddad5bedb5 RTC:93394 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/10012 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/hwpf')
-rw-r--r--src/usr/hwpf/hwp/establish_system_smp/establish_system_smp.C30
1 files changed, 28 insertions, 2 deletions
diff --git a/src/usr/hwpf/hwp/establish_system_smp/establish_system_smp.C b/src/usr/hwpf/hwp/establish_system_smp/establish_system_smp.C
index e22e76a96..912ababed 100644
--- a/src/usr/hwpf/hwp/establish_system_smp/establish_system_smp.C
+++ b/src/usr/hwpf/hwp/establish_system_smp/establish_system_smp.C
@@ -71,6 +71,7 @@
// #include "host_coalesce_host/host_coalesce_host.H"
#include "p8_block_wakeup_intr/p8_block_wakeup_intr.H"
#include "p8_cpu_special_wakeup.H"
+#include <initservice/istepdispatcherif.H>
namespace ESTABLISH_SYSTEM_SMP
{
@@ -212,12 +213,11 @@ errlHndl_t call_host_coalesce_host( )
const INTR::PIR_t masterCpu = task_getcpuid();
uint64_t this_node = masterCpu.nodeId;
-
//loop though all possible drawers whether they exist or not
// An invalid or non-existant logical node number in that drawer
// indicates that the drawer does not exist.
-
TARGETING::ATTR_HB_EXISTING_IMAGE_type mask = 0x0;
+ TARGETING::ATTR_HB_EXISTING_IMAGE_type master_node_mask = 0x0;
for(uint16_t drawer = 0; drawer < NUMBER_OF_POSSIBLE_NODES; ++drawer)
{
@@ -235,6 +235,12 @@ errlHndl_t call_host_coalesce_host( )
mask,hb_existing_image);
if( 0 != ((mask >> node) & hb_existing_image ) )
{
+ //The first nonzero bit in hb_existing_image represents the
+ // master node, set mask for later comparison
+ if (master_node_mask == 0)
+ {
+ master_node_mask = mask;
+ }
TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"send coalese host message to drawer %d",
drawer );
@@ -259,6 +265,26 @@ errlHndl_t call_host_coalesce_host( )
//the other nodes
if(l_errl == NULL)
{
+ // reset mask to msb
+ mask = 0x1 << (NUMBER_OF_POSSIBLE_NODES -1);
+ //create mask to apply to hb_existing_image for this particular node
+ mask = mask >> this_node;
+
+ if (master_node_mask & (hb_existing_image & mask))
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "Master Node detected, continue allowing "
+ "istep messages to this node.");
+ INITSERVICE::setAcceptIstepMessages(true);
+ }
+ else
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "This node is not the master node, no longer "
+ "respond to istep messages.");
+ INITSERVICE::setAcceptIstepMessages(false);
+ }
+
//wait for all hb images to respond
//want to spawn a timer thread
tid_t l_progTid = task_create(
OpenPOWER on IntegriCloud