Ver Fonte

ACPI, APEI, GHES, Support disable GHES at boot time

Some machine may have broken firmware so that GHES and firmware first
mode should be disabled.  This patch adds support to that.

Signed-off-by: Huang Ying <ying.huang@intel.com>
Reviewed-by: Andi Kleen <ak@linux.intel.com>
Reviewed-by: Matthew Garrett <mjg@redhat.com>
Signed-off-by: Len Brown <len.brown@intel.com>
Huang Ying há 14 anos atrás
pai
commit
b6a9501658
3 ficheiros alterados com 18 adições e 8 exclusões
  1. 8 0
      drivers/acpi/apei/ghes.c
  2. 9 8
      drivers/acpi/apei/hest.c
  3. 1 0
      include/acpi/apei.h

+ 8 - 0
drivers/acpi/apei/ghes.c

@@ -77,6 +77,9 @@ struct ghes {
 	};
 	};
 };
 };
 
 
+int ghes_disable;
+module_param_named(disable, ghes_disable, bool, 0);
+
 static int ghes_panic_timeout	__read_mostly = 30;
 static int ghes_panic_timeout	__read_mostly = 30;
 
 
 /*
 /*
@@ -665,6 +668,11 @@ static int __init ghes_init(void)
 		return -EINVAL;
 		return -EINVAL;
 	}
 	}
 
 
+	if (ghes_disable) {
+		pr_info(GHES_PFX "GHES is not enabled!\n");
+		return -EINVAL;
+	}
+
 	rc = ghes_ioremap_init();
 	rc = ghes_ioremap_init();
 	if (rc)
 	if (rc)
 		goto err;
 		goto err;

+ 9 - 8
drivers/acpi/apei/hest.c

@@ -231,16 +231,17 @@ void __init acpi_hest_init(void)
 		goto err;
 		goto err;
 	}
 	}
 
 
-	rc = apei_hest_parse(hest_parse_ghes_count, &ghes_count);
-	if (rc)
-		goto err;
-
-	rc = hest_ghes_dev_register(ghes_count);
-	if (!rc) {
-		pr_info(HEST_PFX "Table parsing has been initialized.\n");
-		return;
+	if (!ghes_disable) {
+		rc = apei_hest_parse(hest_parse_ghes_count, &ghes_count);
+		if (rc)
+			goto err;
+		rc = hest_ghes_dev_register(ghes_count);
+		if (rc)
+			goto err;
 	}
 	}
 
 
+	pr_info(HEST_PFX "Table parsing has been initialized.\n");
+	return;
 err:
 err:
 	hest_disable = 1;
 	hest_disable = 1;
 }
 }

+ 1 - 0
include/acpi/apei.h

@@ -18,6 +18,7 @@
 
 
 extern int hest_disable;
 extern int hest_disable;
 extern int erst_disable;
 extern int erst_disable;
+extern int ghes_disable;
 
 
 #ifdef CONFIG_ACPI_APEI
 #ifdef CONFIG_ACPI_APEI
 void __init acpi_hest_init(void);
 void __init acpi_hest_init(void);