11
ChangeLog
11
ChangeLog
@@ -1,3 +1,14 @@
|
|||||||
|
2019-11-21 NIIBE Yutaka <gniibe@fsij.org>
|
||||||
|
|
||||||
|
* chopstx-cortex-m.c (chx_set_running): New.
|
||||||
|
(chx_init_arch): Use chx_set_running.
|
||||||
|
(preempt, svc): Remove set to running, not needed.
|
||||||
|
|
||||||
|
* chopstx-gnu-linux.c (chx_set_running): New.
|
||||||
|
(chx_init_arch, chx_request_preemption, chx_sched): Use
|
||||||
|
chx_set_running and chx_running.
|
||||||
|
(chx_sched): Bug fix of return value handling.
|
||||||
|
|
||||||
2019-11-20 NIIBE Yutaka <gniibe@fsij.org>
|
2019-11-20 NIIBE Yutaka <gniibe@fsij.org>
|
||||||
|
|
||||||
* VERSION: 1.17.
|
* VERSION: 1.17.
|
||||||
|
|||||||
@@ -36,6 +36,12 @@ chx_running (void)
|
|||||||
return running;
|
return running;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
chx_set_running (struct chx_thread *r)
|
||||||
|
{
|
||||||
|
running = r;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Data Memory Barrier. */
|
/* Data Memory Barrier. */
|
||||||
static void
|
static void
|
||||||
@@ -287,7 +293,7 @@ static void
|
|||||||
chx_init_arch (struct chx_thread *tp)
|
chx_init_arch (struct chx_thread *tp)
|
||||||
{
|
{
|
||||||
memset (&tp->tc, 0, sizeof (tp->tc));
|
memset (&tp->tc, 0, sizeof (tp->tc));
|
||||||
running = tp;
|
chx_set_running (tp);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -572,7 +578,6 @@ preempt (void)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
chx_ready_push (tp);
|
chx_ready_push (tp);
|
||||||
running = NULL;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -692,7 +697,6 @@ svc (void)
|
|||||||
if (tp->flag_sched_rr)
|
if (tp->flag_sched_rr)
|
||||||
chx_timer_dequeue (tp);
|
chx_timer_dequeue (tp);
|
||||||
chx_ready_enqueue (tp);
|
chx_ready_enqueue (tp);
|
||||||
running = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tp = chx_ready_pop ();
|
tp = chx_ready_pop ();
|
||||||
|
|||||||
@@ -40,6 +40,13 @@ chx_running (void)
|
|||||||
return running;
|
return running;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
chx_set_running (struct chx_thread *r)
|
||||||
|
{
|
||||||
|
running = r;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Data Memory Barrier. */
|
/* Data Memory Barrier. */
|
||||||
static void
|
static void
|
||||||
chx_dmb (void)
|
chx_dmb (void)
|
||||||
@@ -214,20 +221,21 @@ chx_init_arch (struct chx_thread *tp)
|
|||||||
|
|
||||||
getcontext (&tp->tc);
|
getcontext (&tp->tc);
|
||||||
|
|
||||||
running = tp;
|
chx_set_running (tp);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
chx_request_preemption (uint16_t prio)
|
chx_request_preemption (uint16_t prio)
|
||||||
{
|
{
|
||||||
struct chx_thread *tp, *tp_prev;
|
|
||||||
ucontext_t *tcp;
|
ucontext_t *tcp;
|
||||||
|
struct chx_thread *tp_prev;
|
||||||
|
struct chx_thread *tp = chx_running ();
|
||||||
|
|
||||||
if (running && (uint16_t)running->prio >= prio)
|
if (tp && (uint16_t)tp->prio >= prio)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Change the context to another thread with higher priority. */
|
/* Change the context to another thread with higher priority. */
|
||||||
tp = tp_prev = running;
|
tp_prev = tp;
|
||||||
if (tp)
|
if (tp)
|
||||||
{
|
{
|
||||||
if (tp->flag_sched_rr)
|
if (tp->flag_sched_rr)
|
||||||
@@ -240,15 +248,15 @@ chx_request_preemption (uint16_t prio)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
chx_ready_push (tp);
|
chx_ready_push (tp);
|
||||||
running = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tp = running = chx_ready_pop ();
|
tp = chx_ready_pop ();
|
||||||
if (tp)
|
if (tp)
|
||||||
tcp = &tp->tc;
|
tcp = &tp->tc;
|
||||||
else
|
else
|
||||||
tcp = &idle_tc;
|
tcp = &idle_tc;
|
||||||
|
|
||||||
|
chx_set_running (tp);
|
||||||
if (tp_prev)
|
if (tp_prev)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@@ -293,10 +301,9 @@ static uintptr_t
|
|||||||
chx_sched (uint32_t yield)
|
chx_sched (uint32_t yield)
|
||||||
{
|
{
|
||||||
struct chx_thread *tp, *tp_prev;
|
struct chx_thread *tp, *tp_prev;
|
||||||
uintptr_t v;
|
|
||||||
ucontext_t *tcp;
|
ucontext_t *tcp;
|
||||||
|
|
||||||
tp = tp_prev = running;
|
tp = tp_prev = chx_running ();
|
||||||
if (yield)
|
if (yield)
|
||||||
{
|
{
|
||||||
if (tp->flag_sched_rr)
|
if (tp->flag_sched_rr)
|
||||||
@@ -304,21 +311,18 @@ chx_sched (uint32_t yield)
|
|||||||
chx_ready_enqueue (tp);
|
chx_ready_enqueue (tp);
|
||||||
}
|
}
|
||||||
|
|
||||||
running = tp = chx_ready_pop ();
|
tp = chx_ready_pop ();
|
||||||
if (tp)
|
if (tp)
|
||||||
{
|
|
||||||
v = tp->v;
|
|
||||||
tcp = &tp->tc;
|
tcp = &tp->tc;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
v = 0;
|
|
||||||
tcp = &idle_tc;
|
tcp = &idle_tc;
|
||||||
}
|
|
||||||
|
|
||||||
|
chx_set_running (tp);
|
||||||
swapcontext (&tp_prev->tc, tcp);
|
swapcontext (&tp_prev->tc, tcp);
|
||||||
chx_cpu_sched_unlock ();
|
chx_cpu_sched_unlock ();
|
||||||
return v;
|
|
||||||
|
tp = chx_running ();
|
||||||
|
return tp->v;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __attribute__((__noreturn__))
|
static void __attribute__((__noreturn__))
|
||||||
|
|||||||
Reference in New Issue
Block a user