GHES: Panic right after detection
authorBorislav Petkov <bp@suse.de>
Wed, 18 Mar 2015 08:55:21 +0000 (09:55 +0100)
committerBorislav Petkov <bp@suse.de>
Mon, 27 Apr 2015 19:23:44 +0000 (21:23 +0200)
The moment we log an error of panic severity, there's no need to noodle
through the ghes_nmi list anymore. So panic instead right then and
there.

Signed-off-by: Borislav Petkov <bp@suse.de>
drivers/acpi/apei/ghes.c

index 712ed95..0de3adc 100644 (file)
@@ -837,9 +837,8 @@ static void __ghes_panic(struct ghes *ghes)
 
 static int ghes_notify_nmi(unsigned int cmd, struct pt_regs *regs)
 {
-       struct ghes *ghes, *ghes_global = NULL;
-       int sev, sev_global = -1;
-       int ret = NMI_DONE;
+       struct ghes *ghes;
+       int sev, ret = NMI_DONE;
 
        raw_spin_lock(&ghes_nmi_lock);
        list_for_each_entry_rcu(ghes, &ghes_nmi, list) {
@@ -847,20 +846,17 @@ static int ghes_notify_nmi(unsigned int cmd, struct pt_regs *regs)
                        ghes_clear_estatus(ghes);
                        continue;
                }
+
                sev = ghes_severity(ghes->estatus->error_severity);
-               if (sev > sev_global) {
-                       sev_global = sev;
-                       ghes_global = ghes;
-               }
+               if (sev >= GHES_SEV_PANIC)
+                       __ghes_panic(ghes);
+
                ret = NMI_HANDLED;
        }
 
        if (ret == NMI_DONE)
                goto out;
 
-       if (sev_global >= GHES_SEV_PANIC)
-               __ghes_panic(ghes_global);
-
        list_for_each_entry_rcu(ghes, &ghes_nmi, list) {
                if (!(ghes->flags & GHES_TO_CLEAR))
                        continue;