[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAJZ5v0hKGVKt=Nks+74C79CQy2ofBO_rhrPUMxJiohTsYgTHcA@mail.gmail.com>
Date: Mon, 27 Mar 2023 20:47:20 +0200
From: "Rafael J. Wysocki" <rafael@...nel.org>
To: Shuai Xue <xueshuai@...ux.alibaba.com>
Cc: tony.luck@...el.com, baolin.wang@...ux.alibaba.com,
benjamin.cheatham@....com, bp@...en8.de, dan.j.williams@...el.com,
james.morse@....com, lenb@...nel.org, linux-acpi@...r.kernel.org,
linux-kernel@...r.kernel.org, rafael@...nel.org,
zhuo.song@...ux.alibaba.com
Subject: Re: [PATCH v2] ACPI: APEI: EINJ: warn on invalid argument when
explicitly indicated by platform
On Thu, Mar 23, 2023 at 2:54 AM Shuai Xue <xueshuai@...ux.alibaba.com> wrote:
>
> OSPM executes an EXECUTE_OPERATION action to instruct the platform to begin
> the injection operation, then executes a GET_COMMAND_STATUS action to
> determine the status of the completed operation. The ACPI Specification
> documented error codes[1] are:
>
> 0 = Success (Linux #define EINJ_STATUS_SUCCESS)
> 1 = Unknown failure (Linux #define EINJ_STATUS_FAIL)
> 2 = Invalid Access (Linux #define EINJ_STATUS_INVAL)
>
> The original code report -EBUSY for both "Unknown Failure" and "Invalid
> Access" cases. Actually, firmware could do some platform dependent sanity
> checks and returns different error codes, e.g. "Invalid Access" to indicate
> to the user that the parameters they supplied cannot be used for injection.
>
> To this end, fix to return -EINVAL in the __einj_error_inject() error
> handling case instead of always -EBUSY, when explicitly indicated by the
> platform in the status of the completed operation.
>
> [1] ACPI Specification 6.5 18.6.1. Error Injection Table
>
> Signed-off-by: Shuai Xue <xueshuai@...ux.alibaba.com>
> Reviewed-by: Tony Luck <tony.luck@...el.com>
> ---
> changelog since v1:
> - elaborate commit log based on follow up discussion with Tony
> - pick up Reviewed-by tag of Tony
> ---
> drivers/acpi/apei/einj.c | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/acpi/apei/einj.c b/drivers/acpi/apei/einj.c
> index b4373e575660..fa0b4320312e 100644
> --- a/drivers/acpi/apei/einj.c
> +++ b/drivers/acpi/apei/einj.c
> @@ -489,9 +489,15 @@ static int __einj_error_inject(u32 type, u32 flags, u64 param1, u64 param2,
> if (rc)
> return rc;
> val = apei_exec_ctx_get_output(&ctx);
> - if (val != EINJ_STATUS_SUCCESS)
> + if (val == EINJ_STATUS_FAIL)
> return -EBUSY;
> + else if (val == EINJ_STATUS_INVAL)
> + return -EINVAL;
>
> + /*
> + * The error is injected into the platform successfully, then it needs
> + * to trigger the error.
> + */
> rc = apei_exec_run(&ctx, ACPI_EINJ_GET_TRIGGER_TABLE);
> if (rc)
> return rc;
> --
Applied as 6.4 material, thanks!
Powered by blists - more mailing lists