Skip to content

Commit

Permalink
Supported Stack Usage feature on HW via cronus
Browse files Browse the repository at this point in the history
Change-Id: I7b5eaa1ee484e4fbd31f12146d3d47dd24344255
RTC: 175229
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/41360
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: Sachin Gupta <sgupta2m@in.ibm.com>
  • Loading branch information
Raja Das authored and sgupta2m committed Jun 6, 2017
1 parent 38e02e4 commit e7bc187
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 19 deletions.
9 changes: 9 additions & 0 deletions src/sbefw/sbeglobals.C
Expand Up @@ -25,6 +25,15 @@
#include "sbetrace.H"
#include "sbeglobals.H"

////////////////////////////////////////////////////////////////
//// @brief Stacks for Non-critical Interrupts and Threads
//////////////////////////////////////////////////////////////////
// Moved it out-side the scope of Global Class for symbol generation in syms
uint8_t sbe_Kernel_NCInt_stack[SBE_NONCRITICAL_STACK_SIZE];
uint8_t sbeCommandReceiver_stack[SBE_THREAD_CMD_RECV_STACK_SIZE];
uint8_t sbeSyncCommandProcessor_stack[SBE_THREAD_SYNC_CMD_PROC_STACK_SIZE];
uint8_t sbeAsyncCommandProcessor_stack[SBE_THREAD_ASYNC_CMD_PROC_STACK_SIZE];

