lkml.org 
[lkml]   [2023]   [Mar]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
Date
SubjectRe: [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@linux.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@linux.alibaba.com>
> Reviewed-by: Tony Luck <tony.luck@intel.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!

\
 
 \ /
  Last update: 2023-03-27 20:47    [W:0.258 / U:0.060 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site