about summary refs log tree commit diff
path: root/modules/hardware
diff options
context:
space:
mode:
authoraszlig <aszlig@redmoonstudios.org>2016-07-11 02:08:43 +0200
committeraszlig <aszlig@redmoonstudios.org>2016-07-11 02:08:43 +0200
commitbafb5933654cdb7e35f0c54418bdd0dcb999f98c (patch)
tree467d079a8fabbbfc8671fa2266e4505272f7561e /modules/hardware
parentb12ac3a9701f3a9355c34687c978ffca02831551 (diff)
hardware/t100ha: Fix bootup regression in 4.7-rc6+
I didn't use -rc6 directly but a few commits after the tag.

Within the mainline merges there was torvalds/linux@45209046c47b93fad.

I didn't investigate further why this exactly is a problem other than
freezing the machine shortly after the bootloader hands over control to
the kernel.

Reverting this commit fixes this issue for now until I have time to look
into it.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
Diffstat (limited to 'modules/hardware')
-rw-r--r--modules/hardware/t100ha/default.nix3
-rw-r--r--modules/hardware/t100ha/revert-fix-acpica-namespace-interpreter-lock.patch81
2 files changed, 84 insertions, 0 deletions
diff --git a/modules/hardware/t100ha/default.nix b/modules/hardware/t100ha/default.nix
index 4f85a61f..ac4ac6e4 100644
--- a/modules/hardware/t100ha/default.nix
+++ b/modules/hardware/t100ha/default.nix
@@ -32,6 +32,9 @@ in {
           { name = "meta-keys";
             patch = ./meta-keys.patch;
           }
+          { name = "revert-fix-acpica-namespace-interpreter-lock";
+            patch = ./revert-fix-acpica-namespace-interpreter-lock.patch;
+          }
         ];
 
         extraConfig = ''
diff --git a/modules/hardware/t100ha/revert-fix-acpica-namespace-interpreter-lock.patch b/modules/hardware/t100ha/revert-fix-acpica-namespace-interpreter-lock.patch
new file mode 100644
index 00000000..1630d883
--- /dev/null
+++ b/modules/hardware/t100ha/revert-fix-acpica-namespace-interpreter-lock.patch
@@ -0,0 +1,81 @@
+diff --git b/drivers/acpi/acpica/nsload.c a/drivers/acpi/acpica/nsload.c
+index 297f6aa..b5e2b0a 100644
+--- b/drivers/acpi/acpica/nsload.c
++++ a/drivers/acpi/acpica/nsload.c
+@@ -46,7 +46,6 @@
+ #include "acnamesp.h"
+ #include "acdispat.h"
+ #include "actables.h"
+-#include "acinterp.h"
+ 
+ #define _COMPONENT          ACPI_NAMESPACE
+ ACPI_MODULE_NAME("nsload")
+@@ -79,8 +78,6 @@ acpi_ns_load_table(u32 table_index, struct acpi_namespace_node *node)
+ 
+ 	ACPI_FUNCTION_TRACE(ns_load_table);
+ 
+-	acpi_ex_enter_interpreter();
+-
+ 	/*
+ 	 * Parse the table and load the namespace with all named
+ 	 * objects found within. Control methods are NOT parsed
+@@ -92,7 +89,7 @@ acpi_ns_load_table(u32 table_index, struct acpi_namespace_node *node)
+ 	 */
+ 	status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+ 	if (ACPI_FAILURE(status)) {
+-		goto unlock_interp;
++		return_ACPI_STATUS(status);
+ 	}
+ 
+ 	/* If table already loaded into namespace, just return */
+@@ -133,8 +130,6 @@ acpi_ns_load_table(u32 table_index, struct acpi_namespace_node *node)
+ 
+ unlock:
+ 	(void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
+-unlock_interp:
+-	(void)acpi_ex_exit_interpreter();
+ 
+ 	if (ACPI_FAILURE(status)) {
+ 		return_ACPI_STATUS(status);
+diff --git b/drivers/acpi/acpica/nsparse.c a/drivers/acpi/acpica/nsparse.c
+index f631a47..1783cd7 100644
+--- b/drivers/acpi/acpica/nsparse.c
++++ a/drivers/acpi/acpica/nsparse.c
+@@ -47,6 +47,7 @@
+ #include "acparser.h"
+ #include "acdispat.h"
+ #include "actables.h"
++#include "acinterp.h"
+ 
+ #define _COMPONENT          ACPI_NAMESPACE
+ ACPI_MODULE_NAME("nsparse")
+@@ -170,6 +171,8 @@ acpi_ns_parse_table(u32 table_index, struct acpi_namespace_node *start_node)
+ 
+ 	ACPI_FUNCTION_TRACE(ns_parse_table);
+ 
++	acpi_ex_enter_interpreter();
++
+ 	/*
+ 	 * AML Parse, pass 1
+ 	 *
+@@ -185,7 +188,7 @@ acpi_ns_parse_table(u32 table_index, struct acpi_namespace_node *start_node)
+ 	status = acpi_ns_one_complete_parse(ACPI_IMODE_LOAD_PASS1,
+ 					    table_index, start_node);
+ 	if (ACPI_FAILURE(status)) {
+-		return_ACPI_STATUS(status);
++		goto error_exit;
+ 	}
+ 
+ 	/*
+@@ -201,8 +204,10 @@ acpi_ns_parse_table(u32 table_index, struct acpi_namespace_node *start_node)
+ 	status = acpi_ns_one_complete_parse(ACPI_IMODE_LOAD_PASS2,
+ 					    table_index, start_node);
+ 	if (ACPI_FAILURE(status)) {
+-		return_ACPI_STATUS(status);
++		goto error_exit;
+ 	}
+ 
++error_exit:
++	acpi_ex_exit_interpreter();
+ 	return_ACPI_STATUS(status);
+ }