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;

Reply via email to