Nicholas Piggin <npig...@gmail.com> writes:
> Harmless HMI errors can be triggered by guests in some cases, and don't
> contain much useful information anyway. Ratelimit these to avoid
> flooding the console/logs.
>
> Signed-off-by: Nicholas Piggin <npig...@gmail.com>
> ---
>  arch/powerpc/platforms/powernv/opal-hmi.c | 27 +++++++++++++----------
>  1 file changed, 15 insertions(+), 12 deletions(-)
>
> diff --git a/arch/powerpc/platforms/powernv/opal-hmi.c 
> b/arch/powerpc/platforms/powernv/opal-hmi.c
> index 3e1f064a18db..959da6df0227 100644
> --- a/arch/powerpc/platforms/powernv/opal-hmi.c
> +++ b/arch/powerpc/platforms/powernv/opal-hmi.c
> @@ -240,19 +240,22 @@ static void print_hmi_event_info(struct OpalHMIEvent 
> *hmi_evt)
>               break;
>       }
>  
> -     printk("%s%s Hypervisor Maintenance interrupt [%s]\n",
> -             level, sevstr,
> -             hmi_evt->disposition == OpalHMI_DISPOSITION_RECOVERED ?
> -             "Recovered" : "Not recovered");
> -     error_info = hmi_evt->type < ARRAY_SIZE(hmi_error_types) ?
> -                     hmi_error_types[hmi_evt->type]
> -                     : "Unknown";
> -     printk("%s Error detail: %s\n", level, error_info);
> -     printk("%s      HMER: %016llx\n", level, be64_to_cpu(hmi_evt->hmer));
> -     if ((hmi_evt->type == OpalHMI_ERROR_TFAC) ||
> -             (hmi_evt->type == OpalHMI_ERROR_TFMR_PARITY))
> -             printk("%s      TFMR: %016llx\n", level,
> +     if (hmi_evt->severity != OpalHMI_SEV_NO_ERROR || printk_ratelimit()) {
> +             printk("%s%s Hypervisor Maintenance interrupt [%s]\n",
> +                     level, sevstr,
> +                     hmi_evt->disposition == OpalHMI_DISPOSITION_RECOVERED ?
> +                     "Recovered" : "Not recovered");
> +             error_info = hmi_evt->type < ARRAY_SIZE(hmi_error_types) ?
> +                             hmi_error_types[hmi_evt->type]
> +                             : "Unknown";
> +             printk("%s Error detail: %s\n", level, error_info);
> +             printk("%s      HMER: %016llx\n", level,
> +                                     be64_to_cpu(hmi_evt->hmer));
> +             if ((hmi_evt->type == OpalHMI_ERROR_TFAC) ||
> +                     (hmi_evt->type == OpalHMI_ERROR_TFMR_PARITY))
> +                     printk("%s      TFMR: %016llx\n", level,
>                                               be64_to_cpu(hmi_evt->tfmr));
> +     }

Same comment RE printk_ratelimit(), I folded this in:

diff --git a/arch/powerpc/platforms/powernv/opal-hmi.c 
b/arch/powerpc/platforms/powernv/opal-hmi.c
index 959da6df0227..f0c1830deb51 100644
--- a/arch/powerpc/platforms/powernv/opal-hmi.c
+++ b/arch/powerpc/platforms/powernv/opal-hmi.c
@@ -213,6 +213,8 @@ static void print_hmi_event_info(struct OpalHMIEvent 
*hmi_evt)
                "A hypervisor resource error occurred",
                "CAPP recovery process is in progress",
        };
+       static DEFINE_RATELIMIT_STATE(rs, DEFAULT_RATELIMIT_INTERVAL,
+                                     DEFAULT_RATELIMIT_BURST);
 
        /* Print things out */
        if (hmi_evt->version < OpalHMIEvt_V1) {
@@ -240,7 +242,7 @@ static void print_hmi_event_info(struct OpalHMIEvent 
*hmi_evt)
                break;
        }
 
-       if (hmi_evt->severity != OpalHMI_SEV_NO_ERROR || printk_ratelimit()) {
+       if (hmi_evt->severity != OpalHMI_SEV_NO_ERROR || __ratelimit(&rs)) {
                printk("%s%s Hypervisor Maintenance interrupt [%s]\n",
                        level, sevstr,
                        hmi_evt->disposition == OpalHMI_DISPOSITION_RECOVERED ?

cheers

Reply via email to