summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authorzms123456 <[email protected]>2024-06-20 04:20:38 +0800
committerGitHub <[email protected]>2024-06-20 04:20:38 +0800
commit59193dfeeb25a781288ef242d2dcc9e67925b064 (patch)
treebe4017572a3b03412a644a6263bf39ff03bb2bb5 /components
parent6bd6317f77b336d43df3b6f225a6eca17d821721 (diff)
[timer]add all soft timer config (#9048)
* add all soft timer * update wq * add timer test * shield LOG_D
Diffstat (limited to 'components')
-rw-r--r--components/drivers/ipc/workqueue.c35
1 files changed, 12 insertions, 23 deletions
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;
}