Am 26.05.2012 08:03, schrieb Oleksij Rempel (fishor): > Hi, > > On 25.05.2012 22:00, Rafael J. Wysocki wrote: >> On Friday, May 25, 2012, Alan Stern wrote: >>> Oleksij: >>> >>> Please take a look at this bug report: >>> >>> https://bugzilla.kernel.org/show_bug.cgi?id=43278 >>> >>> Apparently your patch breaks wakeup on this machine by preventing the >>> USB host controllers from being put into D3. >> >> I think the patch is incorrect, actually. >> >> First, if you look at the first hunk: >> >> - if (acpi_target_sleep_state> ACPI_STATE_S0) >> + if (acpi_target_sleep_state> ACPI_STATE_S0) { >> + acpi_status status; >> + >> acpi_evaluate_integer(handle, acpi_method, NULL,&d_min); >> >> + if (device_may_wakeup(dev)) { >> + acpi_method[3] = 'W'; >> + status = acpi_evaluate_integer(handle, >> acpi_method, >> + NULL,&d_max); >> + if (ACPI_FAILURE(status)) >> + d_max = d_min; >> + } >> + } >> >> it will do something like this: if the device is wakeup-capable, get >> d_max >> from _SxW, unless it fails. However, the code just below in that >> function: >> >> if (acpi_target_sleep_state == ACPI_STATE_S0 || >> (device_may_wakeup(dev)&& >> adev->wakeup.sleep_state<= acpi_target_sleep_state)) { >> acpi_status status; >> >> acpi_method[3] = 'W'; >> status = acpi_evaluate_integer(handle, acpi_method, NULL, >> &d_max); >> if (ACPI_FAILURE(status)) { >> if (acpi_target_sleep_state != ACPI_STATE_S0 || >> status != AE_NOT_FOUND) >> d_max = d_min; >> } else if (d_max< d_min) { >> /* Warn the user of the broken DSDT */ >> printk(KERN_WARNING "ACPI: Wrong value from %s\n", >> acpi_method); >> /* Sanitize it */ >> d_min = d_max; >> } >> } >> >> does _exactly_ the same thing (it only has a more sophisticated error >> code path). > > Not really correct. The code below check _SxW state on wake up. This > code checks _SxW on suspend. oops i misreaded the code. it really do the same. except this part is not executed because of this check: "adev->wakeup.sleep_state <= acpi_target_sleep_state" -- Regards, Oleksij -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html