summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/acpi/tables/tbutils.c24
-rw-r--r--drivers/acpi/utilities/utdebug.c4
-rw-r--r--drivers/acpi/utilities/utmisc.c6
-rw-r--r--include/acpi/acconfig.h2
-rw-r--r--include/acpi/acnames.h13
5 files changed, 30 insertions, 19 deletions
diff --git a/drivers/acpi/tables/tbutils.c b/drivers/acpi/tables/tbutils.c
index 5bcafebb9dd..4b2fbb592f4 100644
--- a/drivers/acpi/tables/tbutils.c
+++ b/drivers/acpi/tables/tbutils.c
@@ -80,14 +80,24 @@ acpi_status acpi_tb_is_table_installed(struct acpi_table_desc *new_table_desc)
/* Examine all installed tables of this type */
while (table_desc) {
- /* Compare Revision and oem_table_id */
-
+ /*
+ * If the table lengths match, perform a full bytewise compare. This
+ * means that we will allow tables with duplicate oem_table_id(s), as
+ * long as the tables are different in some way.
+ *
+ * Checking if the table has been loaded into the namespace means that
+ * we don't check for duplicate tables during the initial installation
+ * of tables within the RSDT/XSDT.
+ */
if ((table_desc->loaded_into_namespace) &&
- (table_desc->pointer->revision ==
- new_table_desc->pointer->revision) &&
- (!ACPI_MEMCMP(table_desc->pointer->oem_table_id,
- new_table_desc->pointer->oem_table_id, 8))) {
- /* This table is already installed */
+ (table_desc->pointer->length ==
+ new_table_desc->pointer->length)
+ &&
+ (!ACPI_MEMCMP
+ ((const char *)table_desc->pointer,
+ (const char *)new_table_desc->pointer,
+ (acpi_size) new_table_desc->pointer->length))) {
+ /* Match: this table is already installed */
ACPI_DEBUG_PRINT((ACPI_DB_TABLES,
"Table [%4.4s] already installed: Rev %X oem_table_id [%8.8s]\n",
diff --git a/drivers/acpi/utilities/utdebug.c b/drivers/acpi/utilities/utdebug.c
index 081a778aba8..d80e9263993 100644
--- a/drivers/acpi/utilities/utdebug.c
+++ b/drivers/acpi/utilities/utdebug.c
@@ -122,13 +122,13 @@ static const char *acpi_ut_trim_function_name(const char *function_name)
/* All Function names are longer than 4 chars, check is safe */
- if (*(ACPI_CAST_PTR(u32, function_name)) == ACPI_FUNCTION_PREFIX1) {
+ if (*(ACPI_CAST_PTR(u32, function_name)) == ACPI_PREFIX_MIXED) {
/* This is the case where the original source has not been modified */
return (function_name + 4);
}
- if (*(ACPI_CAST_PTR(u32, function_name)) == ACPI_FUNCTION_PREFIX2) {
+ if (*(ACPI_CAST_PTR(u32, function_name)) == ACPI_PREFIX_LOWER) {
/* This is the case where the source has been 'linuxized' */
return (function_name + 5);
diff --git a/drivers/acpi/utilities/utmisc.c b/drivers/acpi/utilities/utmisc.c
index 474fe7cb6c0..f0275025b71 100644
--- a/drivers/acpi/utilities/utmisc.c
+++ b/drivers/acpi/utilities/utmisc.c
@@ -78,6 +78,10 @@ acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id)
for (i = 0; i < 32; i++) {
if (!(acpi_gbl_owner_id_mask & (1 << i))) {
+ ACPI_DEBUG_PRINT((ACPI_DB_VALUES,
+ "Current owner_id mask: %8.8X New ID: %2.2X\n",
+ acpi_gbl_owner_id_mask, (i + 1)));
+
acpi_gbl_owner_id_mask |= (1 << i);
*owner_id = (acpi_owner_id) (i + 1);
goto exit;
@@ -119,7 +123,7 @@ void acpi_ut_release_owner_id(acpi_owner_id * owner_id_ptr)
acpi_owner_id owner_id = *owner_id_ptr;
acpi_status status;
- ACPI_FUNCTION_TRACE("ut_release_owner_id");
+ ACPI_FUNCTION_TRACE_U32("ut_release_owner_id", owner_id);
/* Always clear the input owner_id (zero is an invalid ID) */
diff --git a/include/acpi/acconfig.h b/include/acpi/acconfig.h
index f3810cc5d48..73c43a39663 100644
--- a/include/acpi/acconfig.h
+++ b/include/acpi/acconfig.h
@@ -63,7 +63,7 @@
/* Version string */
-#define ACPI_CA_VERSION 0x20050729
+#define ACPI_CA_VERSION 0x20050815
/*
* OS name, used for the _OS object. The _OS object is essentially obsolete,
diff --git a/include/acpi/acnames.h b/include/acpi/acnames.h
index 79152fbc8f8..4f9063f3e95 100644
--- a/include/acpi/acnames.h
+++ b/include/acpi/acnames.h
@@ -71,16 +71,13 @@
/* Definitions of the predefined namespace names */
-#define ACPI_UNKNOWN_NAME (u32) 0x3F3F3F3F /* Unknown name is "????" */
-#define ACPI_ROOT_NAME (u32) 0x5F5F5F5C /* Root name is "\___" */
-#define ACPI_SYS_BUS_NAME (u32) 0x5F53425F /* Sys bus name is "_SB_" */
+#define ACPI_UNKNOWN_NAME (u32) 0x3F3F3F3F /* Unknown name is "????" */
+#define ACPI_ROOT_NAME (u32) 0x5F5F5F5C /* Root name is "\___" */
+
+#define ACPI_PREFIX_MIXED (u32) 0x69706341 /* "Acpi" */
+#define ACPI_PREFIX_LOWER (u32) 0x69706361 /* "acpi" */
#define ACPI_NS_ROOT_PATH "\\"
#define ACPI_NS_SYSTEM_BUS "_SB_"
-/*! [Begin] no source code translation (not handled by acpisrc) */
-#define ACPI_FUNCTION_PREFIX1 'ipcA'
-#define ACPI_FUNCTION_PREFIX2 'ipca'
-/*! [End] no source code translation !*/
-
#endif /* __ACNAMES_H__ */