Re: [PATCH v2] ACPI: Support for platform initiated graceful shutdown

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On 5/16/2016 4:43 PM, Zheng, Lv wrote:
> Hi,
>
>> From: linux-acpi-owner@xxxxxxxxxxxxxxx [mailto:linux-acpi-
>> owner@xxxxxxxxxxxxxxx] On Behalf Of Prashanth Prakash
>> Subject: [PATCH v2] ACPI: Support for platform initiated graceful shutdown
>>
>> This patch adds support for platform initited graceful shutdown as
>> described in sections 5.6.6(Table-143) and 6.3.5.1 of ACPI 6.1 spec
>>
>> The OSPM will get a graceful shutdown request via a Notify operator
>> on \_SB device with a value of 0x81 per section 5.6.6. Following the
>> shutdown request from platform the OSPM needs to follow the
>> processing sequence as described in section 6.2.5.1.
> [Lv Zheng] 
> Can you provide proofs on how other OS (ex., Windows) behave around this feature instead of using the spec description?
There was some ambiguity on which device the notify call should target and these
were clarified only in ACPI 6.1 spec, so, I am not sure if there any existing
platform that uses this part of the spec to check the behavior.
Also, I am testing on an ARM platform and don't have access to a windows image
to check. Sorry.
>> Signed-off-by: Prashanth Prakash <pprakash@xxxxxxxxxxxxxx>
>> ---
>>  drivers/acpi/bus.c     | 49
>> +++++++++++++++++++++++++++++++++++++++++++++++++
>>  include/acpi/actypes.h |  2 +-
>>  2 files changed, 50 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
>> index 31e8da6..25d4806 100644
>> --- a/drivers/acpi/bus.c
>> +++ b/drivers/acpi/bus.c
>> @@ -30,6 +30,8 @@
>>  #include <linux/acpi.h>
>>  #include <linux/slab.h>
>>  #include <linux/regulator/machine.h>
>> +#include <linux/workqueue.h>
>> +#include <linux/reboot.h>
>>  #ifdef CONFIG_X86
>>  #include <asm/mpspec.h>
>>  #endif
>> @@ -475,6 +477,52 @@ static void acpi_device_remove_notify_handler(struct
>> acpi_device *device)
>>  					   acpi_device_notify);
>>  }
>>
>> +/* Handle events targeting \_SB device (at present only graceful shutdown) */
>> +
>> +#define ACPI_SB_NOTIFY_SHUTDOWN_REQUEST 0x81
>> +#define ACPI_SYBUS_INDICATE_INTERVAL	10000
>> +
>> +static void sybus_evaluate_ost(struct work_struct *dummy);
>> +static DECLARE_DELAYED_WORK(acpi_sybus_work, sybus_evaluate_ost);
>> +
>> +static void sybus_evaluate_ost(struct work_struct *dummy)
>> +{
>> +	acpi_handle sb_handle;
>> +
>> +	if (ACPI_SUCCESS(acpi_get_handle(NULL, "\\_SB", &sb_handle))) {
>> +		acpi_evaluate_ost(sb_handle,
>> ACPI_OST_EC_OSPM_SHUTDOWN,
>> +				ACPI_OST_SC_OS_SHUTDOWN_IN_PROGRESS,
>> NULL);
>> +		schedule_delayed_work(&acpi_sybus_work,
>> +
>> 	msecs_to_jiffies(ACPI_SYBUS_INDICATE_INTERVAL));
>> +		pr_info("Graceful shutdown in progress.\n");
>> +	}
>> +}
>> +
>> +static void acpi_sybus_notify(acpi_handle handle, u32 event, void *data)
>> +{
>> +	if (event == ACPI_SB_NOTIFY_SHUTDOWN_REQUEST) {
>> +		if (!delayed_work_pending(&acpi_sybus_work)) {
>> +			sybus_evaluate_ost(NULL);
>> +			orderly_poweroff(true);
>> +		}
>> +	} else
>> +		pr_warn("event %x is not supported by \\_SB device\n", event);
> [Lv Zheng] 
> Do you need to evaluate _OST with status code = 2?
> This looks to me like we are lacking in general Notify handling support in the ACPICA core.
>
> Thanks and best regards
> -Lv
The possible status codes for graceful shutdown request is provided by the spec itself (See
Table: 6-186 in ACPI6.1 spec). The status code in this scenario indicates the status of shutdown,
some of the possible status include "request denied" or "not supported" and so on.
>> +}
>> +
>> +static int __init acpi_setup_sybus_notify_handler(void)
>> +{
>> +	acpi_handle sb_handle;
>> +
>> +	if (ACPI_FAILURE(acpi_get_handle(NULL, "\\_SB", &sb_handle)))
>> +		return -ENXIO;
>> +
>> +	if (ACPI_FAILURE(acpi_install_notify_handler(sb_handle,
>> ACPI_DEVICE_NOTIFY,
>> +						acpi_sybus_notify, NULL)))
>> +		return -EINVAL;
>> +
>> +	return 0;
>> +}
>> +
>>  /* --------------------------------------------------------------------------
>>                               Device Matching
>>     -------------------------------------------------------------------------- */
>> @@ -1124,6 +1172,7 @@ static int __init acpi_init(void)
>>  	acpi_sleep_proc_init();
>>  	acpi_wakeup_device_init();
>>  	acpi_debugger_init();
>> +	acpi_setup_sybus_notify_handler();
>>  	return 0;
>>  }
>>
>> diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h
>> index cb389ef..860b273 100644
>> --- a/include/acpi/actypes.h
>> +++ b/include/acpi/actypes.h
>> @@ -627,7 +627,7 @@ typedef u64 acpi_integer;
>>  #define ACPI_NOTIFY_DEVICE_PLD_CHECK    (u8) 0x09
>>  #define ACPI_NOTIFY_RESERVED            (u8) 0x0A
>>  #define ACPI_NOTIFY_LOCALITY_UPDATE     (u8) 0x0B
>> -#define ACPI_NOTIFY_SHUTDOWN_REQUEST    (u8) 0x0C
>> +#define ACPI_NOTIFY_RESERVED_2          (u8) 0x0C
>>  #define ACPI_NOTIFY_AFFINITY_UPDATE     (u8) 0x0D
>>
>>  #define ACPI_GENERIC_NOTIFY_MAX         0x0D
>> --
>> Qualcomm Technologies, Inc. on behalf
>> of the Qualcomm Innovation Center, Inc.  The Qualcomm Innovation Center,
>> Inc.
>> is a member of the Code Aurora Forum, a Linux Foundation Collaborative
>> Project.
>>
>> --
>> 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

Thanks,
Prashanth
--
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



[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux