static inline
void uk_sched_thread_switch(struct uk_thread *next)
{
- struct uk_thread *prev = __uk_sched_thread_current;
+ struct uk_thread *prev;
+
+ prev = ukplat_per_lcpu_current(__uk_sched_thread_current);
UK_ASSERT(prev);
- __uk_sched_thread_current = next;
+ ukplat_per_lcpu_current(__uk_sched_thread_current) = next;
+
prev->tlsp = ukplat_tlsp_get();
if (prev->ectx)
ukarch_ectx_store(prev->ectx);
#include <uk/arch/lcpu.h>
#include <uk/arch/time.h>
#include <uk/arch/ctx.h>
+#include <uk/plat/lcpu.h>
#include <uk/plat/tls.h>
#include <uk/wait_types.h>
#include <uk/list.h>
uk_sched_thread_exit()
/* managed by sched.c */
-extern struct uk_thread *__uk_sched_thread_current;
+extern UKPLAT_PER_LCPU_DEFINE(struct uk_thread *, __uk_sched_thread_current);
static inline
struct uk_thread *uk_thread_current(void)
{
- return __uk_sched_thread_current;
+ return ukplat_per_lcpu_current(__uk_sched_thread_current);
}
/*
struct uk_sched *uk_sched_head;
-/* FIXME: Define per CPU (CPU-local variable declaration needed) */
-struct uk_thread *__uk_sched_thread_current;
+UKPLAT_PER_LCPU_DEFINE(struct uk_thread *, __uk_sched_thread_current);
int uk_sched_register(struct uk_sched *s)
{
uk_thread_set_runnable(main_thread);
/* Set main_thread as current scheduled thread */
- __uk_sched_thread_current = main_thread;
+ ukplat_per_lcpu_current(__uk_sched_thread_current) = main_thread;
/* Add main to the scheduler's thread list */
UK_TAILQ_INSERT_TAIL(&s->thread_list, main_thread, thread_list);
return 0;
err_unset_thread_current:
- __uk_sched_thread_current = NULL;
+ ukplat_per_lcpu_current(__uk_sched_thread_current) = NULL;
uk_thread_release(main_thread);
err_out:
return ret;