On Sat, 2010-03-20 at 18:28 +0100, angelo wrote:
> I confirm this bug in HP Pavillion dv6-2044el, debian squeeze updated at
> 20.03.2010 (apt-get update + upgrade).
>
> BIOS updated today to the last available F.13
> Kernel version 2.6.30
>
> happy to contribute with help as needed, i can recompile the kernel easily.
There were some bug fixes/workarounds in ACPI support in Linux 2.6.33
which might be relevant. Please test this patch against package version
2.6.32-10, following the instructions at
<http://kernel-handbook.alioth.debian.org/ch-common-tasks.html#s-common-official>.
+ /*
+ * Get the parent node. We cheat by using the next_object field
+ * of the method object descriptor.
+ */
+ parent_node = ACPI_CAST_PTR(struct acpi_namespace_node,
+ method_obj->method.next_object);
+ type = acpi_ns_get_type(parent_node);
+
+ /*
+ * Get the region handler and save it in the method object. We may need
+ * this if an operation region declaration causes a _REG method to be run.
+ *
+ * We can't do this in acpi_ps_link_module_code because
+ * acpi_gbl_root_node->Object is NULL at PASS1.
+ */
+ if ((type == ACPI_TYPE_DEVICE) && parent_node->object) {
+ method_obj->method.extra.handler =
+ parent_node->object->device.handler;
+ }
+
+ /* Must clear next_object (acpi_ns_attach_object needs the field) */
+
+ method_obj->method.next_object = NULL;
+
/* Initialize the evaluation information block */
/*
- * Get the currently attached root object. Add a reference, because the
+ * Get the currently attached parent object. Add a reference, because the
* ref count will be decreased when the method object is installed to
- * the root node.
+ * the parent node.
*/
- root_obj = acpi_ns_get_attached_object(acpi_gbl_root_node);
- acpi_ut_add_reference(root_obj);
+ parent_obj = acpi_ns_get_attached_object(parent_node);
+ if (parent_obj) {
+ acpi_ut_add_reference(parent_obj);
+ }
- /* Install the method (module-level code) in the root node */
+ /* Install the method (module-level code) in the parent node */
- status = acpi_ns_attach_object(acpi_gbl_root_node, method_obj,
+ status = acpi_ns_attach_object(parent_node, method_obj,
ACPI_TYPE_METHOD);
if (ACPI_FAILURE(status)) {
goto exit;
}
- /* Execute the root node as a control method */
+ /* Execute the parent node as a control method */
status = acpi_ns_evaluate(info);
ACPI_DEBUG_PRINT((ACPI_DB_INIT, "Executed module-level code at %p
",
method_obj->method.aml_start));
+ /* Delete a possible implicit return value (in slack mode) */
+
+ if (info->return_object) {
+ acpi_ut_remove_reference(info->return_object);
+ }
+
/* Detach the temporary method object */
+ /*
+ * Save the parent node in next_object. This is cheating, but we
+ * don't want to expand the method object.
+ */
+ method_obj->method.next_object =
+ ACPI_CAST_PTR(union acpi_operand_object, parent_node);
+
if (!prev) {
acpi_gbl_module_code_list = method_obj;
} else {
--- a/drivers/acpi/acpica/acobject.h
+++ b/drivers/acpi/acpica/acobject.h
@@ -180,7 +180,11 @@ struct acpi_object_method {
u8 sync_level;
union acpi_operand_object *mutex;
u8 *aml_start;
- ACPI_INTERNAL_METHOD implementation;
+ union {
+ ACPI_INTERNAL_METHOD implementation;
+ union acpi_operand_object *handler;
+ } extra;
+
u32 aml_length;
u8 thread_count;
acpi_owner_id owner_id;
--- a/drivers/acpi/acpica/dsmethod.c
+++ b/drivers/acpi/acpica/dsmethod.c
@@ -414,7 +414,7 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread,
/* Invoke an internal method if necessary */
if (obj_desc->method.method_flags & AML_METHOD_INTERNAL_ONLY) {
- status = obj_desc->method.implementation(next_walk_state);
+ status = obj_desc->method.extra.implementation(next_walk_state);
if (status == AE_OK) {
status = AE_CTRL_TERMINATE;
}
--- a/drivers/acpi/acpica/evrgnini.c
+++ b/drivers/acpi/acpica/evrgnini.c
@@ -575,6 +575,21 @@ acpi_ev_initialize_region(union acpi_operand_object *region_obj,
handler_obj = obj_desc->thermal_zone.handler;
break;
+ case ACPI_TYPE_METHOD:
+ /*
+ * If we are executing module level code, the original
+ * Node's object was replaced by this Method object and we
+ * saved the handler in the method object.
+ *
+ * See acpi_ns_exec_module_code
+ */
+ if (obj_desc->method.
+ flags & AOPOBJ_MODULE_LEVEL) {
+ handler_obj =
+ obj_desc->method.extra.handler;
+ }
+ break;
+
default:
/* Ignore other objects */
break;
--- a/drivers/acpi/acpica/nsaccess.c
+++ b/drivers/acpi/acpica/nsaccess.c
@@ -165,7 +165,7 @@ acpi_status acpi_ns_root_initialize(void)
if (info->obj_desc->method.method_flags & AML_METHOD_INTERNAL_ONLY) {
- status = info->obj_desc->method.implementation(walk_state);
+ status =
+ info->obj_desc->method.extra.implementation(walk_state);
info->return_object = walk_state->return_desc;
/* Cleanup states */
--- END ---
--
Ben Hutchings
Once a job is fouled up, anything done to improve it makes it worse.
03-30-2010, 09:52 AM
angelo
Bug#571251: broken bios
Dear Ben,
thanks for the information.
I installed 2-6-34, full sources.
Broken bios message is not visible anymore.
Anyway, pc still get paralized 1 every 3 boot. It stop randomly, at a
certain point of the boot.
Regards,
Angelo
Ben Hutchings wrote:
On Sat, 2010-03-20 at 18:28 +0100, angelo wrote:
I confirm this bug in HP Pavillion dv6-2044el, debian squeeze updated at
20.03.2010 (apt-get update + upgrade).
BIOS updated today to the last available F.13
Kernel version 2.6.30
happy to contribute with help as needed, i can recompile the kernel easily.
There were some bug fixes/workarounds in ACPI support in Linux 2.6.33
which might be relevant. Please test this patch against package version
2.6.32-10, following the instructions at
<http://kernel-handbook.alioth.debian.org/ch-common-tasks.html#s-common-official>.
+ * Get the parent node. We cheat by using the next_object field
+ * of the method object descriptor.
+ */
+ parent_node = ACPI_CAST_PTR(struct acpi_namespace_node,
+ method_obj->method.next_object);
+ type = acpi_ns_get_type(parent_node);
+
+ /*
+ * Get the region handler and save it in the method object. We may need
+ * this if an operation region declaration causes a _REG method to be run.
+ *
+ * We can't do this in acpi_ps_link_module_code because
+ * acpi_gbl_root_node->Object is NULL at PASS1.
+ */
+ if ((type == ACPI_TYPE_DEVICE) && parent_node->object) {
+ method_obj->method.extra.handler =
+ parent_node->object->device.handler;
+ }
+
+ /* Must clear next_object (acpi_ns_attach_object needs the field) */
+
+ method_obj->method.next_object = NULL;
+
/* Initialize the evaluation information block */
- * Get the currently attached root object. Add a reference, because the
+ * Get the currently attached parent object. Add a reference, because the
* ref count will be decreased when the method object is installed to
- * the root node.
+ * the parent node.
*/
- root_obj = acpi_ns_get_attached_object(acpi_gbl_root_node);
- acpi_ut_add_reference(root_obj);
+ parent_obj = acpi_ns_get_attached_object(parent_node);
+ if (parent_obj) {
+ acpi_ut_add_reference(parent_obj);
+ }
- /* Install the method (module-level code) in the root node */
+ /* Install the method (module-level code) in the parent node */
- status = acpi_ns_attach_object(acpi_gbl_root_node, method_obj,
+ status = acpi_ns_attach_object(parent_node, method_obj,
ACPI_TYPE_METHOD);
if (ACPI_FAILURE(status)) {
goto exit;
}
- /* Execute the root node as a control method */
+ /* Execute the parent node as a control method */
status = acpi_ns_evaluate(info);
ACPI_DEBUG_PRINT((ACPI_DB_INIT, "Executed module-level code at %p
",
method_obj->method.aml_start));
+ /* Delete a possible implicit return value (in slack mode) */
+
+ if (info->return_object) {
+ acpi_ut_remove_reference(info->return_object);
+ }
+
/* Detach the temporary method object */
+ * Save the parent node in next_object. This is cheating, but we
+ * don't want to expand the method object.
+ */
+ method_obj->method.next_object =
+ ACPI_CAST_PTR(union acpi_operand_object, parent_node);
+
if (!prev) {
acpi_gbl_module_code_list = method_obj;
} else {
--- a/drivers/acpi/acpica/acobject.h
+++ b/drivers/acpi/acpica/acobject.h
@@ -180,7 +180,11 @@ struct acpi_object_method {
u8 sync_level;
union acpi_operand_object *mutex;
u8 *aml_start;
- ACPI_INTERNAL_METHOD implementation;
+ union {
+ ACPI_INTERNAL_METHOD implementation;
+ union acpi_operand_object *handler;
+ } extra;
+
u32 aml_length;
u8 thread_count;
acpi_owner_id owner_id;
--- a/drivers/acpi/acpica/dsmethod.c
+++ b/drivers/acpi/acpica/dsmethod.c
@@ -414,7 +414,7 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread,
/* Invoke an internal method if necessary */
if (obj_desc->method.method_flags & AML_METHOD_INTERNAL_ONLY) {
- status = obj_desc->method.implementation(next_walk_state);
+ status = obj_desc->method.extra.implementation(next_walk_state);
if (status == AE_OK) {
status = AE_CTRL_TERMINATE;
}
--- a/drivers/acpi/acpica/evrgnini.c
+++ b/drivers/acpi/acpica/evrgnini.c
@@ -575,6 +575,21 @@ acpi_ev_initialize_region(union acpi_operand_object *region_obj,
handler_obj = obj_desc->thermal_zone.handler;
break;
+ case ACPI_TYPE_METHOD:
+ /*
+ * If we are executing module level code, the original
+ * Node's object was replaced by this Method object and we
+ * saved the handler in the method object.
+ *
+ * See acpi_ns_exec_module_code
+ */
+ if (obj_desc->method.
+ flags & AOPOBJ_MODULE_LEVEL) {
+ handler_obj =
+ obj_desc->method.extra.handler;
+ }
+ break;
+
default:
/* Ignore other objects */
break;
--- a/drivers/acpi/acpica/nsaccess.c
+++ b/drivers/acpi/acpica/nsaccess.c
@@ -165,7 +165,7 @@ acpi_status acpi_ns_root_initialize(void)
if (info->obj_desc->method.method_flags & AML_METHOD_INTERNAL_ONLY) {
- status = info->obj_desc->method.implementation(walk_state);
+ status =
+ info->obj_desc->method.extra.implementation(walk_state);
info->return_object = walk_state->return_desc;
/* Cleanup states */
--- END ---
--
To UNSUBSCRIBE, email to debian-kernel-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
Archive: 4BB1C9C3.1070805@gmail.com">http://lists.debian.org/4BB1C9C3.1070805@gmail.com
03-30-2010, 01:16 PM
Ben Hutchings
Bug#571251: broken bios
On Tue, 2010-03-30 at 11:52 +0200, angelo wrote:
> Dear Ben,
>
> thanks for the information.
>
> I installed 2-6-34, full sources.
[...]
Do you mean 2.6.34-rc1?
Ben.
--
Ben Hutchings
Once a job is fouled up, anything done to improve it makes it worse.
04-03-2010, 01:56 AM
Ben Hutchings
Bug#571251: broken bios
-------- Forwarded Message --------
From: angelo <angelo70@gmail.com>
To: Ben Hutchings <ben@decadent.org.uk>
Subject: Re: broken bios
Date: Tue, 30 Mar 2010 15:31:47 +0200
Ben Hutchings wrote:
> On Tue, 2010-03-30 at 11:52 +0200, angelo wrote:
>
>> Dear Ben,
>>
>> thanks for the information.
>>
>> I installed 2-6-34, full sources.
>>
> [...]
>
> Do you mean 2.6.34-rc1?
>
> Ben.
>
>
i installed the rc2.
--
Ben Hutchings
Once a job is fouled up, anything done to improve it makes it worse.
--
To UNSUBSCRIBE, email to debian-kernel-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
Archive: 1270259801.12516.243.camel@localhost">http://lists.debian.org/1270259801.12516.243.camel@localhost
04-03-2010, 02:04 AM
Ben Hutchings
Bug#571251: broken bios
On Tue, 2010-03-30 at 15:31 +0200, angelo wrote:
> Ben Hutchings wrote:
> > On Tue, 2010-03-30 at 11:52 +0200, angelo wrote:
> >
> >> Dear Ben,
> >>
> >> thanks for the information.
> >>
> >> I installed 2-6-34, full sources.
> >>
> > [...]
> >
> > Do you mean 2.6.34-rc1?
> >
> > Ben.
> >
> >
> i installed the rc2.
Please report this upstream at <https://bugzilla.kernel.org> under
product 'ACPI', component 'BIOS'. Let us know the bug number so we can
track it.
Ben.
--
Ben Hutchings
Once a job is fouled up, anything done to improve it makes it worse.
05-01-2010, 08:48 PM
Moritz Muehlenhoff
Bug#571251: broken bios
On Sat, Apr 03, 2010 at 03:04:38AM +0100, Ben Hutchings wrote:
> On Tue, 2010-03-30 at 15:31 +0200, angelo wrote:
> > Ben Hutchings wrote:
> > > On Tue, 2010-03-30 at 11:52 +0200, angelo wrote:
> > >
> > >> Dear Ben,
> > >>
> > >> thanks for the information.
> > >>
> > >> I installed 2-6-34, full sources.
> > >>
> > > [...]
> > >
> > > Do you mean 2.6.34-rc1?
> > >
> > > Ben.
> > >
> > >
> > i installed the rc2.
>
> Please report this upstream at <https://bugzilla.kernel.org> under
> product 'ACPI', component 'BIOS'. Let us know the bug number so we can
> track it.
Did you report this upstream?
Cheers,
Moritz
--
To UNSUBSCRIBE, email to debian-kernel-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
Archive: 20100501204836.GA25412@galadriel.inutil.org">http://lists.debian.org/20100501204836.GA25412@galadriel.inutil.org