This patch fixes CondRef store to empty target seen on Dell E4310 and some HP systems. Please test and send dmesg output.
Index: dsdt.c =================================================================== RCS file: /cvs/src/sys/dev/acpi/dsdt.c,v retrieving revision 1.185 diff -u -p -b -r1.185 dsdt.c --- dsdt.c 22 Apr 2011 18:22:01 -0000 1.185 +++ dsdt.c 2 Jun 2011 04:15:27 -0000 @@ -244,7 +244,7 @@ struct aml_opcode aml_table[] = { { AMLOP_INDEX, "Index", "tir", }, { AMLOP_DEREFOF, "DerefOf", "t", }, { AMLOP_REFOF, "RefOf", "S", }, - { AMLOP_CONDREFOF, "CondRef", "SS", }, + { AMLOP_CONDREFOF, "CondRef", "Sr", }, { AMLOP_LOADTABLE, "LoadTable", "tttttt" }, { AMLOP_STALL, "Stall", "i", }, @@ -3536,11 +3536,14 @@ aml_parse(struct aml_scope *scope, int r /* CondRef: rr => I */ ival = 0; if (opargs[0]->node != NULL) { + printf("condref: %s %p\n", aml_nodename(opargs[0]->node), opargs[1]); + /* Create Object Reference */ - opargs[2] = aml_allocvalue(AML_OBJTYPE_OBJREF, opcode, + rv = aml_allocvalue(AML_OBJTYPE_OBJREF, opcode, opargs[0]); aml_addref(opargs[0], "CondRef"); - aml_store(scope, opargs[1], 0, opargs[2]); + aml_store(scope, opargs[1], 0, rv); + aml_delref(&rv, 0); /* Mark that we found it */ ival = -1;