Merge branch 'bugzilla-13041' into release
This commit is contained in:
commit
ac0849fb6c
2 changed files with 53 additions and 17 deletions
|
@ -211,6 +211,12 @@ acpi_status acpi_enter_sleep_state_prep(u8 sleep_state)
|
||||||
|
|
||||||
ACPI_EXPORT_SYMBOL(acpi_enter_sleep_state_prep)
|
ACPI_EXPORT_SYMBOL(acpi_enter_sleep_state_prep)
|
||||||
|
|
||||||
|
static unsigned int gts, bfs;
|
||||||
|
module_param(gts, uint, 0644);
|
||||||
|
module_param(bfs, uint, 0644);
|
||||||
|
MODULE_PARM_DESC(gts, "Enable evaluation of _GTS on suspend.");
|
||||||
|
MODULE_PARM_DESC(bfs, "Enable evaluation of _BFS on resume".);
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
*
|
*
|
||||||
* FUNCTION: acpi_enter_sleep_state
|
* FUNCTION: acpi_enter_sleep_state
|
||||||
|
@ -278,16 +284,18 @@ acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state)
|
||||||
return_ACPI_STATUS(status);
|
return_ACPI_STATUS(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Execute the _GTS method */
|
if (gts) {
|
||||||
|
/* Execute the _GTS method */
|
||||||
|
|
||||||
arg_list.count = 1;
|
arg_list.count = 1;
|
||||||
arg_list.pointer = &arg;
|
arg_list.pointer = &arg;
|
||||||
arg.type = ACPI_TYPE_INTEGER;
|
arg.type = ACPI_TYPE_INTEGER;
|
||||||
arg.integer.value = sleep_state;
|
arg.integer.value = sleep_state;
|
||||||
|
|
||||||
status = acpi_evaluate_object(NULL, METHOD_NAME__GTS, &arg_list, NULL);
|
status = acpi_evaluate_object(NULL, METHOD_NAME__GTS, &arg_list, NULL);
|
||||||
if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
|
if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
|
||||||
return_ACPI_STATUS(status);
|
return_ACPI_STATUS(status);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get current value of PM1A control */
|
/* Get current value of PM1A control */
|
||||||
|
@ -513,18 +521,19 @@ acpi_status acpi_leave_sleep_state_prep(u8 sleep_state)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Execute the _BFS method */
|
if (bfs) {
|
||||||
|
/* Execute the _BFS method */
|
||||||
|
|
||||||
arg_list.count = 1;
|
arg_list.count = 1;
|
||||||
arg_list.pointer = &arg;
|
arg_list.pointer = &arg;
|
||||||
arg.type = ACPI_TYPE_INTEGER;
|
arg.type = ACPI_TYPE_INTEGER;
|
||||||
arg.integer.value = sleep_state;
|
arg.integer.value = sleep_state;
|
||||||
|
|
||||||
status = acpi_evaluate_object(NULL, METHOD_NAME__BFS, &arg_list, NULL);
|
status = acpi_evaluate_object(NULL, METHOD_NAME__BFS, &arg_list, NULL);
|
||||||
if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
|
if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
|
||||||
ACPI_EXCEPTION((AE_INFO, status, "During Method _BFS"));
|
ACPI_EXCEPTION((AE_INFO, status, "During Method _BFS"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return_ACPI_STATUS(status);
|
return_ACPI_STATUS(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -713,6 +713,32 @@ static void acpi_power_off(void)
|
||||||
acpi_enter_sleep_state(ACPI_STATE_S5);
|
acpi_enter_sleep_state(ACPI_STATE_S5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ACPI 2.0 created the optional _GTS and _BFS,
|
||||||
|
* but industry adoption has been neither rapid nor broad.
|
||||||
|
*
|
||||||
|
* Linux gets into trouble when it executes poorly validated
|
||||||
|
* paths through the BIOS, so disable _GTS and _BFS by default,
|
||||||
|
* but do speak up and offer the option to enable them.
|
||||||
|
*/
|
||||||
|
void __init acpi_gts_bfs_check(void)
|
||||||
|
{
|
||||||
|
acpi_handle dummy;
|
||||||
|
|
||||||
|
if (ACPI_SUCCESS(acpi_get_handle(ACPI_ROOT_OBJECT, METHOD_NAME__GTS, &dummy)))
|
||||||
|
{
|
||||||
|
printk(KERN_NOTICE PREFIX "BIOS offers _GTS\n");
|
||||||
|
printk(KERN_NOTICE PREFIX "If \"acpi.gts=1\" improves suspend, "
|
||||||
|
"please notify linux-acpi@vger.kernel.org\n");
|
||||||
|
}
|
||||||
|
if (ACPI_SUCCESS(acpi_get_handle(ACPI_ROOT_OBJECT, METHOD_NAME__BFS, &dummy)))
|
||||||
|
{
|
||||||
|
printk(KERN_NOTICE PREFIX "BIOS offers _BFS\n");
|
||||||
|
printk(KERN_NOTICE PREFIX "If \"acpi.bfs=1\" improves resume, "
|
||||||
|
"please notify linux-acpi@vger.kernel.org\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int __init acpi_sleep_init(void)
|
int __init acpi_sleep_init(void)
|
||||||
{
|
{
|
||||||
acpi_status status;
|
acpi_status status;
|
||||||
|
@ -771,5 +797,6 @@ int __init acpi_sleep_init(void)
|
||||||
* object can also be evaluated when the system enters S5.
|
* object can also be evaluated when the system enters S5.
|
||||||
*/
|
*/
|
||||||
register_reboot_notifier(&tts_notifier);
|
register_reboot_notifier(&tts_notifier);
|
||||||
|
acpi_gts_bfs_check();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue