[PATCH OLK-6.6 0/2] Fix SDEI state machine issue during reboot process
Bowen You (2): [Huawei] Add sdei interface to check event status [Huawei] Fix SDEI state machine issue during reboot process arch/arm64/kernel/watchdog_sdei.c | 21 ++++++++++++++++++++- drivers/firmware/arm_sdei.c | 6 ++++++ include/linux/arm_sdei.h | 1 + 3 files changed, 27 insertions(+), 1 deletion(-) -- 2.34.1
Offering: HULK hulk inclusion category: feature bugzilla: https://gitee.com/openeuler/kernel/issues/I7V1MG -------------------------------- This patch introduces a new API, `sdei_api_event_status`, to query the status of a specific SDEI event. The function invokes the SDEI firmware call `SDEI_EVENT_STATUS` with the given event number and returns the result. Signed-off-by: Bowen You <youbowen2@huawei.com> --- drivers/firmware/arm_sdei.c | 6 ++++++ include/linux/arm_sdei.h | 1 + 2 files changed, 7 insertions(+) diff --git a/drivers/firmware/arm_sdei.c b/drivers/firmware/arm_sdei.c index fe638e40aebb..785611c52817 100644 --- a/drivers/firmware/arm_sdei.c +++ b/drivers/firmware/arm_sdei.c @@ -214,6 +214,12 @@ static int sdei_api_event_get_info(u32 event, u32 info, u64 *result) 0, 0, result); } +int sdei_api_event_status(u32 event, u64 *result) +{ + return invoke_sdei_fn(SDEI_1_0_FN_SDEI_EVENT_STATUS, event, 0, 0, + 0, 0, result); +} + static struct sdei_event *sdei_event_create(u32 event_num, sdei_event_callback *cb, void *cb_arg) diff --git a/include/linux/arm_sdei.h b/include/linux/arm_sdei.h index 28e247dd5773..2666d0be7038 100644 --- a/include/linux/arm_sdei.h +++ b/include/linux/arm_sdei.h @@ -39,6 +39,7 @@ int sdei_event_disable(u32 event_num); int sdei_api_event_interrupt_bind(int hwirq); int sdei_api_event_disable(u32 event_num); int sdei_api_event_enable(u32 event_num); +int sdei_api_event_status(u32 event_num, u64 *result); int sdei_api_clear_eoi(int hwirq); int sdei_api_set_secure_timer_period(int sec); -- 2.34.1
Offering: HULK hulk inclusion category: bugfix bugzilla: https://gitcode.com/openeuler/kernel/issues/8325 -------------------------------- Add sdei event status check in sdei pm notifier, If event is already unregistered, don't do disable/enable in pm notifier. In this way, we can prevent incorrect state transitions, e.g., disabling or enabling after unregistering. Fixes: c8f96adca7fa ("arm64/watchdog: fix watchdog failure in low power scenarios") Signed-off-by: Bowen You <youbowen2@huawei.com> --- arch/arm64/kernel/watchdog_sdei.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/arch/arm64/kernel/watchdog_sdei.c b/arch/arm64/kernel/watchdog_sdei.c index 9d63bb063718..c12b3552f68e 100644 --- a/arch/arm64/kernel/watchdog_sdei.c +++ b/arch/arm64/kernel/watchdog_sdei.c @@ -114,9 +114,27 @@ static int sdei_watchdog_pm_notifier(struct notifier_block *nb, unsigned long action, void *data) { int rv = 0; + u64 result; WARN_ON_ONCE(preemptible()); + /* + * Judge event status before disable or enable to prevent + * incorrect state transitions, e.g., disabling after + * unregistering. + */ + rv = sdei_api_event_status(sdei_watchdog_event_num, &result); + if (rv) + goto error; + if (!result) + goto success; + + /* + * After powering on/off the LPI (Low Power Idle), + * the enable function must be called to enable the + * EL3 Secure Timer, ensuring proper handling of + * secure timer functionality. + */ switch (action) { case CPU_PM_ENTER: if (per_cpu(sdei_usr_en, smp_processor_id())) @@ -131,9 +149,10 @@ static int sdei_watchdog_pm_notifier(struct notifier_block *nb, return NOTIFY_DONE; } +error: if (rv) return notifier_from_errno(rv); - +success: return NOTIFY_OK; } -- 2.34.1
反馈: 您发送到kernel@openeuler.org的补丁/补丁集,已成功转换为PR! PR链接地址: https://atomgit.com/openeuler/kernel/merge_requests/19955 邮件列表地址:https://mailweb.openeuler.org/archives/list/kernel@openeuler.org/message/HA3... FeedBack: The patch(es) which you have sent to kernel@openeuler.org mailing list has been converted to a pull request successfully! Pull request link: https://atomgit.com/openeuler/kernel/merge_requests/19955 Mailing list address: https://mailweb.openeuler.org/archives/list/kernel@openeuler.org/message/HA3...
participants (2)
-
Bowen You -
patchwork bot