Changeset 4ec9ea41 in mainline for kernel/test/synch/rcu1.c


Ignore:
Timestamp:
2012-07-27T13:37:31Z (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:
14c9aa6
Parents:
2bcf6c6
Message:

rcu: Added rcu_barrier() that waits for all outstanding rcu_calls to complete.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/test/synch/rcu1.c

    r2bcf6c6 r4ec9ea41  
    806806
    807807/*-------------------------------------------------------------------*/
     808typedef struct {
     809        rcu_item_t rcu_item;
     810        atomic_t done;
     811} barrier_t;
     812
     813static void barrier_callback(rcu_item_t *item)
     814{
     815        barrier_t *b = member_to_inst(item, barrier_t, rcu_item);
     816        atomic_set(&b->done, 1);
     817}
     818
     819static bool do_barrier(void)
     820{
     821        TPRINTF("\nrcu_barrier: Wait for outstanding rcu callbacks to complete\n");
     822       
     823        barrier_t *barrier = malloc(sizeof(barrier_t), FRAME_ATOMIC);
     824       
     825        if (!barrier) {
     826                TPRINTF("[out-of-mem]\n");
     827                return false;
     828        }
     829       
     830        atomic_set(&barrier->done, 0);
     831       
     832        rcu_call(&barrier->rcu_item, barrier_callback);
     833        rcu_barrier();
     834       
     835        if (1 == atomic_get(&barrier->done)) {
     836                free(barrier);
     837                return true;
     838        } else {
     839                TPRINTF("rcu_barrier() exited prematurely.\n");
     840                /* Leak some mem. */
     841                return false;
     842        }
     843}
     844
     845/*-------------------------------------------------------------------*/
    808846
    809847typedef struct {
     
    9691007                { 1, do_reader_preempt, "do_reader_preempt" },
    9701008                { 1, do_synch, "do_synch" },
     1009                { 1, do_barrier, "do_barrier" },
    9711010                { 1, do_reader_exit, "do_reader_exit" },
    9721011                { 1, do_nop_readers, "do_nop_readers" },
Note: See TracChangeset for help on using the changeset viewer.