1 #include "lfds611_slist_internal.h"
\r
7 /****************************************************************************/
\r
8 void lfds611_slist_internal_link_element_to_head( struct lfds611_slist_state *ss, struct lfds611_slist_element *volatile se )
\r
10 LFDS611_ALIGN(LFDS611_ALIGN_SINGLE_POINTER) struct lfds611_slist_element
\r
13 assert( ss != NULL );
\r
14 assert( se != NULL );
\r
16 LFDS611_BARRIER_LOAD;
\r
24 while( se->next != (se_next = (struct lfds611_slist_element *) lfds611_abstraction_cas((volatile lfds611_atom_t *) &ss->head, (lfds611_atom_t) se, (lfds611_atom_t) se->next)) );
\r
33 /****************************************************************************/
\r
34 void lfds611_slist_internal_link_element_after_element( struct lfds611_slist_element *volatile lfds611_slist_in_list_element, struct lfds611_slist_element *volatile se )
\r
36 LFDS611_ALIGN(LFDS611_ALIGN_SINGLE_POINTER) struct lfds611_slist_element
\r
40 assert( lfds611_slist_in_list_element != NULL );
\r
41 assert( se != NULL );
\r
43 LFDS611_BARRIER_LOAD;
\r
45 se_prev = (struct lfds611_slist_element *) lfds611_slist_in_list_element;
\r
47 se_next = se_prev->next;
\r
53 while( se->next != (se_next = (struct lfds611_slist_element *) lfds611_abstraction_cas((volatile lfds611_atom_t *) &se_prev->next, (lfds611_atom_t) se, (lfds611_atom_t) se->next)) );
\r