|
@@ -45,6 +45,7 @@
|
|
#include <acpi/acnamesp.h>
|
|
#include <acpi/acnamesp.h>
|
|
#include <acpi/acdispat.h>
|
|
#include <acpi/acdispat.h>
|
|
#include <acpi/acinterp.h>
|
|
#include <acpi/acinterp.h>
|
|
|
|
+#include <linux/nmi.h>
|
|
|
|
|
|
#define _COMPONENT ACPI_NAMESPACE
|
|
#define _COMPONENT ACPI_NAMESPACE
|
|
ACPI_MODULE_NAME("nsinit")
|
|
ACPI_MODULE_NAME("nsinit")
|
|
@@ -534,7 +535,15 @@ acpi_ns_init_one_device(acpi_handle obj_handle,
|
|
info->parameter_type = ACPI_PARAM_ARGS;
|
|
info->parameter_type = ACPI_PARAM_ARGS;
|
|
info->flags = ACPI_IGNORE_RETURN_VALUE;
|
|
info->flags = ACPI_IGNORE_RETURN_VALUE;
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Some hardware relies on this being executed as atomically
|
|
|
|
+ * as possible (without an NMI being received in the middle of
|
|
|
|
+ * this) - so disable NMIs and initialize the device:
|
|
|
|
+ */
|
|
|
|
+ acpi_nmi_disable();
|
|
status = acpi_ns_evaluate(info);
|
|
status = acpi_ns_evaluate(info);
|
|
|
|
+ acpi_nmi_enable();
|
|
|
|
+
|
|
if (ACPI_SUCCESS(status)) {
|
|
if (ACPI_SUCCESS(status)) {
|
|
walk_info->num_INI++;
|
|
walk_info->num_INI++;
|
|
|
|
|