ACPICA: Debugger: Update mutexes used for multithreaded debugger
authorBob Moore <robert.moore@intel.com>
Mon, 19 Oct 2015 02:24:45 +0000 (10:24 +0800)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 22 Oct 2015 00:01:12 +0000 (02:01 +0200)
ACPICA commit 6b2701f619040e803313363f516b200e362a9100

Make these mutex objects independent of the deadlock detection mechanism.
This mechanism caused failures with the multithread debugger.

This patch doesn't affect Linux kernel as debugger is currently not fully
functioning in the Linux kernel. And the further debugger cleanups will
take care of handling debugger command signalling correctly instead of
using such kind of mutexes. So it is safe to leave this patch as it is.

Link: https://github.com/acpica/acpica/commit/6b2701f6
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/acpica/acglobal.h
drivers/acpi/acpica/aclocal.h
drivers/acpi/acpica/utdecode.c
drivers/acpi/acpica/utmutex.c
include/acpi/platform/acenv.h

index 4dde37c3d8fcba549ad1eb978bf23466321e9152..71a3c40dbf20700dc26b75d41833a7febf5b2d6b 100644 (file)
@@ -358,6 +358,9 @@ ACPI_GLOBAL(u16, acpi_gbl_node_type_count_misc);
 ACPI_GLOBAL(u32, acpi_gbl_num_nodes);
 ACPI_GLOBAL(u32, acpi_gbl_num_objects);
 
+ACPI_GLOBAL(acpi_mutex, acpi_gbl_db_command_ready);
+ACPI_GLOBAL(acpi_mutex, acpi_gbl_db_command_complete);
+
 #endif                         /* ACPI_DEBUGGER */
 
 /*****************************************************************************
index 8a66fefecb87a1ad434314664cbff29c74f4ab7a..918f70d15fda073924beb72791675ba44b8a8b63 100644 (file)
@@ -83,10 +83,8 @@ union acpi_parse_object;
 #define ACPI_MTX_EVENTS                 3      /* Data for ACPI events */
 #define ACPI_MTX_CACHES                 4      /* Internal caches, general purposes */
 #define ACPI_MTX_MEMORY                 5      /* Debug memory tracking lists */
-#define ACPI_MTX_DEBUG_CMD_COMPLETE     6      /* AML debugger */
-#define ACPI_MTX_DEBUG_CMD_READY        7      /* AML debugger */
 
-#define ACPI_MAX_MUTEX                  7
+#define ACPI_MAX_MUTEX                  5
 #define ACPI_NUM_MUTEX                  ACPI_MAX_MUTEX+1
 
 /* Lock structure for reader/writer interfaces */
index 988e23b7795caaaa40f6a4320310f1d8c1026085..d452a7837c8cf23118fc2a3eb0b684e708fd9a71 100644 (file)
@@ -407,8 +407,6 @@ static char *acpi_gbl_mutex_names[ACPI_NUM_MUTEX] = {
        "ACPI_MTX_Events",
        "ACPI_MTX_Caches",
        "ACPI_MTX_Memory",
-       "ACPI_MTX_CommandComplete",
-       "ACPI_MTX_CommandReady"
 };
 
 char *acpi_ut_get_mutex_name(u32 mutex_id)
index 37b8b58fcd565e563879f331be4cf983ae4c9f5f..ce406e39b669cd336b95b7b39c73dfa1c317b361 100644 (file)
@@ -108,6 +108,21 @@ acpi_status acpi_ut_mutex_initialize(void)
        /* Create the reader/writer lock for namespace access */
 
        status = acpi_ut_create_rw_lock(&acpi_gbl_namespace_rw_lock);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
+       }
+#ifdef ACPI_DEBUGGER
+
+       /* Debugger Support */
+
+       status = acpi_os_create_mutex(&acpi_gbl_db_command_ready);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
+       }
+
+       status = acpi_os_create_mutex(&acpi_gbl_db_command_complete);
+#endif
+
        return_ACPI_STATUS(status);
 }
 
@@ -147,6 +162,12 @@ void acpi_ut_mutex_terminate(void)
        /* Delete the reader/writer lock */
 
        acpi_ut_delete_rw_lock(&acpi_gbl_namespace_rw_lock);
+
+#ifdef ACPI_DEBUGGER
+       acpi_os_delete_mutex(acpi_gbl_db_command_ready);
+       acpi_os_delete_mutex(acpi_gbl_db_command_complete);
+#endif
+
        return_VOID;
 }
 
index 15ef08c048700ff0fc88414f96ca360e6c0bb4d4..056f245ad0380171b0de8adad7b89324ecbb29b0 100644 (file)
  * multi-threaded if ACPI_APPLICATION is not set.
  */
 #ifndef DEBUGGER_THREADING
-#ifdef ACPI_APPLICATION
-#define DEBUGGER_THREADING          DEBUGGER_SINGLE_THREADED
+#if !defined (ACPI_APPLICATION) || defined (ACPI_EXEC_APP)
+#define DEBUGGER_THREADING          DEBUGGER_MULTI_THREADED
 
 #else
-#define DEBUGGER_THREADING          DEBUGGER_MULTI_THREADED
+#define DEBUGGER_THREADING          DEBUGGER_SINGLE_THREADED
 #endif
 #endif                         /* !DEBUGGER_THREADING */