From: Corey Minyard <corey@minyard.net>
To: Michal Clapinski <mclapinski@google.com>
Cc: openipmi-developer@lists.sourceforge.net, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2] ipmi:si: Add async init to ipmi_si
Date: Sun, 5 Jul 2026 19:13:02 -0500 [thread overview]
Message-ID: <akrzDoUDAtjNOAvP@mail.minyard.net> (raw)
In-Reply-To: <20260703150955.3943082-1-mclapinski@google.com>
On Fri, Jul 03, 2026 at 05:09:55PM +0200, Michal Clapinski wrote:
> Added a new config option to allow offloading individual calls to
> try_smi_init(). Saves 100ms on my system.
This looks good. In a few releases I may change the default to y, if I
can remember it by then :-).
It's in my next tree.
-corey
>
> Signed-off-by: Michal Clapinski <mclapinski@google.com>
> ---
> v2:
> - instead of offloading the whole init function, offload just the
> individual calls to try_smi_init()
>
> I didn't implement the periodic retry feature that was talked about
> under v1 due to my lack of expertise. LMK if this is a deal-breaker.
> ---
> drivers/char/ipmi/Kconfig | 9 +++++++++
> drivers/char/ipmi/ipmi_si_intf.c | 32 ++++++++++++++++++++++++++++----
> 2 files changed, 37 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/char/ipmi/Kconfig b/drivers/char/ipmi/Kconfig
> index 669f76000197..c8fa445c1c17 100644
> --- a/drivers/char/ipmi/Kconfig
> +++ b/drivers/char/ipmi/Kconfig
> @@ -67,6 +67,15 @@ config IPMI_SI
> Currently, only KCS and SMIC are supported. If
> you are using IPMI, you should probably say "y" here.
>
> +config IPMI_SI_ASYNC_INIT
> + bool 'Asynchronous initialization of IPMI System Interface'
> + depends on IPMI_SI
> + default n
> + help
> + Offloads invidual SMI inits. It speeds up the boot time.
> + It also introduces a very small risk that something else might fail
> + if it depends on synchronous IPMI init.
> +
> config IPMI_SSIF
> tristate 'IPMI SMBus handler (SSIF)'
> depends on I2C
> diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c
> index 9a9d12be9bf7..504d5b8636ba 100644
> --- a/drivers/char/ipmi/ipmi_si_intf.c
> +++ b/drivers/char/ipmi/ipmi_si_intf.c
> @@ -39,6 +39,7 @@
> #include <linux/rcupdate.h>
> #include <linux/ipmi.h>
> #include <linux/ipmi_smi.h>
> +#include <linux/async.h>
> #include "ipmi_si.h"
> #include "ipmi_si_sm.h"
> #include <linux/string.h>
> @@ -2174,6 +2175,17 @@ static bool __init ipmi_smi_info_same(struct smi_info *e1, struct smi_info *e2)
> e1->io.addr_data == e2->io.addr_data);
> }
>
> +static ASYNC_DOMAIN_EXCLUSIVE(ipmi_si_async_domain);
> +
> +static void __init async_try_smi_init(void *data, async_cookie_t cookie)
> +{
> + struct smi_info *smi = data;
> +
> + mutex_lock(&smi_infos_lock);
> + try_smi_init(smi);
> + mutex_unlock(&smi_infos_lock);
> +}
> +
> static int __init init_ipmi_si(void)
> {
> struct smi_info *e, *e2;
> @@ -2219,8 +2231,13 @@ static int __init init_ipmi_si(void)
> break;
> }
> }
> - if (!dup)
> - try_smi_init(e);
> + if (!dup) {
> + if (IS_ENABLED(CONFIG_IPMI_SI_ASYNC_INIT))
> + async_schedule_domain(async_try_smi_init, e,
> + &ipmi_si_async_domain);
> + else
> + try_smi_init(e);
> + }
> }
>
> /*
> @@ -2253,8 +2270,13 @@ static int __init init_ipmi_si(void)
> break;
> }
> }
> - if (!dup)
> - try_smi_init(e);
> + if (!dup) {
> + if (IS_ENABLED(CONFIG_IPMI_SI_ASYNC_INIT))
> + async_schedule_domain(async_try_smi_init, e,
> + &ipmi_si_async_domain);
> + else
> + try_smi_init(e);
> + }
> }
>
> initialized = true;
> @@ -2401,6 +2423,8 @@ static void cleanup_ipmi_si(void)
> if (!initialized)
> return;
>
> + async_synchronize_full_domain(&ipmi_si_async_domain);
> +
> ipmi_si_pci_shutdown();
>
> ipmi_si_ls2k_shutdown();
> --
> 2.55.0.795.g602f6c329a-goog
>
prev parent reply other threads:[~2026-07-06 0:13 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-03 15:09 [PATCH v2] ipmi:si: Add async init to ipmi_si Michal Clapinski
2026-07-06 0:13 ` Corey Minyard [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=akrzDoUDAtjNOAvP@mail.minyard.net \
--to=corey@minyard.net \
--cc=linux-kernel@vger.kernel.org \
--cc=mclapinski@google.com \
--cc=openipmi-developer@lists.sourceforge.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.