Changeset 4ec9ea41 in mainline for kernel/test/synch/rcu1.c
- Timestamp:
- 2012-07-27T13:37:31Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 14c9aa6
- Parents:
- 2bcf6c6
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/test/synch/rcu1.c
r2bcf6c6 r4ec9ea41 806 806 807 807 /*-------------------------------------------------------------------*/ 808 typedef struct { 809 rcu_item_t rcu_item; 810 atomic_t done; 811 } barrier_t; 812 813 static 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 819 static 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 /*-------------------------------------------------------------------*/ 808 846 809 847 typedef struct { … … 969 1007 { 1, do_reader_preempt, "do_reader_preempt" }, 970 1008 { 1, do_synch, "do_synch" }, 1009 { 1, do_barrier, "do_barrier" }, 971 1010 { 1, do_reader_exit, "do_reader_exit" }, 972 1011 { 1, do_nop_readers, "do_nop_readers" },
Note:
See TracChangeset
for help on using the changeset viewer.