aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/tables
diff options
context:
space:
mode:
authorBob Moore <robert.moore@intel.com>2006-05-12 17:12:00 -0400
committerLen Brown <len.brown@intel.com>2006-06-14 02:34:48 -0400
commit958dd242b691f64ab4632b4903dbb1e16fee8269 (patch)
treeddf4932fb4e3023dd0d1914571f17f2e3b03978d /drivers/acpi/tables
parentb229cf92eee616c7cb5ad8cdb35a19b119f00bc8 (diff)
ACPI: ACPICA 20060512
Replaced the acpi_os_queue_for_execution() with a new interface named acpi_os_execute(). The major difference is that the new interface does not have a Priority parameter, this appeared to be useless and has been replaced by a Type parameter. The Type tells the OS what type of execution is being requested, such as global lock handler, notify handler, GPE handler, etc. This allows the host to queue and execute the request as appropriate for the request type, possibly using different work queues and different priorities for the various request types. This enables fixes for multithreading deadlock problems such as http://bugzilla.kernel.org/show_bug.cgi?id=5534 (Alexey Starikovskiy and Bob Moore) Fixed a possible memory leak associated with the support for the so-called "implicit return" ACPI extension. Reported by FreeBSD (Fiodor Suietov) http://bugzilla.kernel.org/show_bug.cgi?id=6514 Fixed a problem with the Load() operator where a table load from an operation region could overwrite an internal table buffer by up to 7 bytes and cause alignment faults on IPF systems. (With assistance from Luming Yu) Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/tables')
-rw-r--r--drivers/acpi/tables/tbrsdt.c6
-rw-r--r--drivers/acpi/tables/tbxfroot.c16
2 files changed, 10 insertions, 12 deletions
diff --git a/drivers/acpi/tables/tbrsdt.c b/drivers/acpi/tables/tbrsdt.c
index 9e226438a3f6..494965229fa2 100644
--- a/drivers/acpi/tables/tbrsdt.c
+++ b/drivers/acpi/tables/tbrsdt.c
@@ -196,10 +196,8 @@ acpi_status acpi_tb_validate_rsdt(struct acpi_table_header *table_ptr)
196 ACPI_DUMP_BUFFER(acpi_gbl_RSDP, 20); 196 ACPI_DUMP_BUFFER(acpi_gbl_RSDP, 20);
197 197
198 ACPI_ERROR((AE_INFO, 198 ACPI_ERROR((AE_INFO,
199 "RSDT/XSDT signature at %X (%p) is invalid", 199 "RSDT/XSDT signature at %X is invalid",
200 acpi_gbl_RSDP->rsdt_physical_address, 200 acpi_gbl_RSDP->rsdt_physical_address));
201 (void *)(acpi_native_uint) acpi_gbl_RSDP->
202 rsdt_physical_address));
203 201
204 if (acpi_gbl_root_table_type == ACPI_TABLE_TYPE_RSDT) { 202 if (acpi_gbl_root_table_type == ACPI_TABLE_TYPE_RSDT) {
205 ACPI_ERROR((AE_INFO, "Looking for RSDT")); 203 ACPI_ERROR((AE_INFO, "Looking for RSDT"));
diff --git a/drivers/acpi/tables/tbxfroot.c b/drivers/acpi/tables/tbxfroot.c
index 3107e741d510..da2648bbdbc0 100644
--- a/drivers/acpi/tables/tbxfroot.c
+++ b/drivers/acpi/tables/tbxfroot.c
@@ -472,10 +472,10 @@ static u8 *acpi_tb_scan_memory_for_rsdp(u8 * start_address, u32 length)
472 * 472 *
473 * RETURN: Status, RSDP physical address 473 * RETURN: Status, RSDP physical address
474 * 474 *
475 * DESCRIPTION: search lower 1_mbyte of memory for the root system descriptor 475 * DESCRIPTION: Search lower 1_mbyte of memory for the root system descriptor
476 * pointer structure. If it is found, set *RSDP to point to it. 476 * pointer structure. If it is found, set *RSDP to point to it.
477 * 477 *
478 * NOTE1: The RSDp must be either in the first 1_k of the Extended 478 * NOTE1: The RSDP must be either in the first 1_k of the Extended
479 * BIOS Data Area or between E0000 and FFFFF (From ACPI Spec.) 479 * BIOS Data Area or between E0000 and FFFFF (From ACPI Spec.)
480 * Only a 32-bit physical address is necessary. 480 * Only a 32-bit physical address is necessary.
481 * 481 *
@@ -525,7 +525,7 @@ acpi_tb_find_rsdp(struct acpi_table_desc *table_info, u32 flags)
525 525
526 if (physical_address > 0x400) { 526 if (physical_address > 0x400) {
527 /* 527 /*
528 * 1b) Search EBDA paragraphs (EBDa is required to be a 528 * 1b) Search EBDA paragraphs (EBDA is required to be a
529 * minimum of 1_k length) 529 * minimum of 1_k length)
530 */ 530 */
531 status = acpi_os_map_memory((acpi_physical_address) 531 status = acpi_os_map_memory((acpi_physical_address)
@@ -550,7 +550,7 @@ acpi_tb_find_rsdp(struct acpi_table_desc *table_info, u32 flags)
550 /* Return the physical address */ 550 /* Return the physical address */
551 551
552 physical_address += 552 physical_address +=
553 ACPI_PTR_DIFF(mem_rover, table_ptr); 553 (u32) ACPI_PTR_DIFF(mem_rover, table_ptr);
554 554
555 table_info->physical_address = 555 table_info->physical_address =
556 (acpi_physical_address) physical_address; 556 (acpi_physical_address) physical_address;
@@ -584,9 +584,9 @@ acpi_tb_find_rsdp(struct acpi_table_desc *table_info, u32 flags)
584 584
585 /* Return the physical address */ 585 /* Return the physical address */
586 586
587 physical_address = 587 physical_address = (u32)
588 ACPI_HI_RSDP_WINDOW_BASE + ACPI_PTR_DIFF(mem_rover, 588 (ACPI_HI_RSDP_WINDOW_BASE +
589 table_ptr); 589 ACPI_PTR_DIFF(mem_rover, table_ptr));
590 590
591 table_info->physical_address = 591 table_info->physical_address =
592 (acpi_physical_address) physical_address; 592 (acpi_physical_address) physical_address;
@@ -607,7 +607,7 @@ acpi_tb_find_rsdp(struct acpi_table_desc *table_info, u32 flags)
607 607
608 if (physical_address > 0x400) { 608 if (physical_address > 0x400) {
609 /* 609 /*
610 * 1b) Search EBDA paragraphs (EBDa is required to be a minimum of 610 * 1b) Search EBDA paragraphs (EBDA is required to be a minimum of
611 * 1_k length) 611 * 1_k length)
612 */ 612 */
613 mem_rover = 613 mem_rover =