aboutsummaryrefslogtreecommitdiff
path: root/chopstx.c
diff options
context:
space:
mode:
authorNIIBE Yutaka <gniibe@fsij.org>2016-05-18 16:52:00 +0900
committerNIIBE Yutaka <gniibe@fsij.org>2016-05-18 16:52:00 +0900
commitdb413813b6cd8a0891805a1111824ffd4d5a3737 (patch)
treec69366352fc31f9b7bc8953bed056a579caafae9 /chopstx.c
parent7f009dbb5d44ae67d7bb3529973f2eee2e186612 (diff)
eventflag rewrite
Diffstat (limited to 'chopstx.c')
-rw-r--r--chopstx.c65
1 files changed, 39 insertions, 26 deletions
diff --git a/chopstx.c b/chopstx.c
index 2ed38f4..baa0edd 100644
--- a/chopstx.c
+++ b/chopstx.c
@@ -333,6 +333,11 @@ struct chx_thread { /* inherits PQ */
struct chx_cleanup *clp;
};
+struct chx_poll_head {
+ uint16_t type;
+ uint16_t ready;
+};
+
static void
chx_cpu_sched_lock (void)
@@ -692,27 +697,6 @@ chx_init (struct chx_thread *tp)
}
-/**
- * chopstx_main_init - initialize main thread
- * @prio: priority
- *
- * Initialize main thread with @prio.
- * The thread main is created with priority CHX_PRIO_MAIN_INIT,
- * and it runs with that priority until this routine will is called.
- */
-void
-chopstx_main_init (chopstx_prio_t prio)
-{
- struct chx_thread *tp = (struct chx_thread *)chopstx_main;
-
- tp->prio_orig = prio;
-
- if (prio >= CHOPSTX_PRIO_INHIBIT_PREEMPTION)
- chx_cpu_sched_lock ();
-
- tp->prio = prio;
-}
-
static void
chx_request_preemption (uint16_t prio)
@@ -1137,6 +1121,8 @@ chx_snooze (uint32_t state, uint32_t *usec_p)
*
* Sleep for micro seconds, specified by @var.
* Another thread can clear @var to stop the caller going into sleep.
+ *
+ * This function is DEPRECATED. Please use chopstx_poll.
*/
void
chopstx_usec_wait_var (uint32_t *var)
@@ -1524,13 +1510,13 @@ chopstx_cleanup_pop (int execute)
/**
- * chopstx_exit - Terminate the execution of thread
+ * chopstx_exit - Terminate the execution of running thread
* @retval: Return value (to be caught by a joining thread)
*
- * Calling this function terminates the execution of thread, after
- * calling clean up functions. If the calling thread still holds
- * mutexes, they will be released. If the calling thread claiming
- * IRQ, it will be released, too. This function never returns.
+ * Calling this function terminates the execution of running thread,
+ * after calling clean up functions. If the calling thread still
+ * holds mutexes, they will be released. This function never
+ * returns.
*/
void
chopstx_exit (void *retval)
@@ -1667,6 +1653,9 @@ chx_join_hook (struct chx_px *px, struct chx_poll_head *pd)
*
* Canceling the timer, wake up the sleeping thread.
* No return value.
+ *
+ * This function is DEPRECATED. Please use chopstx_cond_signal,
+ * where sleeping process calls chopstx_poll.
*/
void
chopstx_wakeup_usec_wait (chopstx_t thd)
@@ -1909,6 +1898,30 @@ chopstx_poll (uint32_t *usec_p, int n, ...)
return counter;
}
+
+
+/**
+ * chopstx_setpriority - change the schedule priority of running thread
+ * @prio: priority
+ *
+ * Change the schedule priority with @prio.
+ *
+ * In general, it is not recommended to use this function because
+ * dynamically changing schedule priorities complicates the system.
+ * Only a possible valid usage of this function is in the main thread
+ * which starts its execution with priority of CHX_PRIO_MAIN_INIT, and
+ * let it change its priority after initialization of other threads.
+ */
+void
+chopstx_setpriority (chopstx_prio_t prio)
+{
+ struct chx_thread *tp = running;
+
+ tp->prio_orig = prio;
+ if (prio >= CHOPSTX_PRIO_INHIBIT_PREEMPTION)
+ chx_cpu_sched_lock ();
+ tp->prio = prio;
+}
/*
* Lower layer architecture specific exception handling entries.