lib: sbi_hsm: Put the resume_pending hart in the interruptible hart mask
authorNick Hu <nick.hu@sifive.com>
Fri, 1 Dec 2023 09:51:47 +0000 (17:51 +0800)
committerAnup Patel <anup@brainfault.org>
Sun, 10 Dec 2023 07:54:13 +0000 (13:24 +0530)
Current interruptible hart mask doesn't include the hart which HSM state
is SBI_HSM_STATE_RESUME_PENDING. So when there is a request to send an
IPI to the hart which is in the resume process, this hart would miss the
IPI forever. Put the SBI_HSM_STATE_RESUME_PENDING hart in the
interruptible hart mask to fix the issue.

Signed-off-by: Nick Hu <nick.hu@sifive.com>
Reviewed-by: Xiang W <wxjstz@126.com>
Reviewed-by: Anup Patel <anup@brainfault.org>
lib/sbi/sbi_hsm.c

index 147f954e328d34c9693785b549bfd466bb5a60d8..3d60ceb749ab014ce28f3551c6fb17feb72bab2f 100644 (file)
@@ -128,7 +128,8 @@ int sbi_hsm_hart_interruptible_mask(const struct sbi_domain *dom,
 
                hstate = __sbi_hsm_hart_get_state(hbase + i);
                if (hstate == SBI_HSM_STATE_STARTED ||
-                   hstate == SBI_HSM_STATE_SUSPENDED)
+                   hstate == SBI_HSM_STATE_SUSPENDED ||
+                   hstate == SBI_HSM_STATE_RESUME_PENDING)
                        *out_hmask |= hmask;
        }