summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/prdf/common/plat/p9/prdfLineDelete.H
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/diag/prdf/common/plat/p9/prdfLineDelete.H')
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/p9/prdfLineDelete.H146
1 files changed, 146 insertions, 0 deletions
diff --git a/src/usr/diag/prdf/common/plat/p9/prdfLineDelete.H b/src/usr/diag/prdf/common/plat/p9/prdfLineDelete.H
new file mode 100755
index 000000000..8cad7dc9b
--- /dev/null
+++ b/src/usr/diag/prdf/common/plat/p9/prdfLineDelete.H
@@ -0,0 +1,146 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/diag/prdf/common/plat/p9/prdfLineDelete.H $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2005,2016 */
+/* [+] International Business Machines Corp. */
+/* */
+/* */
+/* Licensed under the Apache License, Version 2.0 (the "License"); */
+/* you may not use this file except in compliance with the License. */
+/* You may obtain a copy of the License at */
+/* */
+/* http://www.apache.org/licenses/LICENSE-2.0 */
+/* */
+/* Unless required by applicable law or agreed to in writing, software */
+/* distributed under the License is distributed on an "AS IS" BASIS, */
+/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
+/* implied. See the License for the specific language governing */
+/* permissions and limitations under the License. */
+/* */
+/* IBM_PROLOG_END_TAG */
+
+/** @file prdfLineDelete.H
+ * Contains the definitions needed for the line delete algorithms and the CE
+ * table.
+ */
+
+#ifndef __PRDFLINEDELETE_H
+#define __PRDFLINEDELETE_H
+
+#include <UtilSMap.H>
+#include <prdfThresholdResolutions.H>
+#include <iipstep.h>
+#include <iipCaptureData.h>
+
+namespace PRDF
+{
+
+/** @namespace LineDelete
+ * Namespace to encapsulate all of the LineDelete specific classes and enums.
+ */
+namespace LineDelete
+{
+
+ /** @enum CacheType
+ * Used to express where a cache error occurred.
+ */
+ enum CacheType
+ {
+ L3 = 0,
+ L3_DIR = 1,
+ L2 = 2,
+ L2_DIR = 4,
+ CACHE_MASK = L3 | L3_DIR | L2 | L2_DIR,
+
+ SLICE_A = 8,
+ SLICE_B = 16,
+ SLICE_MASK = SLICE_A | SLICE_B
+ };
+
+ /** @enum CacheErrorType
+ * Used to express the types of cache errors that can occur.
+ */
+ enum CacheErrorType
+ {
+ UE, CE
+ };
+
+ /** @typedef PrdfCacheAddress
+ * Used to index cache error hits in the CE table.
+ */
+ typedef uint32_t PrdfCacheAddress;
+
+ /** @typedef PrdfCacheAddressTable
+ * Maps Cache Addresses to hit counts.
+ */
+ typedef UtilSMap<PrdfCacheAddress, uint32_t> PrdfCacheAddressTable;
+
+ /** @class PrdfCacheCETable
+ * Used to store and threshold cache CE errors.
+ *
+ * Takes a threshold policy (such as "2 per day") and allows that many hits
+ * per address before signalling "at threshold". (the 2nd occurrence would
+ * be the at threshold).
+ *
+ * @note This is now being used for eRepair as well as cache CEs.
+ */
+ class PrdfCacheCETable
+ {
+ public:
+
+ /** Default constructor */
+ PrdfCacheCETable() {}
+
+ /**
+ * @brief Constructor from ThresholdPolicy struct.
+ * @param i_thPolicy A pointer to a ThresholdPolicy struct.
+ */
+ explicit PrdfCacheCETable(
+ const ThresholdResolution::ThresholdPolicy i_thPolicy ) :
+ iv_thPolicy(i_thPolicy), cv_flushTimerInited(false)
+ {}
+
+ // NOTE: iv_thPolicy should never be deleted in this class so the
+ // default destructor will be sufficient.
+
+ /** @fn addAddress
+ * Insert an address into the CE table.
+ *
+ * @param The CE address.
+ * @param The Service Data Collector to get the current time.
+ *
+ * @return true - if the threshold policy has been reached.
+ * @return false - if the threshold policy has not been reached.
+ */
+ bool addAddress(PrdfCacheAddress, STEP_CODE_DATA_STRUCT &);
+
+ /** @fn PrdfCacheCETable::isIntervalElapsed()
+ * @param STEP_CODE_DATA_STRUCT & i_sdc
+ * @return TRUE if the interval time has elapsed.
+ */
+ bool isIntervalElapsed( STEP_CODE_DATA_STRUCT & i_sdc );
+
+ /** @fn flushTable
+ * Clear all CE hits from the table and reset timer to 0.
+ */
+ void flushTable();
+
+ private:
+
+ ThresholdResolution::ThresholdPolicy iv_thPolicy;
+ PrdfCacheAddressTable cv_ceTable;
+ Timer cv_flushTimer;
+ bool cv_flushTimerInited;
+
+ };
+
+};
+
+} // end namespace PRDF
+
+#endif
+
OpenPOWER on IntegriCloud