@@ -54,11 +54,11 @@ static inline void lfstack_push(union lfstack *stack, struct lfstack_el *el)
54
54
union lfstack old_v , new_v ;
55
55
56
56
while (true) {
57
- el -> next = stack -> first ;
58
57
old_v .first = READ_ONCE (stack -> first );
59
58
old_v .seq = READ_ONCE (stack -> seq );
59
+ el -> next = old_v .first ;
60
60
new_v .first = el ;
61
- new_v .seq = stack -> seq + 1 ;
61
+ new_v .seq = old_v . seq + 1 ;
62
62
if (try_cmpxchg128 (& stack -> full , & old_v .full , new_v .full ))
63
63
break ;
64
64
}
@@ -73,11 +73,11 @@ static inline void lfstack_push_many(union lfstack *stack, struct lfstack_el *el
73
73
union lfstack old_v , new_v ;
74
74
75
75
while (true) {
76
- el_last -> next = stack -> first ;
77
76
old_v .first = READ_ONCE (stack -> first );
78
77
old_v .seq = READ_ONCE (stack -> seq );
78
+ el_last -> next = old_v .first ;
79
79
new_v .first = el_first ;
80
- new_v .seq = stack -> seq + 1 ;
80
+ new_v .seq = old_v . seq + 1 ;
81
81
if (try_cmpxchg128 (& stack -> full , & old_v .full , new_v .full ))
82
82
break ;
83
83
}
@@ -90,20 +90,18 @@ static inline struct lfstack_el *lfstack_pop(union lfstack *stack)
90
90
{
91
91
#ifdef LFSTACK_LOCKFREE
92
92
union lfstack old_v , new_v ;
93
- struct lfstack_el * first ;
94
93
95
94
while (true) {
96
- first = READ_ONCE (stack -> first );
97
- if (!first )
95
+ old_v . first = READ_ONCE (stack -> first );
96
+ if (!old_v . first )
98
97
break ;
99
- old_v .first = stack -> first ;
100
98
old_v .seq = READ_ONCE (stack -> seq );
101
- new_v .first = first -> next ;
102
- new_v .seq = stack -> seq + 1 ;
99
+ new_v .first = old_v . first -> next ;
100
+ new_v .seq = old_v . seq + 1 ;
103
101
if (try_cmpxchg128 (& stack -> full , & old_v .full , new_v .full ))
104
102
break ;
105
103
}
106
- return first ;
104
+ return old_v . first ;
107
105
#else
108
106
struct lfstack_el * el ;
109
107
unsigned long flags ;
0 commit comments