summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_rt.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_rt.C')
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_rt.C20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_rt.C b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_rt.C
index af4acc15b..2fef2fd9a 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_rt.C
+++ b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_rt.C
@@ -185,6 +185,22 @@ uint32_t MemTdCtlr<T>::handleTdEvent( STEP_CODE_DATA_STRUCT & io_sc )
// Don't interrupt a TD procedure if one is already in progress.
if ( nullptr != iv_curProcedure ) break;
+ // If the queue is empty, there is nothing to do. So there is no point
+ // to stopping background scrub. This could have happen if TPS was
+ // banned on a rank and the TPS request was never added to the queue. In
+ // that case, mask fetch attentions temporarily to prevent flooding.
+ if ( iv_queue.empty() )
+ {
+ o_rc = maskEccAttns();
+ if ( SUCCESS != o_rc )
+ {
+ PRDF_ERR( PRDF_FUNC "maskEccAttns() failed" );
+ break;
+ }
+
+ break; // Don't stop background scrub.
+ }
+
// Stop background scrubbing.
o_rc = stopBgScrub<T>( iv_chip );
if ( SUCCESS != o_rc )
@@ -849,8 +865,6 @@ uint32_t MemTdCtlr<TYPE_MBA>::maskEccAttns()
break;
}
- iv_fetchAttnsMasked = true;
-
} while (0);
return o_rc;
@@ -903,8 +917,6 @@ uint32_t MemTdCtlr<TYPE_MBA>::unmaskEccAttns()
break;
}
- iv_fetchAttnsMasked = false;
-
} while (0);
return o_rc;
OpenPOWER on IntegriCloud