]> xenbits.xensource.com Git - people/liuw/rumprun.git/commitdiff
Fix sched_yield() to actually yield.
authorAntti Kantee <pooka@iki.fi>
Mon, 20 Apr 2015 10:24:25 +0000 (10:24 +0000)
committerAntti Kantee <pooka@iki.fi>
Mon, 20 Apr 2015 10:24:25 +0000 (10:24 +0000)
include/bmk-core/sched.h
lib/librumprun_base/_lwp.c
platform/baremetal/sched.c
platform/xen/xen/sched.c

index 9de8e6adb97ec281a2a3801b58f50b4f721e5ed4..6b19093dce002122131231bcbc3e999b600ab36d 100644 (file)
@@ -40,6 +40,7 @@ struct bmk_thread;
 
 void   bmk_sched_init(void);
 void   bmk_sched(void);
+void   bmk_sched_yield(void);
 
 struct bmk_thread *bmk_sched_create(const char *, void *, int,
                                    void (*)(void *), void *,
index ccb5688c242bdbbb9e6ad71649155ae3b5599f53..24526268c8c1f8caf563cf4171a8932dba9ea055 100644 (file)
@@ -319,7 +319,7 @@ int
 _sys_sched_yield(void)
 {
 
-       bmk_sched();
+       bmk_sched_yield();
        return 0;
 }
 __weak_alias(sched_yield,_sys_sched_yield);
index 84523eb29c7fe0f67baca38376081f71c9926a83..7d54c7529b09436a5ca58ef56c8ead9b1171273b 100644 (file)
@@ -461,3 +461,13 @@ bmk_sched_gettls(struct bmk_thread *thread, unsigned int which)
        }
        return thread->bt_tls[which];
 }
+
+void
+bmk_sched_yield(void)
+{
+       struct bmk_thread *current = bmk_sched_current();
+
+       TAILQ_REMOVE(&threads, current, bt_entries);
+       TAILQ_INSERT_TAIL(&threads, current, bt_entries);
+       bmk_sched();
+}
index 217de5a7119136c6e07748404814905ec782a51b..8d8e8e79816d65c325804996d20e43d139c1ac9a 100644 (file)
@@ -512,3 +512,13 @@ bmk_sched_gettls(struct bmk_thread *thread, unsigned int which)
        }
        return thread->bt_tls[which];
 }
+
+void
+bmk_sched_yield(void)
+{
+       struct bmk_thread *current = bmk_sched_current();
+
+       TAILQ_REMOVE(&threads, current, bt_entries);
+       TAILQ_INSERT_TAIL(&threads, current, bt_entries);
+       bmk_sched();
+}