summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPatrick Williams <iawillia@us.ibm.com>2013-01-25 11:36:52 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-02-04 13:30:48 -0600
commit0782c6e3bb7ccd9b7e4e963a1aa6b2521e6b275d (patch)
treedc2de4b79288cb160d539a7d37cf10f181227187 /src
parent6ba9a7790919fc430ddf1539579fdb4e9e7bba0d (diff)
downloadblackbird-hostboot-0782c6e3bb7ccd9b7e4e963a1aa6b2521e6b275d.tar.gz
blackbird-hostboot-0782c6e3bb7ccd9b7e4e963a1aa6b2521e6b275d.zip
Turn InitService::doShutdown into a NO_RETURN
There are a few places outside of initservice where Hostboot shutdown needs to be called. Currently the doShutdown returns so each of these places have a while(1); style loop. In the case of start_payload, their implementation of this loop was incorrect and causes us to take longer than desired to actually shutdown. I have changed doShutdown into a NO_RETURN function that keeps the correct loop done in a common way. See defect SW183911 for more background. Change-Id: I819eecadcddd2436f1c52571e48258316b43f38c Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/3028 Tested-by: Jenkins Server Reviewed-by: ADAM R. MUHLE <armuhle@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src')
-rw-r--r--src/include/usr/initservice/initserviceif.H48
-rw-r--r--src/usr/hwpf/hwp/start_payload/start_payload.C7
-rw-r--r--src/usr/initservice/baseinitsvc/initservice.C11
-rw-r--r--src/usr/pnor/pnorrp.C2
4 files changed, 33 insertions, 35 deletions
diff --git a/src/include/usr/initservice/initserviceif.H b/src/include/usr/initservice/initserviceif.H
index aac8885aa..f09433e15 100644
--- a/src/include/usr/initservice/initserviceif.H
+++ b/src/include/usr/initservice/initserviceif.H
@@ -1,25 +1,25 @@
-// IBM_PROLOG_BEGIN_TAG
-// This is an automatically generated prolog.
-//
-// $Source: src/include/usr/initservice/initserviceif.H $
-//
-// IBM CONFIDENTIAL
-//
-// COPYRIGHT International Business Machines Corp. 2011
-//
-// p1
-//
-// Object Code Only (OCO) source materials
-// Licensed Internal Code Source Materials
-// IBM HostBoot Licensed Internal Code
-//
-// The source code for this program is not published or other-
-// wise divested of its trade secrets, irrespective of what has
-// been deposited with the U.S. Copyright Office.
-//
-// Origin: 30
-//
-// IBM_PROLOG_END
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/include/usr/initservice/initserviceif.H $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2011,2013 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
#ifndef __INITSERVICE_INITSERVICEIF_H
#define __INITSERVICE_INITSERVICEIF_H
@@ -86,10 +86,12 @@ bool unregisterShutdownEvent(msg_q_t i_msgQ);
* payload entry-point.
*
* @return Nothing
+ *
+ * @note Never returns.
*/
void doShutdown ( uint64_t i_status,
uint64_t i_payload_base = 0,
- uint64_t i_payload_entry = 0 );
+ uint64_t i_payload_entry = 0 ) NO_RETURN;
}
diff --git a/src/usr/hwpf/hwp/start_payload/start_payload.C b/src/usr/hwpf/hwp/start_payload/start_payload.C
index 544499b21..205dc105a 100644
--- a/src/usr/hwpf/hwp/start_payload/start_payload.C
+++ b/src/usr/hwpf/hwp/start_payload/start_payload.C
@@ -358,13 +358,6 @@ errlHndl_t callShutdown ( void )
payloadBase,
payloadEntry );
- // Hang out here until shutdown happens
- int status = 0x0;
- while( 1 )
- {
- task_wait( &status,
- NULL );
- }
} while( 0 );
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
diff --git a/src/usr/initservice/baseinitsvc/initservice.C b/src/usr/initservice/baseinitsvc/initservice.C
index 7267a5dd1..98b9a6a2c 100644
--- a/src/usr/initservice/baseinitsvc/initservice.C
+++ b/src/usr/initservice/baseinitsvc/initservice.C
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2011,2012 */
+/* COPYRIGHT International Business Machines Corp. 2011,2013 */
/* */
/* p1 */
/* */
@@ -551,7 +551,7 @@ void InitService::init( void *io_ptr )
// Set the shutdown status to be the plid to force a TI
l_shutdownStatus = l_errl->plid();
- errlCommit( l_errl, INITSVC_COMP_ID );
+ errlCommit( l_errl, INITSVC_COMP_ID );
}
@@ -619,6 +619,11 @@ void doShutdown ( uint64_t i_status,
Singleton<InitService>::instance().doShutdown( i_status,
i_payload_base,
i_payload_entry );
+
+ while(1)
+ {
+ task_yield();
+ };
}
void InitService::doShutdown(uint64_t i_status,
@@ -673,7 +678,7 @@ void InitService::doShutdown(uint64_t i_status,
}
l_rb_iter++;
}
-
+
shutdown(i_status, i_payload_base, i_payload_entry);
}
diff --git a/src/usr/pnor/pnorrp.C b/src/usr/pnor/pnorrp.C
index 03159fb15..974f91d3a 100644
--- a/src/usr/pnor/pnorrp.C
+++ b/src/usr/pnor/pnorrp.C
@@ -425,7 +425,6 @@ errlHndl_t PnorRP::readTOC()
{
//Shutdown if we detected a partition table issue for any reason
INITSERVICE::doShutdown( PNOR::RC_PARTITION_TABLE_INVALID);
- while(1) { task_yield(); }
}
ffs_hb_user_t* ffsUserData = NULL;
@@ -492,7 +491,6 @@ errlHndl_t PnorRP::readTOC()
TRACFCOMP(g_trac_pnor, "E>PnorRp::readTOC: Partition(%s) at base address (0x%.8x) extends past end of flash device",
cur_entry->name, iv_TOC[cur_side][secId].flashAddr);
INITSERVICE::doShutdown( PNOR::RC_PARTITION_TABLE_INVALID);
- while(1) { task_yield(); }
}
cur_entry++;
OpenPOWER on IntegriCloud