Index: sys/dev/acpica/acpi.c =================================================================== --- sys/dev/acpica/acpi.c (revision 237565) +++ sys/dev/acpica/acpi.c (working copy) @@ -1855,7 +1855,6 @@ acpi_probe_order(ACPI_HANDLE handle, int *order) static ACPI_STATUS acpi_probe_child(ACPI_HANDLE handle, UINT32 level, void *context, void **status) { - struct acpi_prw_data prw; ACPI_OBJECT_TYPE type; ACPI_HANDLE h; device_t bus, child; @@ -1885,8 +1884,6 @@ acpi_probe_child(ACPI_HANDLE handle, UINT32 level, if (strcmp(handle_str, "\\_SB_") == 0 || strcmp(handle_str, "\\_TZ_") == 0) break; - if (acpi_parse_prw(handle, &prw) == 0) - AcpiSetupGpeForWake(handle, prw.gpe_handle, prw.gpe_bit); /* * Ignore devices that do not have a _HID or _CID. They should @@ -2963,10 +2960,12 @@ acpi_wake_prep_walk(int sstate) static int acpi_wake_sysctl_walk(device_t dev) { - int error, i, numdevs; + struct acpi_prw_data prw; device_t *devlist; device_t child; + ACPI_HANDLE handle; ACPI_STATUS status; + int error, i, numdevs; error = device_get_children(dev, &devlist, &numdevs); if (error != 0 || numdevs == 0) { @@ -2979,8 +2978,11 @@ acpi_wake_sysctl_walk(device_t dev) acpi_wake_sysctl_walk(child); if (!device_is_attached(child)) continue; - status = AcpiEvaluateObject(acpi_get_handle(child), "_PRW", NULL, NULL); - if (ACPI_SUCCESS(status)) { + handle = acpi_get_handle(child); + if (acpi_parse_prw(handle, &prw) == 0) { + status = AcpiSetupGpeForWake(handle, prw.gpe_handle, prw.gpe_bit); + if (ACPI_FAILURE(status)) + continue; SYSCTL_ADD_PROC(device_get_sysctl_ctx(child), SYSCTL_CHILDREN(device_get_sysctl_tree(child)), OID_AUTO, "wake", CTLTYPE_INT | CTLFLAG_RW, child, 0,