diff options
-rw-r--r-- | core/opal.c | 15 |
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; |