Changeset 508b0df1 in mainline for uspace/lib/c/generic/thread/fibril.c
- Timestamp:
- 2018-09-06T20:21:52Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 78de83de, fc10e1b
- Parents:
- 4621d23
- git-author:
- Jiří Zárevúcky <jiri.zarevucky@…> (2018-08-13 03:53:39)
- git-committer:
- Jiří Zárevúcky <jiri.zarevucky@…> (2018-09-06 20:21:52)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/thread/fibril.c
r4621d23 r508b0df1 88 88 /* This futex serializes access to global data. */ 89 89 static futex_t fibril_futex = FUTEX_INITIALIZER; 90 static futex_t ready_semaphore = FUTEX_INITIALIZE(0);90 static futex_t ready_semaphore; 91 91 static long ready_st_count; 92 92 … … 117 117 } 118 118 119 static inline long _ready_count(void)120 {121 /*122 * The number of available tokens is always equal to the number123 * of fibrils in the ready list + the number of free IPC buffer124 * buckets.125 */126 127 if (multithreaded)128 return atomic_get(&ready_semaphore.val);129 130 _ready_debug_check();131 return ready_st_count;132 }133 134 119 static inline void _ready_up(void) 135 120 { … … 152 137 } 153 138 154 static atomic_ t threads_in_ipc_wait = { 0 };139 static atomic_int threads_in_ipc_wait; 155 140 156 141 /** Function that spans the whole life-cycle of a fibril. … … 303 288 fibril_t *f = list_pop(&ready_list, fibril_t, link); 304 289 if (!f) 305 atomic_inc(&threads_in_ipc_wait); 290 atomic_fetch_add_explicit(&threads_in_ipc_wait, 1, 291 memory_order_relaxed); 306 292 if (!locked) 307 293 futex_unlock(&fibril_futex); … … 317 303 rc = _ipc_wait(&call, expires); 318 304 319 atomic_dec(&threads_in_ipc_wait); 305 atomic_fetch_sub_explicit(&threads_in_ipc_wait, 1, 306 memory_order_relaxed); 320 307 321 308 if (rc != EOK && rc != ENOENT) { … … 386 373 _ready_up(); 387 374 388 if (atomic_ get(&threads_in_ipc_wait)) {375 if (atomic_load_explicit(&threads_in_ipc_wait, memory_order_relaxed)) { 389 376 DPRINTF("Poking.\n"); 390 377 /* Wakeup one thread sleeping in SYS_IPC_WAIT. */ … … 811 798 if (!multithreaded) { 812 799 _ready_debug_check(); 813 atomic_set(&ready_semaphore.val, ready_st_count);800 futex_initialize(&ready_semaphore, ready_st_count); 814 801 multithreaded = true; 815 802 }
Note:
See TracChangeset
for help on using the changeset viewer.