This is an automated email from the ASF dual-hosted git repository. acassis pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 9d1b9585245d0ac1079e887b1166c6a8215619e9 Author: ouyangxiangzhen <ouyangxiangz...@xiaomi.com> AuthorDate: Wed Jun 4 11:35:31 2025 +0800 sched/wdog: Remove the wd_start_period. For better simplicity, this commit replaced the periodical wdog APIs with the more expressive wd_start_next. The wd_start_next restarts watchdog timer based on the last expiration time. Signed-off-by: ouyangxiangzhen <ouyangxiangz...@xiaomi.com> --- include/nuttx/wdog.h | 63 +++++++++++++++----------------------------- sched/wdog/wd_start.c | 73 +-------------------------------------------------- 2 files changed, 22 insertions(+), 114 deletions(-) diff --git a/include/nuttx/wdog.h b/include/nuttx/wdog.h index 2e36047e34..10c8945238 100644 --- a/include/nuttx/wdog.h +++ b/include/nuttx/wdog.h @@ -99,13 +99,6 @@ struct wdog_s clock_t expired; /* Timer associated with the absolute time */ }; -struct wdog_period_s -{ - struct wdog_s wdog; /* Watchdog */ - clock_t period; /* Period time in ticks */ - wdentry_t func; /* Wrapped function to execute when delay expires */ -}; - /**************************************************************************** * Pubic Function Prototypes ****************************************************************************/ @@ -271,10 +264,11 @@ int wd_start_abstick(FAR struct wdog_s *wdog, clock_t ticks, * ****************************************************************************/ -static inline int wd_start_realtime(FAR struct wdog_s *wdog, - FAR const struct timespec *realtime, - wdentry_t wdentry, - wdparm_t arg) +static inline_function +int wd_start_realtime(FAR struct wdog_s *wdog, + FAR const struct timespec *realtime, + wdentry_t wdentry, + wdparm_t arg) { #ifdef CONFIG_CLOCK_TIMEKEEPING irqstate_t flags; @@ -296,15 +290,15 @@ static inline int wd_start_realtime(FAR struct wdog_s *wdog, } /**************************************************************************** - * Name: wd_start_period + * Name: wd_start_next * * Description: - * This function periodically adds a watchdog timer to the active timer. + * This function restart watchdog timer based on the last expiration time. + * It can be used to implement a periodic watchdog timer. * * Input Parameters: * wdog - Pointer of the periodic watchdog. * delay - Delayed time in system ticks. - * period - Period in system ticks. * wdentry - Function to call on timeout. * arg - Parameter to pass to wdentry. * @@ -320,8 +314,19 @@ static inline int wd_start_realtime(FAR struct wdog_s *wdog, * ****************************************************************************/ -int wd_start_period(FAR struct wdog_period_s *wdog, clock_t delay, - clock_t period, wdentry_t wdentry, wdparm_t arg); +static inline_function +int wd_start_next(FAR struct wdog_s *wdog, clock_t delay, + wdentry_t wdentry, wdparm_t arg) +{ + /* Ensure delay is within the range the wdog can handle. */ + + if (delay > WDOG_MAX_DELAY) + { + return -EINVAL; + } + + return wd_start_abstick(wdog, wdog->expired + delay, wdentry, arg); +} /**************************************************************************** * Name: wd_cancel @@ -341,32 +346,6 @@ int wd_start_period(FAR struct wdog_period_s *wdog, clock_t delay, int wd_cancel(FAR struct wdog_s *wdog); -/**************************************************************************** - * Name: wd_cancel_period - * - * Description: - * This function cancels a currently running periodic watchdog timer. - * - * Input Parameters: - * wdog_period - Pointer of the periodic watchdog. - * - * Returned Value: - * Zero (OK) is returned on success; A negated errno value is returned to - * indicate the nature of any failure. - * - ****************************************************************************/ - -static inline int wd_cancel_period(FAR struct wdog_period_s *wdog_period) -{ - if (!wdog_period) - { - return -EINVAL; - } - - wdog_period->period = 0; - return wd_cancel(&wdog_period->wdog); -} - /**************************************************************************** * Name: wd_gettime * diff --git a/sched/wdog/wd_start.c b/sched/wdog/wd_start.c index 147f3c7a26..3850ccaf89 100644 --- a/sched/wdog/wd_start.c +++ b/sched/wdog/wd_start.c @@ -97,36 +97,6 @@ static unsigned int g_wdtimernested; * Private Functions ****************************************************************************/ -/**************************************************************************** - * Name: wdentry_period - * - * Description: - * Periodic watchdog timer callback function. - * - * Input Parameters: - * arg - The argument of the wdog callback. - * - * Returned Value: - * None - * - ****************************************************************************/ - -static void wdentry_period(wdparm_t arg) -{ - FAR struct wdog_period_s *wdperiod; - - wdperiod = wdparm_to_ptr(FAR struct wdog_period_s *, arg); - - wdperiod->func(wdperiod->wdog.arg); - - if (wdperiod->period != 0) - { - wd_start_abstick(&wdperiod->wdog, - wdperiod->wdog.expired + wdperiod->period, - wdentry_period, wdperiod->wdog.arg); - } -} - /**************************************************************************** * Name: wd_expiration * @@ -181,11 +151,9 @@ static inline_function void wd_expiration(clock_t ticks) /* Indicate that the watchdog is no longer active. */ func = wdog->func; + arg = wdog->arg; wdog->func = NULL; - arg = func != wdentry_period ? wdog->arg : ptr_to_wdparm( - list_container_of(wdog, struct wdog_period_s, wdog)); - /* Execute the watchdog function */ up_setpicbase(wdog->picbase); @@ -419,45 +387,6 @@ int wd_start(FAR struct wdog_s *wdog, clock_t delay, return wd_start_abstick(wdog, clock_delay2abstick(delay), wdentry, arg); } -/**************************************************************************** - * Name: wd_start_period - * - * Description: - * This function periodically adds a watchdog timer to the active timer. - * - * Input Parameters: - * wdog - Pointer of the periodic watchdog. - * delay - Delayed time in system ticks. - * period - Period in system ticks. - * wdentry - Function to call on timeout. - * arg - Parameter to pass to wdentry. - * - * NOTE: The parameter must be of type wdparm_t. - * - * Returned Value: - * Zero (OK) is returned on success; a negated errno value is return to - * indicate the nature of any failure. - * - * Assumptions: - * The watchdog routine runs in the context of the timer interrupt handler - * and is subject to all ISR restrictions. - * - ****************************************************************************/ - -int wd_start_period(FAR struct wdog_period_s *wdog, clock_t delay, - clock_t period, wdentry_t wdentry, wdparm_t arg) -{ - if (!wdog || !period || !wdentry) - { - return -EINVAL; - } - - wdog->func = wdentry; - wdog->period = period; - - return wd_start(&wdog->wdog, delay, wdentry_period, arg); -} - /**************************************************************************** * Name: wd_timer *