static acpi_status
 acpi_db_test_string_type(struct acpi_namespace_node *node, u32 byte_length);
 
+static acpi_status acpi_db_test_package_type(struct acpi_namespace_node *node);
+
 static acpi_status
 acpi_db_read_from_object(struct acpi_namespace_node *node,
                         acpi_object_type expected_type,
                bit_length = byte_length * 8;
                break;
 
+       case ACPI_TYPE_PACKAGE:
+
+               local_type = ACPI_TYPE_PACKAGE;
+               break;
+
        case ACPI_TYPE_FIELD_UNIT:
        case ACPI_TYPE_BUFFER_FIELD:
        case ACPI_TYPE_LOCAL_REGION_FIELD:
 
        acpi_os_printf("%14s: %4.4s",
                       acpi_ut_get_type_name(node->type), node->name.ascii);
+
        if (!obj_desc) {
                acpi_os_printf(" Ignoring, no attached object\n");
                return (AE_OK);
                status = acpi_db_test_buffer_type(node, bit_length);
                break;
 
+       case ACPI_TYPE_PACKAGE:
+
+               status = acpi_db_test_package_type(node);
+               break;
+
        default:
 
                acpi_os_printf(" Ignoring, type not implemented (%2.2X)",
                break;
        }
 
+       /* Exit on error, but don't abort the namespace walk */
+
+       if (ACPI_FAILURE(status)) {
+               status = AE_OK;
+               goto exit;
+       }
+
        switch (node->type) {
        case ACPI_TYPE_LOCAL_REGION_FIELD:
 
                acpi_os_printf(" (%s)",
                               acpi_ut_get_region_name(region_obj->region.
                                                       space_id));
+
                break;
 
        default:
                break;
        }
 
+exit:
        acpi_os_printf("\n");
        return (status);
 }
        if (temp1->integer.value == value_to_write) {
                value_to_write = 0;
        }
-
        /* Write a new value */
 
        write_value.type = ACPI_TYPE_INTEGER;
        return (status);
 }
 
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_db_test_package_type
+ *
+ * PARAMETERS:  node                - Parent NS node for the object
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Test read for a Package object.
+ *
+ ******************************************************************************/
+
+static acpi_status acpi_db_test_package_type(struct acpi_namespace_node *node)
+{
+       union acpi_object *temp1 = NULL;
+       acpi_status status;
+
+       /* Read the original value */
+
+       status = acpi_db_read_from_object(node, ACPI_TYPE_PACKAGE, &temp1);
+       if (ACPI_FAILURE(status)) {
+               return (status);
+       }
+
+       acpi_os_printf(" %8.8X Elements", temp1->package.count);
+       acpi_os_free(temp1);
+       return (status);
+}
+
 /*******************************************************************************
  *
  * FUNCTION:    acpi_db_read_from_object
        acpi_gbl_method_executing = TRUE;
        status = acpi_evaluate_object(read_handle, NULL,
                                      ¶m_objects, &return_obj);
-       acpi_gbl_method_executing = FALSE;
 
+       acpi_gbl_method_executing = FALSE;
        if (ACPI_FAILURE(status)) {
                acpi_os_printf("Could not read from object, %s",
                               acpi_format_exception(status));
        case ACPI_TYPE_INTEGER:
        case ACPI_TYPE_BUFFER:
        case ACPI_TYPE_STRING:
+       case ACPI_TYPE_PACKAGE:
                /*
                 * Did we receive the type we wanted? Most important for the
                 * Integer/Buffer case (when a field is larger than an Integer,
                             acpi_ut_get_type_name(expected_type),
                             acpi_ut_get_type_name(ret_value->type));
 
+                       acpi_os_free(return_obj.pointer);
                        return (AE_TYPE);
                }