From 59193dfeeb25a781288ef242d2dcc9e67925b064 Mon Sep 17 00:00:00 2001 From: zms123456 <85141075+zmshahaha@users.noreply.github.com> Date: Thu, 20 Jun 2024 04:20:38 +0800 Subject: [timer]add all soft timer config (#9048) * add all soft timer * update wq * add timer test * shield LOG_D --- components/drivers/ipc/workqueue.c | 35 ++++++++++++----------------------- 1 file changed, 12 insertions(+), 23 deletions(-) (limited to 'components') diff --git a/components/drivers/ipc/workqueue.c b/components/drivers/ipc/workqueue.c index 6862a35843..fb3657b192 100644 --- a/components/drivers/ipc/workqueue.c +++ b/components/drivers/ipc/workqueue.c @@ -94,7 +94,7 @@ static rt_err_t _workqueue_submit_work(struct rt_workqueue *queue, struct rt_work *work, rt_tick_t ticks) { rt_base_t level; - rt_err_t err; + rt_err_t err = RT_EOK; level = rt_spin_lock_irqsave(&(queue->spinlock)); @@ -113,13 +113,7 @@ static rt_err_t _workqueue_submit_work(struct rt_workqueue *queue, { /* resume work thread, and do a re-schedule if succeed */ rt_thread_resume(queue->work_thread); - rt_spin_unlock_irqrestore(&(queue->spinlock), level); } - else - { - rt_spin_unlock_irqrestore(&(queue->spinlock), level); - } - return RT_EOK; } else if (ticks < RT_TICK_MAX / 2) { @@ -139,12 +133,14 @@ static rt_err_t _workqueue_submit_work(struct rt_workqueue *queue, rt_list_insert_after(queue->delayed_list.prev, &(work->list)); err = rt_timer_start(&(work->timer)); - rt_spin_unlock_irqrestore(&(queue->spinlock), level); - - return err; } + else + { + err = - RT_ERROR; + } + rt_spin_unlock_irqrestore(&(queue->spinlock), level); - return -RT_ERROR; + return err; } static rt_err_t _workqueue_cancel_work(struct rt_workqueue *queue, struct rt_work *work) @@ -160,14 +156,14 @@ static rt_err_t _workqueue_cancel_work(struct rt_workqueue *queue, struct rt_wor { if ((err = rt_timer_stop(&(work->timer))) != RT_EOK) { - rt_spin_unlock_irqrestore(&(queue->spinlock), level); - return err; + goto exit; } rt_timer_detach(&(work->timer)); work->flags &= ~RT_WORK_STATE_SUBMITTING; } err = queue->work_current != work ? RT_EOK : -RT_EBUSY; work->workqueue = RT_NULL; +exit: rt_spin_unlock_irqrestore(&(queue->spinlock), level); return err; } @@ -200,12 +196,9 @@ static void _delayed_work_timeout_handler(void *parameter) { /* resume work thread, and do a re-schedule if succeed */ rt_thread_resume(queue->work_thread); - rt_spin_unlock_irqrestore(&(queue->spinlock), level); - } - else - { - rt_spin_unlock_irqrestore(&(queue->spinlock), level); } + + rt_spin_unlock_irqrestore(&(queue->spinlock), level); } /** @@ -358,13 +351,9 @@ rt_err_t rt_workqueue_urgent_work(struct rt_workqueue *queue, struct rt_work *wo { /* resume work thread, and do a re-schedule if succeed */ rt_thread_resume(queue->work_thread); - rt_spin_unlock_irqrestore(&(queue->spinlock), level); - } - else - { - rt_spin_unlock_irqrestore(&(queue->spinlock), level); } + rt_spin_unlock_irqrestore(&(queue->spinlock), level); return RT_EOK; } -- cgit v1.3.1