diff options
Diffstat (limited to 'src/usr/runtime')
| -rw-r--r-- | src/usr/runtime/hdatservice.C | 67 | ||||
| -rw-r--r-- | src/usr/runtime/hdatservice.H | 17 | ||||
| -rw-r--r-- | src/usr/runtime/hdatstructs.H | 3 |
3 files changed, 86 insertions, 1 deletions
diff --git a/src/usr/runtime/hdatservice.C b/src/usr/runtime/hdatservice.C index c9d8c3681..f82d7bfe4 100644 --- a/src/usr/runtime/hdatservice.C +++ b/src/usr/runtime/hdatservice.C @@ -39,6 +39,7 @@ #include "errlud_hdat.H" #include <errl/errlmanager.H> #include <targeting/attrrp.H> +#include <dump/dumpif.H> //#define REAL_HDAT_TEST @@ -912,6 +913,21 @@ errlHndl_t hdatService::getHostDataSection( SectionId i_section, if( errhdl ) { break; } } + // Processor Dump Area table + else if( RUNTIME::PROC_DUMP_AREA_TBL == i_section ) + { + // Find the right tuple and verify it makes sense + errhdl = getAndCheckTuple(i_section, tuple); + if( errhdl ) { break; } + TRACUCOMP( g_trac_runtime, "PROCESSOR_DUMP_AREA_TBL tuple=%p", tuple ); + + //Note - there is no header for the Processor dump area table + //return the total allocated size since it is empty at first + o_dataSize = tuple->hdatAllocSize * tuple->hdatAllocCnt; + record_size = tuple->hdatAllocSize; + errhdl = getSpiraTupleVA(tuple, o_dataAddr); + if( errhdl ) { break; } + } else if( RUNTIME::HRMOR_STASH == i_section ) { //Look up the tuple that this section is located in @@ -1236,6 +1252,42 @@ errlHndl_t hdatService::findSpira( void ) return errhdl; } +errlHndl_t hdatService::updateHostProcDumpActual( SectionId i_section, + uint32_t threadRegSize, + uint8_t threadRegVersion, + uint64_t capArrayAddr, + uint32_t capArraySize) +{ + errlHndl_t errhdl = nullptr; + TRACFCOMP( g_trac_runtime, + "RUNTIME::updateHostProcDumpActual ( i_section=%d )", i_section); + + do + { + uint64_t l_hostDataAddr = 0; + uint64_t l_hostDataSize = 0; + DUMP::procDumpAreaEntry *procDumpTable = nullptr; + + // Get proc dump area ntuple address + errhdl = getHostDataSection(i_section, 0, + l_hostDataAddr, l_hostDataSize); + if (errhdl) + { + TRACFCOMP( g_trac_runtime, "updateHostProcDumpActual> Failed to " + "get host data section (i_section=%d )", i_section); + break; + } + + procDumpTable = reinterpret_cast<DUMP::procDumpAreaEntry *>(l_hostDataAddr); + procDumpTable->threadRegSize = threadRegSize; + procDumpTable->threadRegVersion = threadRegVersion; + procDumpTable->capArrayAddr = capArrayAddr; + procDumpTable->capArraySize = capArraySize; + } while(0); + + return errhdl; +} + errlHndl_t hdatService::updateHostDataSectionActual( SectionId i_section, uint16_t i_count ) { @@ -1550,6 +1602,10 @@ errlHndl_t hdatService::getAndCheckTuple(const SectionId i_section, l_spiraH = SPIRAH_MS_DUMP_RSLT_TBL; l_spiraL = SPIRAL_MS_DUMP_RSLT_TBL; break; + case RUNTIME::PROC_DUMP_AREA_TBL: + l_spiraH = SPIRAH_PROC_DUMP_TBL; + l_spiraL = SPIRAL_INVALID; + break; case RUNTIME::HSVC_SYSTEM_DATA: case RUNTIME::HSVC_NODE_DATA: l_spiraS = SPIRAS_HSVC_DATA; @@ -1773,6 +1829,17 @@ errlHndl_t writeActualCount( SectionId i_id ) return Singleton<hdatService>::instance().writeActualCount(i_id); } +errlHndl_t updateHostProcDumpActual( SectionId i_section, + uint32_t threadRegSize, + uint8_t threadRegVersion, + uint64_t capArrayAddr, + uint32_t capArraySize) +{ + return Singleton<hdatService>::instance().updateHostProcDumpActual(i_section, + threadRegSize, threadRegVersion, + capArrayAddr, capArraySize); +} + void useRelocatedPayloadAddr(bool val) { return Singleton<hdatService>::instance().useRelocatedPayloadAddr(val); diff --git a/src/usr/runtime/hdatservice.H b/src/usr/runtime/hdatservice.H index 44ff12a58..1ea48d8f2 100644 --- a/src/usr/runtime/hdatservice.H +++ b/src/usr/runtime/hdatservice.H @@ -129,6 +129,23 @@ namespace RUNTIME uint16_t i_count ); /** + * @brief Update Processor Dump area section. + * + * @param[in] i_section Chunk of data to find + * @param[in] threadRegSize Size of each thread register data + * @param[in] threadRegVersion Register data format version + * @param[in] capArrayAddr Destination memory address + * @param[in] capArraySize Destination memory size + * + * @return errlHndl_t NULL on success + */ + errlHndl_t updateHostProcDumpActual( SectionId i_section, + uint32_t threadRegSize, + uint8_t threadRegVersion, + uint64_t capArrayAddr, + uint32_t capArraySize); + + /** * @brief Retrieve and log FFDC data relevant to a given section of * host data memory * diff --git a/src/usr/runtime/hdatstructs.H b/src/usr/runtime/hdatstructs.H index 2f05a2a70..94f4c1b71 100644 --- a/src/usr/runtime/hdatstructs.H +++ b/src/usr/runtime/hdatstructs.H @@ -121,7 +121,8 @@ enum hdatSpiraHDataAreas SPIRAH_MS_DUMP_SRC_TBL = 3, // mainstore dump source table SPIRAH_MS_DUMP_DST_TBL = 4, // mainstore dump destination table SPIRAH_MS_DUMP_RSLT_TBL = 5, // mainstore dump results table - SPIRAH_LAST = 5 + SPIRAH_PROC_DUMP_TBL = 6, // Proc reg dump area table + SPIRAH_LAST = 6 }; /** @enum hdatSpiraSDataAreas |

