Changeset 156b6406 in mainline for uspace/lib/urcu/rcu.c


Ignore:
Timestamp:
2012-12-04T16:42:06Z (12 years ago)
Author:
Adam Hraska <adam.hraska+hos@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
b188002
Parents:
b7acf38
Message:

Differentiated futexes when used with mutex semantics from those with semaphore semantics.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/urcu/rcu.c

    rb7acf38 r156b6406  
    168168        assert(!fibril_rcu.registered);
    169169       
    170         _futex_down(&rcu.list_futex);
     170        futex_down(&rcu.list_futex);
    171171        list_append(&fibril_rcu.link, &rcu.fibrils_list);
    172         _futex_up(&rcu.list_futex);
     172        futex_up(&rcu.list_futex);
    173173       
    174174        fibril_rcu.registered = true;
     
    193193        fibril_rcu.nesting_cnt = 0;
    194194       
    195         _futex_down(&rcu.list_futex);
     195        futex_down(&rcu.list_futex);
    196196        list_remove(&fibril_rcu.link);
    197         _futex_up(&rcu.list_futex);
     197        futex_up(&rcu.list_futex);
    198198
    199199        fibril_rcu.registered = false;
     
    330330static void wait_for_readers(size_t reader_group, blocking_mode_t blocking_mode)
    331331{
    332         _futex_down(&rcu.list_futex);
     332        futex_down(&rcu.list_futex);
    333333       
    334334        list_t quiescent_fibrils;
     
    341341                       
    342342                        if (is_preexisting_reader(fib, reader_group)) {
    343                                 _futex_up(&rcu.list_futex);
     343                                futex_up(&rcu.list_futex);
    344344                                sync_sleep(blocking_mode);
    345                                 _futex_down(&rcu.list_futex);
     345                                futex_down(&rcu.list_futex);
    346346                                /* Break to while loop. */
    347347                                break;
     
    354354       
    355355        list_concat(&rcu.fibrils_list, &quiescent_fibrils);
    356         _futex_up(&rcu.list_futex);
     356        futex_up(&rcu.list_futex);
    357357}
    358358
    359359static void lock_sync(blocking_mode_t blocking_mode)
    360360{
    361         _futex_down(&rcu.sync_lock.futex);
     361        futex_down(&rcu.sync_lock.futex);
    362362        if (rcu.sync_lock.locked) {
    363363                if (blocking_mode == BM_BLOCK_FIBRIL) {
     
    369369                        do {
    370370                                blocked_fib.is_ready = false;
    371                                 _futex_up(&rcu.sync_lock.futex);
     371                                futex_up(&rcu.sync_lock.futex);
    372372                                fibril_switch(FIBRIL_TO_MANAGER);
    373                                 _futex_down(&rcu.sync_lock.futex);
     373                                futex_down(&rcu.sync_lock.futex);
    374374                        } while (rcu.sync_lock.locked);
    375375                       
     
    379379                        assert(blocking_mode == BM_BLOCK_THREAD);
    380380                        rcu.sync_lock.blocked_thread_cnt++;
    381                         _futex_up(&rcu.sync_lock.futex);
    382                         _futex_down(&rcu.sync_lock.futex_blocking_threads);
     381                        futex_up(&rcu.sync_lock.futex);
     382                        futex_down(&rcu.sync_lock.futex_blocking_threads);
    383383                }
    384384        } else {
     
    397397        if (0 < rcu.sync_lock.blocked_thread_cnt) {
    398398                --rcu.sync_lock.blocked_thread_cnt;
    399                 _futex_up(&rcu.sync_lock.futex_blocking_threads);
     399                futex_up(&rcu.sync_lock.futex_blocking_threads);
    400400        } else {
    401401                /* Unlock but wake up any fibrils waiting for the lock. */
     
    412412               
    413413                rcu.sync_lock.locked = false;
    414                 _futex_up(&rcu.sync_lock.futex);
     414                futex_up(&rcu.sync_lock.futex);
    415415        }
    416416}
     
    423423         * but keep sync locked.
    424424         */
    425         _futex_up(&rcu.sync_lock.futex);
     425        futex_up(&rcu.sync_lock.futex);
    426426
    427427        if (blocking_mode == BM_BLOCK_FIBRIL) {
     
    431431        }
    432432               
    433         _futex_down(&rcu.sync_lock.futex);
     433        futex_down(&rcu.sync_lock.futex);
    434434}
    435435
Note: See TracChangeset for help on using the changeset viewer.