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