]> pd.if.org Git - liblfds/blob - liblfds/liblfds7.1.0/liblfds710/src/lfds710_list_addonly_singlylinked_unordered/lfds710_list_addonly_singlylinked_unordered_init.c
Initial import (all versions, including the new 7.1.0)
[liblfds] / liblfds / liblfds7.1.0 / liblfds710 / src / lfds710_list_addonly_singlylinked_unordered / lfds710_list_addonly_singlylinked_unordered_init.c
1 /***** includes *****/
2 #include "lfds710_list_addonly_singlylinked_unordered_internal.h"
3
4
5
6
7
8 /****************************************************************************/
9 void lfds710_list_asu_init_valid_on_current_logical_core( struct lfds710_list_asu_state *lasus,
10                                                           void *user_state )
11 {
12   LFDS710_PAL_ASSERT( lasus != NULL );
13   LFDS710_PAL_ASSERT( (lfds710_pal_uint_t) &lasus->dummy_element % LFDS710_PAL_ATOMIC_ISOLATION_IN_BYTES == 0 );
14   LFDS710_PAL_ASSERT( (lfds710_pal_uint_t) &lasus->end % LFDS710_PAL_ATOMIC_ISOLATION_IN_BYTES == 0 );
15   LFDS710_PAL_ASSERT( (lfds710_pal_uint_t) &lasus->start % LFDS710_PAL_ATOMIC_ISOLATION_IN_BYTES == 0 );
16   // TRD : user_state can be NULL
17
18   // TRD : dummy start element - makes code easier when you can always use ->next
19   lasus->start = lasus->end = &lasus->dummy_element;
20
21   lasus->start->next = NULL;
22   lasus->start->value = NULL;
23   lasus->user_state = user_state;
24
25   lfds710_misc_internal_backoff_init( &lasus->after_backoff );
26   lfds710_misc_internal_backoff_init( &lasus->start_backoff );
27   lfds710_misc_internal_backoff_init( &lasus->end_backoff );
28
29   LFDS710_MISC_BARRIER_STORE;
30
31   lfds710_misc_force_store();
32
33   return;
34 }
35