SBEGlobalsSingleton* sbeGlobal = &SBEGlobalsSingleton::getInstance();
SBEGlobalsSingleton& SBEGlobalsSingleton::getInstance()
{
Expand Down
14 changes: 6 additions & 8 deletions src/sbefw/sbeglobals.H
Expand Up @@ -33,6 +33,12 @@

#define SBE_GLOBAL sbeGlobal

// Extern declartion, Defined in sbeglobal.C
extern uint8_t sbe_Kernel_NCInt_stack[SBE_NONCRITICAL_STACK_SIZE];
extern uint8_t sbeCommandReceiver_stack[SBE_THREAD_CMD_RECV_STACK_SIZE];
extern uint8_t sbeSyncCommandProcessor_stack[SBE_THREAD_SYNC_CMD_PROC_STACK_SIZE];
extern uint8_t sbeAsyncCommandProcessor_stack[SBE_THREAD_ASYNC_CMD_PROC_STACK_SIZE];

class SBEGlobalsSingleton
{
public:
Expand Down Expand Up @@ -74,14 +80,6 @@ class SBEGlobalsSingleton
// ffdc address
sbeHostAddr_t hostFFDCAddr;

////////////////////////////////////////////////////////////////
//// @brief Stacks for Non-critical Interrupts and Threads
//////////////////////////////////////////////////////////////////
uint8_t sbe_Kernel_NCInt_stack[SBE_NONCRITICAL_STACK_SIZE];
uint8_t sbeCommandReceiver_stack[SBE_THREAD_CMD_RECV_STACK_SIZE];
uint8_t sbeSyncCommandProcessor_stack[SBE_THREAD_SYNC_CMD_PROC_STACK_SIZE];
uint8_t sbeAsyncCommandProcessor_stack[SBE_THREAD_ASYNC_CMD_PROC_STACK_SIZE];

////////////////////////////////////////////////////////////////
//// @brief PkThread structure for SBE Command Receiver thread
//////////////////////////////////////////////////////////////////
Expand Down
8 changes: 4 additions & 4 deletions src/sbefw/sbemain.C
Expand Up @@ -194,7 +194,7 @@ int sbeInitThreads(void)
l_rc = createAndResumeThreadHelper(&SBE_GLOBAL->sbeCommandReceiver_thread,
sbeCommandReceiver_routine,
(void *)0,
(PkAddress)SBE_GLOBAL->sbeCommandReceiver_stack,
(PkAddress)sbeCommandReceiver_stack,
SBE_THREAD_CMD_RECV_STACK_SIZE,
THREAD_PRIORITY_5);
if (l_rc)
Expand All @@ -206,7 +206,7 @@ int sbeInitThreads(void)
l_rc = createAndResumeThreadHelper(&SBE_GLOBAL->sbeSyncCommandProcessor_thread,
sbeSyncCommandProcessor_routine,
(void *)0,
(PkAddress)SBE_GLOBAL->sbeSyncCommandProcessor_stack,
(PkAddress)sbeSyncCommandProcessor_stack,
SBE_THREAD_SYNC_CMD_PROC_STACK_SIZE,
THREAD_PRIORITY_7);
if (l_rc)
Expand All @@ -218,7 +218,7 @@ int sbeInitThreads(void)
l_rc = createAndResumeThreadHelper(&SBE_GLOBAL->sbeAsyncCommandProcessor_thread,
sbeAsyncCommandProcessor_routine,
(void *)0,
(PkAddress)SBE_GLOBAL->sbeAsyncCommandProcessor_stack,
(PkAddress)sbeAsyncCommandProcessor_stack,
SBE_THREAD_ASYNC_CMD_PROC_STACK_SIZE,
THREAD_PRIORITY_6);
if (l_rc)
Expand Down Expand Up @@ -253,7 +253,7 @@ uint32_t main(int argc, char **argv)
{
// initializes kernel data -
// stack, threads, timebase, timers, etc.
l_rc = pk_initialize((PkAddress)SBE_GLOBAL->sbe_Kernel_NCInt_stack,
l_rc = pk_initialize((PkAddress)sbe_Kernel_NCInt_stack,
SBE_NONCRITICAL_STACK_SIZE,
0,
SBE_GLOBAL->sbefreq );
Expand Down
51 changes: 48 additions & 3 deletions src/tools/debug/sbe-debug.py
Expand Up @@ -30,6 +30,7 @@
import getopt
import sys
import binascii
import struct
err = False

baseAddr = 0xfffe8000
Expand Down Expand Up @@ -224,6 +225,47 @@ def collectAttr( sbeObjDir, target, node, proc, ddsuffix, file_path ):
print "ERROR running %s: %d " % ( cmd3, rc )
return 1

def collectStackUsage (node, proc ):
threads = ('sbeSyncCommandProcessor_stack',
'sbeCommandReceiver_stack',
'sbe_Kernel_NCInt_stack',
'sbeAsyncCommandProcessor_stack')
for thread in threads:
offset = getOffset( thread );
len = "0x" + syms[thread][1];
cmd1 = ("p9_pibmem_dump_wrap.exe -quiet -start_byte " + \
str(offset) +\
" -num_of_byte " + len + " "
" -n" + str(node) + " -p" + str(proc))
print "cmd1:", cmd1
rc = os.system( cmd1 )
if ( rc ):
print "ERROR running %s: %d " % ( cmd1, rc )
return 1

# Dump stack memory to binary file
cmd2 = "cat DumpPIBMEM >>"+thread
print "cmd2:", cmd2
rc = os.system( cmd2 )
if (rc):
print "ERROR running %s: %d " % ( cmd2, rc )
return 1

print "==================================Stack usage==================================="
print "Thread".ljust(40)+"Least Available[bytes]".ljust(30)+"Max usage[%]"
for thread in threads:
with open(thread, "rb") as f:
word = struct.unpack('I', f.read(4))[0]
leastAvailable = 0
while (1):
if (word == int("0xEFCDAB03", 16)):
leastAvailable += 4
word = struct.unpack('I', f.read(4))[0]
else:
break
print str("["+thread+"]").ljust(40) + str(leastAvailable).ljust(30) + str("%.2f" % (100 * (1 - (leastAvailable/float(int("0x"+syms[thread][1], 16))))))


def ppeState( target, node, proc, file_path ):
if(target == 'FILE'):
print "File path: ", file_path
Expand Down Expand Up @@ -357,7 +399,7 @@ def usage():
\n\
optional arguments:\n\
-h, --help show this help message and exitn\n\
-l {trace,attr,ppestate,sbestate,sbestatus,sbelocalregister}, --level {trace,attr,ppestate,sbestate,sbestatus,sbelocalregister}\n\
-l {trace,attr,stack,ppestate,sbestate,sbestatus,sbelocalregister}, --level {trace,attr,stack,ppestate,sbestate,sbestatus,sbelocalregister}\n\
Parser level\n\
-t {AWAN,HW,FILE}, --target {AWAN,HW,FILE}\n\
Target type\n\
Expand Down Expand Up @@ -388,10 +430,10 @@ def main( argv ):
usage()
exit(1)
elif opt in ('-l', '--level'):
if arg in ('trace', 'forced-trace','attr','ppestate','sbestate','sbestatus','sbelocalregister'):
if arg in ('trace', 'forced-trace','attr','stack','ppestate','sbestate','sbestatus','sbelocalregister'):
level = arg
else:
print "level should be one of {trace,attr,ppestate,sbestate,sbestatus,sbelocalregister}"
print "level should be one of {trace,attr,stack,ppestate,sbestate,sbestatus,sbelocalregister}"
exit(1)
elif opt in ('-t', '--target'):
if arg in ('AWAN', 'HW', 'FILE'):
Expand Down Expand Up @@ -471,6 +513,9 @@ def main( argv ):
sbeStatus( target, node, proc )
elif ( level == 'sbelocalregister' ):
sbeLocalRegister( target, node, proc, file_path )
elif ( level == 'stack' ):
fillSymTable(getSbeObjPath(), target, ddsuffix)
collectStackUsage( node, proc )

if(target != 'FILE'):
# On cronus, set the FIFO mode to previous state
Expand Down
8 changes: 4 additions & 4 deletions src/tools/debug/simics-debug-framework.py
Expand Up @@ -104,10 +104,10 @@ def fillSymTable():
# the first memory address where the pattern('0xEFCDAB03') is broken,
# will be the deepest stack usage point of tht thread during the run
def collectStackUsage ( procNr ):
threads = ('g_sbeSyncCommandProcessor_stack',
'g_sbeCommandReceiver_stack',
'g_sbe_Kernel_NCInt_stack',
'g_sbeAsyncCommandProcessor_stack')
threads = ('sbeSyncCommandProcessor_stack',
'sbeCommandReceiver_stack',
'sbe_Kernel_NCInt_stack',
'sbeAsyncCommandProcessor_stack')
print "==================================Stack usage==================================="
# Dump stack memory to binary files
for thread in threads:
Expand Down

0 comments on commit e7bc187

Please sign in to comment.