diff --git a/arch/arm/core/thread_abort.c b/arch/arm/core/thread_abort.c index 812bc282821..1e54c76c786 100644 --- a/arch/arm/core/thread_abort.c +++ b/arch/arm/core/thread_abort.c @@ -49,5 +49,5 @@ void _impl_k_thread_abort(k_tid_t thread) } /* The abort handler might have altered the ready queue. */ - _reschedule_noyield(key); + _reschedule(key); } diff --git a/arch/posix/core/posix_core.c b/arch/posix/core/posix_core.c index 812d5e1ebad..3f29743d14e 100644 --- a/arch/posix/core/posix_core.c +++ b/arch/posix/core/posix_core.c @@ -532,7 +532,7 @@ void _impl_k_thread_abort(k_tid_t thread) } /* The abort handler might have altered the ready queue. */ - _reschedule_noyield(key); + _reschedule(key); } #endif diff --git a/kernel/include/ksched.h b/kernel/include/ksched.h index 4586ff95238..07d3bba5585 100644 --- a/kernel/include/ksched.h +++ b/kernel/include/ksched.h @@ -21,8 +21,7 @@ extern k_tid_t const _idle_thread; extern void _add_thread_to_ready_q(struct k_thread *thread); extern void _remove_thread_from_ready_q(struct k_thread *thread); -extern int _reschedule_noyield(int key); -extern int _reschedule_yield(int key); +extern int _reschedule(int key); extern void k_sched_unlock(void); extern void _pend_thread(struct k_thread *thread, _wait_q_t *wait_q, s32_t timeout); diff --git a/kernel/mailbox.c b/kernel/mailbox.c index 29f35ad52fa..c0723d91463 100644 --- a/kernel/mailbox.c +++ b/kernel/mailbox.c @@ -218,7 +218,7 @@ static void mbox_message_dispose(struct k_mbox_msg *rx_msg) _set_thread_return_value(sending_thread, 0); _mark_thread_as_not_pending(sending_thread); _ready_thread(sending_thread); - _reschedule_noyield(key); + _reschedule(key); } /** @@ -275,7 +275,7 @@ static int mbox_message_put(struct k_mbox *mbox, struct k_mbox_msg *tx_msg, * until the receiver consumes the message */ if (sending_thread->base.thread_state & _THREAD_DUMMY) { - _reschedule_noyield(key); + _reschedule(key); return 0; } #endif diff --git a/kernel/mem_slab.c b/kernel/mem_slab.c index c930e376204..b51315a5ec1 100644 --- a/kernel/mem_slab.c +++ b/kernel/mem_slab.c @@ -127,5 +127,5 @@ void k_mem_slab_free(struct k_mem_slab *slab, void **mem) slab->num_used--; } - _reschedule_noyield(key); + _reschedule(key); } diff --git a/kernel/mempool.c b/kernel/mempool.c index 5185d1310ac..d57205cefa8 100644 --- a/kernel/mempool.c +++ b/kernel/mempool.c @@ -109,7 +109,7 @@ void k_mem_pool_free_id(struct k_mem_block_id *id) } if (need_sched && !_is_in_isr()) { - _reschedule_noyield(key); + _reschedule(key); } else { irq_unlock(key); } diff --git a/kernel/msg_q.c b/kernel/msg_q.c index a544ab1cf8a..f1b9f533db0 100644 --- a/kernel/msg_q.c +++ b/kernel/msg_q.c @@ -94,7 +94,7 @@ int _impl_k_msgq_put(struct k_msgq *q, void *data, s32_t timeout) _set_thread_return_value(pending_thread, 0); _abort_thread_timeout(pending_thread); _ready_thread(pending_thread); - _reschedule_noyield(key); + _reschedule(key); return 0; } else { /* put message in queue */ @@ -184,7 +184,7 @@ int _impl_k_msgq_get(struct k_msgq *q, void *data, s32_t timeout) _set_thread_return_value(pending_thread, 0); _abort_thread_timeout(pending_thread); _ready_thread(pending_thread); - _reschedule_noyield(key); + _reschedule(key); return 0; } result = 0; @@ -229,7 +229,7 @@ void _impl_k_msgq_purge(struct k_msgq *q) q->used_msgs = 0; q->read_ptr = q->write_ptr; - _reschedule_noyield(key); + _reschedule(key); } #ifdef CONFIG_USERSPACE diff --git a/kernel/pipes.c b/kernel/pipes.c index 058e8af512c..d32190973f3 100644 --- a/kernel/pipes.c +++ b/kernel/pipes.c @@ -510,7 +510,7 @@ int _k_pipe_put_internal(struct k_pipe *pipe, struct k_pipe_async *async_desc, _sched_unlock_no_reschedule(); _pend_thread((struct k_thread *) &async_desc->thread, &pipe->wait_q.writers, K_FOREVER); - _reschedule_noyield(key); + _reschedule(key); return 0; } #endif diff --git a/kernel/poll.c b/kernel/poll.c index 4f39551f99f..20a5825e980 100644 --- a/kernel/poll.c +++ b/kernel/poll.c @@ -333,6 +333,6 @@ int k_poll_signal(struct k_poll_signal *signal, int result) int rc = signal_poll_event(poll_event, K_POLL_STATE_SIGNALED); - _reschedule_noyield(key); + _reschedule(key); return rc; } diff --git a/kernel/queue.c b/kernel/queue.c index ea2243c08f2..e8ee3305acb 100644 --- a/kernel/queue.c +++ b/kernel/queue.c @@ -89,7 +89,7 @@ void k_queue_cancel_wait(struct k_queue *queue) handle_poll_events(queue, K_POLL_STATE_NOT_READY); #endif /* !CONFIG_POLL */ - _reschedule_noyield(key); + _reschedule(key); } void k_queue_insert(struct k_queue *queue, void *prev, void *data) @@ -102,7 +102,7 @@ void k_queue_insert(struct k_queue *queue, void *prev, void *data) if (first_pending_thread) { prepare_thread_to_run(first_pending_thread, data); - _reschedule_noyield(key); + _reschedule(key); return; } #endif /* !CONFIG_POLL */ @@ -113,7 +113,7 @@ void k_queue_insert(struct k_queue *queue, void *prev, void *data) handle_poll_events(queue, K_POLL_STATE_DATA_AVAILABLE); #endif /* CONFIG_POLL */ - _reschedule_noyield(key); + _reschedule(key); } void k_queue_append(struct k_queue *queue, void *data) @@ -148,7 +148,7 @@ void k_queue_append_list(struct k_queue *queue, void *head, void *tail) handle_poll_events(queue, K_POLL_STATE_DATA_AVAILABLE); #endif /* !CONFIG_POLL */ - _reschedule_noyield(key); + _reschedule(key); } void k_queue_merge_slist(struct k_queue *queue, sys_slist_t *list) diff --git a/kernel/sched.c b/kernel/sched.c index 65f1376a8e5..41f30124762 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -140,12 +140,12 @@ void _remove_thread_from_ready_q(struct k_thread *thread) * Does not swap away from a thread at a cooperative (unpreemptible) * priority unless "yield" is true. */ -static int resched(int key, int yield) +int _reschedule(int key) { K_DEBUG("rescheduling threads\n"); if (!_is_in_isr() && - (yield || _is_preempt(_current)) && + _is_preempt(_current) && _is_prio_higher(_get_highest_ready_prio(), _current->base.prio)) { K_DEBUG("context-switching out %p\n", _current); return _Swap(key); @@ -155,16 +155,6 @@ static int resched(int key, int yield) } } -int _reschedule_noyield(int key) -{ - return resched(key, 0); -} - -int _reschedule_yield(int key) -{ - return resched(key, 1); -} - void k_sched_lock(void) { _sched_lock(); @@ -185,7 +175,7 @@ void k_sched_unlock(void) K_DEBUG("scheduler unlocked (%p:%d)\n", _current, _current->base.sched_locked); - _reschedule_noyield(key); + _reschedule(key); #endif } @@ -274,7 +264,7 @@ void _impl_k_thread_priority_set(k_tid_t tid, int prio) int key = irq_lock(); _thread_priority_set(thread, prio); - _reschedule_noyield(key); + _reschedule(key); } #ifdef CONFIG_USERSPACE @@ -408,7 +398,7 @@ void _impl_k_wakeup(k_tid_t thread) if (_is_in_isr()) { irq_unlock(key); } else { - _reschedule_noyield(key); + _reschedule(key); } } diff --git a/kernel/sem.c b/kernel/sem.c index 68ac94339dd..07148c1943a 100644 --- a/kernel/sem.c +++ b/kernel/sem.c @@ -135,7 +135,7 @@ void _impl_k_sem_give(struct k_sem *sem) unsigned int key = irq_lock(); do_sem_give(sem); - _reschedule_noyield(key); + _reschedule(key); } #ifdef CONFIG_USERSPACE diff --git a/kernel/thread.c b/kernel/thread.c index 69d870961a2..80649b9ac0e 100644 --- a/kernel/thread.c +++ b/kernel/thread.c @@ -228,7 +228,7 @@ void _impl_k_thread_start(struct k_thread *thread) _mark_thread_as_started(thread); _ready_thread(thread); - _reschedule_noyield(key); + _reschedule(key); } #ifdef CONFIG_USERSPACE @@ -484,7 +484,7 @@ void _impl_k_thread_resume(struct k_thread *thread) _k_thread_single_resume(thread); - _reschedule_noyield(key); + _reschedule(key); } #ifdef CONFIG_USERSPACE diff --git a/kernel/thread_abort.c b/kernel/thread_abort.c index b0b9f317603..85fea8aa88d 100644 --- a/kernel/thread_abort.c +++ b/kernel/thread_abort.c @@ -46,7 +46,7 @@ void _impl_k_thread_abort(k_tid_t thread) } /* The abort handler might have altered the ready queue. */ - _reschedule_noyield(key); + _reschedule(key); } } #endif diff --git a/kernel/timer.c b/kernel/timer.c index b46611f71b0..4cc7b741638 100644 --- a/kernel/timer.c +++ b/kernel/timer.c @@ -172,7 +172,7 @@ void _impl_k_timer_stop(struct k_timer *timer) if (_is_in_isr()) { irq_unlock(key); } else { - _reschedule_noyield(key); + _reschedule(key); } } diff --git a/lib/posix/pthread_barrier.c b/lib/posix/pthread_barrier.c index 5b3b02e66f9..920c3c7eecf 100644 --- a/lib/posix/pthread_barrier.c +++ b/lib/posix/pthread_barrier.c @@ -23,7 +23,7 @@ int pthread_barrier_wait(pthread_barrier_t *b) while (!sys_dlist_is_empty(&b->wait_q)) { ready_one_thread(&b->wait_q); } - return _reschedule_noyield(key); + return _reschedule(key); } else { return _pend_current_thread(key, &b->wait_q, K_FOREVER); }