diff options
author | Stewart Smith <stewart@linux.vnet.ibm.com> | 2016-11-16 16:04:59 +1100 |
---|---|---|
committer | Stewart Smith <stewart@linux.vnet.ibm.com> | 2016-11-24 17:22:00 +1100 |
commit | b6a729e118f42dae88ebf70a09a7e2aa4f788fdc (patch) | |
tree | 3ddceeedbd0046a6a80945335f11b5f1ad5f55f6 /core/opal.c | |
parent | 6c077e9ed08c7af7db56ef6f334d204f78e6de8d (diff) | |
download | talos-skiboot-b6a729e118f42dae88ebf70a09a7e2aa4f788fdc.tar.gz talos-skiboot-b6a729e118f42dae88ebf70a09a7e2aa4f788fdc.zip |
Limit number of "Poller recursion detected" errors to display
In some error conditions, we could spiral out of control on this
and spend all of our time printing the exact same backtrace.
Limit it to 16 times, because 16 is a nice number.
Cc: stable
Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Reviewed-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com>
Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Diffstat (limited to 'core/opal.c')
-rw-r--r-- | core/opal.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/core/opal.c b/core/opal.c index 61a2adb1..269ab80d 100644 --- a/core/opal.c +++ b/core/opal.c @@ -313,9 +313,10 @@ void opal_run_pollers(void) { struct opal_poll_entry *poll_ent; static int pollers_with_lock_warnings = 0; + static int poller_recursion = 0; /* Don't re-enter on this CPU */ - if (this_cpu()->in_poller) { + if (this_cpu()->in_poller && poller_recursion < 16) { /** * @fwts-label OPALPollerRecursion * @fwts-advice Recursion detected in opal_run_pollers(). This @@ -324,6 +325,9 @@ void opal_run_pollers(void) */ prlog(PR_ERR, "OPAL: Poller recursion detected.\n"); backtrace(); + poller_recursion++; + if (poller_recursion == 16) + prlog(PR_ERR, "OPAL: Squashing future poller recursion warnings (>16).\n"); return; } this_cpu()->in_poller = true; |