diff options
author | Bill Hoffa <wghoffa@us.ibm.com> | 2016-10-19 09:10:01 -0500 |
---|---|---|
committer | Matthew A. Ploetz <maploetz@us.ibm.com> | 2016-10-19 16:11:26 -0400 |
commit | f3d835dd8cdb5b1eab5a747a2ae90f602dff1653 (patch) | |
tree | cb213ac2b0174d0d894e59e7e72fc2d9a96a20b7 /src/usr | |
parent | 57e83ceb340b9cfb81205eef3d64f657f3636a38 (diff) | |
download | talos-hostboot-f3d835dd8cdb5b1eab5a747a2ae90f602dff1653.tar.gz talos-hostboot-f3d835dd8cdb5b1eab5a747a2ae90f602dff1653.zip |
Mask Interrupt Sources Prior to Resetting Interrupt Logic
Change-Id: If97c08fc1a5133c8b14c9262694235c2783c5bbf
CQ: SW369405
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/31492
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Prachi Gupta <pragupta@us.ibm.com>
Reviewed-by: Matthew A. Ploetz <maploetz@us.ibm.com>
Diffstat (limited to 'src/usr')
-rw-r--r-- | src/usr/intr/intrrp.C | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/usr/intr/intrrp.C b/src/usr/intr/intrrp.C index 1a0c86c70..b6092cde5 100644 --- a/src/usr/intr/intrrp.C +++ b/src/usr/intr/intrrp.C @@ -1554,6 +1554,10 @@ errlHndl_t IntrRp::checkAddress(uint64_t i_addr) void IntrRp::shutDown(uint64_t i_status) { msg_t * rmsg = msg_allocate(); + errlHndl_t l_err = NULL; + + TRACFCOMP(g_trac_intr, "IntrRp::shutDown - Sending shutdown message" + " to registered handlers"); // Call everyone and say shutting down! for(Registry_t::iterator r = iv_registry.begin(); @@ -1579,9 +1583,17 @@ void IntrRp::shutDown(uint64_t i_status) msg_free(rmsg); - //Reset PSIHB Interrupt Space - TRACDCOMP(g_trac_intr, "Reset PSIHB Interrupt Space"); + //Mask any future interrupts to avoid receiving anymore while in the process + // of resetting the rest of the Interrupt Logic + l_err = maskAllInterruptSources(); + if (l_err) + { + delete l_err; //errl comp already shutdown. Log error and continue + TRACFCOMP(g_trac_intr, "IntrRp::shutDown() Error masking all interrupt sources."); + } + //Reset PSIHB Interrupt Space + TRACFCOMP(g_trac_intr, "Reset PSIHB Interrupt Space"); //First reset INTRP logic for slave procs for(ChipList_t::iterator targ_itr = iv_chipList.begin(); @@ -1598,7 +1610,7 @@ void IntrRp::shutDown(uint64_t i_status) //Then reset master proc INTRP logic PSIHB_SW_INTERFACES_t * this_psihb_ptr = iv_masterHdlr->psiHbBaseAddr; this_psihb_ptr->icr = PSI_BRIDGE_INTP_STATUS_CTL_RESET; - TRACDCOMP(g_trac_intr, "Reset PSIHB INTR Complete"); + TRACFCOMP(g_trac_intr, "Reset PSIHB INTR Complete"); //Reset XIVE Interrupt unit resetIntUnit(iv_masterHdlr); |