This patch is for an issue seen with ACPI on a HP Laptop but wanted to get
some additional testing done. Some debugging prints in for now.
? acpipci.diff
? acpitz.c.fix
? condref
? msg
? passive.diff
? tzdiff
? xdiff
Index: dsdt.c
===================================================================
RCS file: /cvs/src/sys/dev/acpi/dsdt.c,v
retrieving revision 1.157
diff -u -p -u -p -b -r1.157 dsdt.c
--- dsdt.c 5 Dec 2009 02:38:11 -0000 1.157
+++ dsdt.c 19 Jun 2010 03:10:08 -0000
@@ -699,6 +699,11 @@ aml_delchildren(struct aml_node *node)
aml_delchildren(onode);
+ if (onode->value && onode->value->refcnt > 1) {
+ printf("MULTI: %s\n", aml_nodename(onode));
+ onode->value->node = NULL;
+ }
+
/* Decrease reference count */
aml_xdelref(&onode->value, "");
@@ -976,6 +981,9 @@ aml_copyvalue(struct aml_value *lhs, str
break;
case AML_OBJTYPE_OBJREF:
lhs->v_objref = rhs->v_objref;
+ aml_xaddref(lhs->v_objref.ref, "");
+ printf("copy objref: %x %s\n", lhs->v_objref.type,
+ aml_nodename(lhs->v_objref.ref->node));
break;
default:
printf("copyvalue: %x", rhs->type);
@@ -3626,11 +3634,11 @@ aml_xparse(struct aml_scope *scope, int
/* CondRef: rr => I */
ival = 0;
if (opargs[0]->node != NULL) {
- aml_freevalue(opargs[1]);
-
/* Create Object Reference */
- _aml_setvalue(opargs[1], AML_OBJTYPE_OBJREF, opcode,
opargs[0]);
- aml_xaddref(opargs[1], "CondRef");
+ opargs[2] = aml_allocvalue(AML_OBJTYPE_OBJREF, opcode,
+ opargs[0]);
+ aml_xaddref(opargs[0], "CondRef");
+ aml_xstore(scope, opargs[1], 0, opargs[2]);
/* Mark that we found it */
ival = -1;