Merge pull request #16311 from kfessel/p-advance-prio
core/sched: keep scheduler clist internal to sched
This commit is contained in:
commit
a8e9fa6253
@ -278,6 +278,26 @@ typedef void (*sched_callback_t)(kernel_pid_t active, kernel_pid_t next);
|
|||||||
void sched_register_cb(sched_callback_t callback);
|
void sched_register_cb(sched_callback_t callback);
|
||||||
#endif /* MODULE_SCHED_CB */
|
#endif /* MODULE_SCHED_CB */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Advance a runqueue
|
||||||
|
*
|
||||||
|
* Advances the runqueue of that priority by one step to the next thread in
|
||||||
|
* that priority.
|
||||||
|
* Next time that priority is scheduled the now first thread will get activated.
|
||||||
|
* Calling this will not start the scheduler.
|
||||||
|
*
|
||||||
|
* @warning This API is not intended for out of tree users.
|
||||||
|
* Breaking API changes will be done without notice and
|
||||||
|
* without deprecation. Consider yourself warned!
|
||||||
|
*
|
||||||
|
* @param prio The priority of the runqueue to advance
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static inline void sched_runq_advance(uint8_t prio)
|
||||||
|
{
|
||||||
|
clist_lpoprpush(&sched_runqueues[prio]);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -143,7 +143,7 @@ void thread_yield(void)
|
|||||||
thread_t *me = thread_get_active();
|
thread_t *me = thread_get_active();
|
||||||
|
|
||||||
if (me->status >= STATUS_ON_RUNQUEUE) {
|
if (me->status >= STATUS_ON_RUNQUEUE) {
|
||||||
clist_lpoprpush(&sched_runqueues[me->priority]);
|
sched_runq_advance(me->priority);
|
||||||
}
|
}
|
||||||
irq_restore(old_state);
|
irq_restore(old_state);
|
||||||
|
|
||||||
|
|||||||
@ -81,12 +81,6 @@ void * t1_t2_realloc_func(void *arg)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void evil_schedule_hack_dont_do_this_at_home(uint8_t prio)
|
|
||||||
{
|
|
||||||
extern clist_node_t sched_runqueues[SCHED_PRIO_LEVELS];
|
|
||||||
clist_lpoprpush(&sched_runqueues[prio]);
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
kernel_pid_t t1, t2;
|
kernel_pid_t t1, t2;
|
||||||
@ -128,7 +122,7 @@ int main(void)
|
|||||||
/* shuffle t1 and t2 in their run queue. This should eventually hit
|
/* shuffle t1 and t2 in their run queue. This should eventually hit
|
||||||
* during a call to malloc() or free() and disclose any missing
|
* during a call to malloc() or free() and disclose any missing
|
||||||
* guards */
|
* guards */
|
||||||
evil_schedule_hack_dont_do_this_at_home(THREAD_PRIORITY_MAIN + 1);
|
sched_runq_advance(THREAD_PRIORITY_MAIN + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Don't keep threads spinning */
|
/* Don't keep threads spinning */
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user