]> pd.if.org Git - liblfds/blob - liblfds/liblfds7.0.0/liblfds700/src/lfds700_queue/lfds700_queue_init.c
Initial import (all versions, including the new 7.1.0)
[liblfds] / liblfds / liblfds7.0.0 / liblfds700 / src / lfds700_queue / lfds700_queue_init.c
1 /***** includes *****/
2 #include "lfds700_queue_internal.h"
3
4
5
6
7
8 /****************************************************************************/
9 void lfds700_queue_init_valid_on_current_logical_core( struct lfds700_queue_state *qs, struct lfds700_queue_element *qe_dummy, struct lfds700_misc_prng_state *ps, void *user_state )
10 {
11   LFDS700_PAL_ASSERT( qs != NULL );
12   LFDS700_PAL_ASSERT( (lfds700_pal_uint_t) &qs->enqueue % LFDS700_PAL_ATOMIC_ISOLATION_IN_BYTES == 0 );
13   LFDS700_PAL_ASSERT( (lfds700_pal_uint_t) &qs->dequeue % LFDS700_PAL_ATOMIC_ISOLATION_IN_BYTES == 0 );
14   LFDS700_PAL_ASSERT( (lfds700_pal_uint_t) &qs->user_state % LFDS700_PAL_ATOMIC_ISOLATION_IN_BYTES == 0 );
15   LFDS700_PAL_ASSERT( qe_dummy != NULL );
16   LFDS700_PAL_ASSERT( (lfds700_pal_uint_t) qe_dummy->next % LFDS700_PAL_ATOMIC_ISOLATION_IN_BYTES == 0 );
17   LFDS700_PAL_ASSERT( (lfds700_pal_uint_t) &qe_dummy->key % LFDS700_PAL_ATOMIC_ISOLATION_IN_BYTES == 0 );
18   LFDS700_PAL_ASSERT( ps != NULL );
19   // TRD : user_state can be UNLL
20
21   /* TRD : qe_dummy is a dummy element, needed for init
22            the qs->enqueue and qs->dequeue counters do not need to be initialized
23            but it does no harm to do so, and stops a valgrind complaint
24   */
25
26   qs->enqueue[POINTER] = qe_dummy;
27   qs->enqueue[COUNTER] = (struct lfds700_queue_element *) 0;
28   qs->dequeue[POINTER] = qe_dummy;
29   qs->dequeue[COUNTER] = (struct lfds700_queue_element *) 0;
30
31   qe_dummy->next[POINTER] = NULL;
32   qe_dummy->next[COUNTER] = (struct lfds700_queue_element *) LFDS700_MISC_PRNG_GENERATE( ps );
33   qe_dummy->value = NULL;
34
35   qs->user_state = user_state;
36
37   LFDS700_MISC_BARRIER_STORE;
38
39   lfds700_misc_force_store();
40
41   return;
42 }
43