From: Troy Mitchell <troy.mitchell@linux.dev>
To: opensbi@lists.infradead.org
Cc: Anup Patel <anup@brainfault.org>, Nick Hu <nick.hu@sifive.com>,
Kevin Zhang <zhangmeng.kevin@linux.spacemit.com>,
Troy Mitchell <troy.mitchell@linux.dev>
Subject: [PATCH] lib: sbi: Clear all IPI devices when processing an IPI
Date: Tue, 08 Sep 2026 21:00:36 +0800 [thread overview]
Message-ID: <20260908-ipi-clear-all-v1-1-b1bd5d016eb6@linux.dev> (raw)
Hart start sends wake-up IPIs through all registered IPI devices, but
sbi_ipi_process() only clears the preferred device. A notification from
another device can arrive after warm initialization has cleared it.
With both IMSIC and ACLINT MSWI, IMSIC is preferred and has no ipi_clear
callback: its interrupts are acknowledged through MTOPEI. A late ACLINT
notification therefore leaves MSIP asserted, trapping the hart in the
machine-mode interrupt handler and potentially timing out Linux CPU
bring-up.
Clear all registered IPI devices before consuming the software IPI event
bits so that late wake-up notifications are acknowledged too.
Fixes: 94f0f8465622 ("lib: sbi: Extends sbi_ipi_raw_send() to use all available IPI devices")
Signed-off-by: Troy Mitchell <troy.mitchell@linux.dev>
---
lib/sbi/sbi_ipi.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/lib/sbi/sbi_ipi.c b/lib/sbi/sbi_ipi.c
index b04a5877..683d559d 100644
--- a/lib/sbi/sbi_ipi.c
+++ b/lib/sbi/sbi_ipi.c
@@ -263,7 +263,12 @@ void sbi_ipi_process(void)
sbi_scratch_offset_ptr(scratch, ipi_data_off);
sbi_pmu_ctr_incr_fw(SBI_PMU_FW_IPI_RECVD);
- sbi_ipi_raw_clear(false);
+ /*
+ * A wake-up IPI is sent through all devices. A notification from a
+ * non-preferred device can arrive after warm-boot initialization
+ * cleared it, so acknowledge all devices when processing the IPI.
+ */
+ sbi_ipi_raw_clear(true);
ipi_type = atomic_raw_xchg_ulong(&ipi_data->ipi_type, 0);
ipi_event = 0;
---
base-commit: 3593a5facc4c6938b90429a6973ba9ee21fc5899
change-id: 20260908-ipi-clear-all-54c3def85689
Best regards,
--
Troy Mitchell <troy.mitchell@linux.dev>
--
opensbi mailing list
opensbi@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/opensbi
next reply other threads:[~2026-09-08 13:01 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-08 13:00 Troy Mitchell [this message]
2026-09-11 9:32 ` [PATCH] lib: sbi: Clear all IPI devices when processing an IPI Bo Gan
2026-09-12 9:09 ` Troy Mitchell
2026-09-13 10:04 ` Bo Gan
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=20260908-ipi-clear-all-v1-1-b1bd5d016eb6@linux.dev \
--to=troy.mitchell@linux.dev \
--cc=anup@brainfault.org \
--cc=nick.hu@sifive.com \
--cc=opensbi@lists.infradead.org \
--cc=zhangmeng.kevin@linux.spacemit.com \
/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.