aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/opal.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/core/opal.c b/core/opal.c
index 3642fb0..e3a3bbd 100644
--- a/core/opal.c
+++ b/core/opal.c
@@ -552,20 +552,25 @@ void opal_run_pollers(void)
bool was_in_poller;
/* Don't re-enter on this CPU, unless it was an OPAL re-entry */
- if (this_cpu()->in_opal_call == 1 &&
- this_cpu()->in_poller && poller_recursion < 16) {
+ if (this_cpu()->in_opal_call == 1 && this_cpu()->in_poller) {
+
/**
* @fwts-label OPALPollerRecursion
* @fwts-advice Recursion detected in opal_run_pollers(). This
* indicates a bug in OPAL where a poller ended up running
* pollers, which doesn't lead anywhere good.
*/
- disable_fast_reboot("Poller recursion detected.");
- prlog(PR_ERR, "OPAL: Poller recursion detected.\n");
- backtrace();
poller_recursion++;
+ if (poller_recursion <= 16) {
+ disable_fast_reboot("Poller recursion detected.");
+ prlog(PR_ERR, "OPAL: Poller recursion detected.\n");
+ backtrace();
+
+ }
+
if (poller_recursion == 16)
prlog(PR_ERR, "OPAL: Squashing future poller recursion warnings (>16).\n");
+
return;
}
was_in_poller = this_cpu()->in_poller;