diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/acpi/dispatcher/dsobject.c | 35 |
1 files changed, 31 insertions, 4 deletions
diff --git a/drivers/acpi/dispatcher/dsobject.c b/drivers/acpi/dispatcher/dsobject.c index 58d4d91c8e..7562823b3b 100644 --- a/drivers/acpi/dispatcher/dsobject.c +++ b/drivers/acpi/dispatcher/dsobject.c | |||
| @@ -373,7 +373,7 @@ acpi_ds_build_internal_package_obj(struct acpi_walk_state *walk_state, | |||
| 373 | union acpi_parse_object *parent; | 373 | union acpi_parse_object *parent; |
| 374 | union acpi_operand_object *obj_desc = NULL; | 374 | union acpi_operand_object *obj_desc = NULL; |
| 375 | acpi_status status = AE_OK; | 375 | acpi_status status = AE_OK; |
| 376 | acpi_native_uint i; | 376 | unsigned i; |
| 377 | u16 index; | 377 | u16 index; |
| 378 | u16 reference_count; | 378 | u16 reference_count; |
| 379 | 379 | ||
| @@ -476,10 +476,37 @@ acpi_ds_build_internal_package_obj(struct acpi_walk_state *walk_state, | |||
| 476 | arg = arg->common.next; | 476 | arg = arg->common.next; |
| 477 | } | 477 | } |
| 478 | 478 | ||
| 479 | if (!arg) { | 479 | /* Check for match between num_elements and actual length of package_list */ |
| 480 | |||
| 481 | if (arg) { | ||
| 482 | /* | ||
| 483 | * num_elements was exhausted, but there are remaining elements in the | ||
| 484 | * package_list. | ||
| 485 | * | ||
| 486 | * Note: technically, this is an error, from ACPI spec: "It is an error | ||
| 487 | * for NumElements to be less than the number of elements in the | ||
| 488 | * PackageList". However, for now, we just print an error message and | ||
| 489 | * no exception is returned. | ||
| 490 | */ | ||
| 491 | while (arg) { | ||
| 492 | |||
| 493 | /* Find out how many elements there really are */ | ||
| 494 | |||
| 495 | i++; | ||
| 496 | arg = arg->common.next; | ||
| 497 | } | ||
| 498 | |||
| 499 | ACPI_ERROR((AE_INFO, | ||
| 500 | "Package List length (%X) larger than NumElements count (%X), truncated\n", | ||
| 501 | i, element_count)); | ||
| 502 | } else if (i < element_count) { | ||
| 503 | /* | ||
| 504 | * Arg list (elements) was exhausted, but we did not reach num_elements count. | ||
| 505 | * Note: this is not an error, the package is padded out with NULLs. | ||
| 506 | */ | ||
| 480 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, | 507 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, |
| 481 | "Package List length larger than NumElements count (%X), truncated\n", | 508 | "Package List length (%X) smaller than NumElements count (%X), padded with null elements\n", |
| 482 | element_count)); | 509 | i, element_count)); |
| 483 | } | 510 | } |
| 484 | 511 | ||
| 485 | obj_desc->package.flags |= AOPOBJ_DATA_VALID; | 512 | obj_desc->package.flags |= AOPOBJ_DATA_VALID; |
