Re: [PATCH v5 1/4] firmware: arm_sdei: add sdei_is_present()
From: Usama Arif
Date: Tue Jun 30 2026 - 06:47:37 EST
On Mon, 29 Jun 2026 16:07:15 +0100 Kiryl Shutsemau <kirill@xxxxxxxxxxxxx> wrote:
> From: "Kiryl Shutsemau (Meta)" <kas@xxxxxxxxxx>
>
> invoke_sdei_fn() returns -EIO when no SDEI conduit was probed, and the
> core warns ("Failed to create event ...") on any registration that hits
> that. An optional consumer that registers an event from an unconditional
> initcall would therefore make every boot on a non-SDEI system emit that
> warning for what is simply absent firmware.
>
> Expose whether SDEI firmware is present so such a consumer can skip
> registration -- and the warning -- when there is nothing to talk to.
>
> Signed-off-by: Kiryl Shutsemau (Meta) <kas@xxxxxxxxxx>
> Reviewed-by: Douglas Anderson <dianders@xxxxxxxxxxxx>
> ---
Can this be merged in patch 3 where this function is actually used?
> drivers/firmware/arm_sdei.c | 10 ++++++++++
> include/linux/arm_sdei.h | 3 +++
> 2 files changed, 13 insertions(+)
>
> diff --git a/drivers/firmware/arm_sdei.c b/drivers/firmware/arm_sdei.c
> index f39ed7ba3a38..c161cf263547 100644
> --- a/drivers/firmware/arm_sdei.c
> +++ b/drivers/firmware/arm_sdei.c
> @@ -339,6 +339,16 @@ static void _ipi_unmask_cpu(void *ignored)
> sdei_unmask_local_cpu();
> }
>
> +/*
> + * Was SDEI firmware probed and is it usable? Lets optional consumers skip
> + * registering an event -- and the warning a failed registration emits -- on
> + * systems with no SDEI.
> + */
> +bool sdei_is_present(void)
> +{
> + return sdei_firmware_call;
sdei_firmware_call is a function pointer. The above is correct, but
can we make it sdei_firmware_call != NULL? I think that looks a lot better.
> +}
> +
> static void _ipi_private_reset(void *ignored)
> {
> int err;
> diff --git a/include/linux/arm_sdei.h b/include/linux/arm_sdei.h
> index f652a5028b59..b07113eeeff7 100644
> --- a/include/linux/arm_sdei.h
> +++ b/include/linux/arm_sdei.h
> @@ -37,6 +37,9 @@ int sdei_event_unregister(u32 event_num);
> int sdei_event_enable(u32 event_num);
> int sdei_event_disable(u32 event_num);
>
> +/* Was SDEI firmware probed and usable? */
> +bool sdei_is_present(void);
> +
> /* GHES register/unregister helpers */
> int sdei_register_ghes(struct ghes *ghes, sdei_event_callback *normal_cb,
> sdei_event_callback *critical_cb);
> --
> 2.54.0
>
>