APPLIED: [PATCH] acpi: method: extra sanity checks for _PSx objects, (LP: #1363904)

Keng-Yu Lin keng-yu.lin at canonical.com
Wed Sep 3 08:03:54 UTC 2014


On Mon, Sep 1, 2014 at 5:17 PM, Colin King <colin.king at canonical.com> 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)
>  {
> --
> 2.1.0
>
>
> --
> fwts-devel mailing list
> fwts-devel at lists.ubuntu.com
> Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/fwts-devel



More information about the fwts-devel mailing list