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));
+       }
 
        if (hmi_evt->version < OpalHMIEvt_V2)
                return;
-- 
2.23.0

Reply via email to