ACK: [PATCH] acpi: method: extra sanity checks for _PSx objects, (LP: #1363904)
Keng-Yu Lin
keng-yu.lin at canonical.com
Wed Sep 3 06:32:28 UTC 2014
On Wed, Sep 3, 2014 at 12:14 PM, Alex Hung <alex.hung at canonical.com> wrote:
> On 09/01/2014 05:17 PM, Colin King wrote:
>> From: Colin Ian King <colin.king at canonical.com>
>>
>> Add extra checks:
>>
>> _PS0 - one of the following must exist: _PS1, _PS2, _PS3
>> _PS1,_PS2,_PS3: _PS0 must exist
>>
>> Signed-off-by: Colin Ian King <colin.king at canonical.com>
>> ---
>> src/acpi/method/method.c | 69 +++++++++++++++++++++++++++++++++++++++++-------
>> 1 file changed, 60 insertions(+), 9 deletions(-)
>>
>> diff --git a/src/acpi/method/method.c b/src/acpi/method/method.c
>> index 73dcf4f..628f03e 100644
>> --- a/src/acpi/method/method.c
>> +++ b/src/acpi/method/method.c
>> @@ -2161,17 +2161,68 @@ static int method_test_DSW(fwts_framework *fw)
>> arg, 3, method_test_NULL_return, NULL);
>> }
>>
>> -#define method_test_PSx(name) \
>> -static int method_test ## name(fwts_framework *fw) \
>> -{ \
>> - return method_evaluate_method(fw, METHOD_OPTIONAL, \
>> - # name, NULL, 0, method_test_NULL_return, # name); \
>> +static int method_test_PSx(fwts_framework *fw, char *name)
>> +{
>> + /*
>> + * iASL (ACPICA commit 6922796cfdfca041fdb96dc9e3918cbc7f43d830)
>> + * checks that _PS0 must exist if we have _PS1, _PS2, _PS3
>> + * so check this here too.
>> + */
>> + if ((fwts_acpi_object_exists(name) != NULL) &&
>> + (fwts_acpi_object_exists("_PS0") == NULL)) {
>> + fwts_failed(fw, LOG_LEVEL_HIGH, "Method_PSx",
>> + "%s requires that the _PS0 "
>> + "control method must also exist, however, "
>> + "it was not found.", name);
>> + }
>> + return method_evaluate_method(fw, METHOD_OPTIONAL,
>> + name, NULL, 0, method_test_NULL_return, name);
>> +}
>> +
>> +static int method_test_PS0(fwts_framework *fw)
>> +{
>> + /*
>> + * iASL (ACPICA commit 6922796cfdfca041fdb96dc9e3918cbc7f43d830)
>> + * checks that one of _PS1, _PS2, _PS3 must exist if _PS0 exists.
>> + */
>> + if (fwts_acpi_object_exists("_PS0") != NULL) {
>> + bool ok = false;
>> + int i;
>> +
>> + for (i = 1; i < 4; i++) {
>> + char name[5];
>> +
>> + snprintf(name, sizeof(name), "_PS%1d", i);
>> + if (fwts_acpi_object_exists(name) != NULL) {
>> + ok = true;
>> + break;
>> + }
>> + }
>> + if (!ok) {
>> + fwts_failed(fw, LOG_LEVEL_HIGH, "Method_PS0",
>> + "_PS0 requires that one of the _PS1, _PS2, _PS3 "
>> + "control methods must also exist, however, "
>> + "none were found.");
>> + }
>> + }
>> + return method_evaluate_method(fw, METHOD_OPTIONAL, "_PS0",
>> + NULL, 0, method_test_NULL_return, "_PS0");
>> +}
>> +
>> +static int method_test_PS1(fwts_framework *fw)
>> +{
>> + return method_test_PSx(fw, "_PS1");
>> }
>>
>> -method_test_PSx(_PS0)
>> -method_test_PSx(_PS1)
>> -method_test_PSx(_PS2)
>> -method_test_PSx(_PS3)
>> +static int method_test_PS2(fwts_framework *fw)
>> +{
>> + return method_test_PSx(fw, "_PS2");
>> +}
>> +
>> +static int method_test_PS3(fwts_framework *fw)
>> +{
>> + return method_test_PSx(fw, "_PS3");
>> +}
>>
>> static int method_test_PSC(fwts_framework *fw)
>> {
>>
> Acked-by: Alex Hung <alex.hung at canonical.com>
>
Acked-by: Keng-Yu Lin <kengyu at canonical.com>
More information about the fwts-devel
mailing list