/src/openvswitch/lib/ovs-atomic.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * Copyright (c) 2013, 2014, 2017 Nicira, Inc. |
3 | | * |
4 | | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | | * you may not use this file except in compliance with the License. |
6 | | * You may obtain a copy of the License at: |
7 | | * |
8 | | * http://www.apache.org/licenses/LICENSE-2.0 |
9 | | * |
10 | | * Unless required by applicable law or agreed to in writing, software |
11 | | * distributed under the License is distributed on an "AS IS" BASIS, |
12 | | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
13 | | * See the License for the specific language governing permissions and |
14 | | * limitations under the License. |
15 | | */ |
16 | | |
17 | | #ifndef OVS_ATOMIC_H |
18 | | #define OVS_ATOMIC_H 1 |
19 | | |
20 | | /* Atomic operations. |
21 | | * |
22 | | * This library implements atomic operations with an API based on the one |
23 | | * defined in C11. It includes multiple implementations for compilers and |
24 | | * libraries with varying degrees of built-in support for C11, including a |
25 | | * fallback implementation for systems that have pthreads but no other support |
26 | | * for atomics. |
27 | | * |
28 | | * This comment describes the common features of all the implementations. |
29 | | * |
30 | | * |
31 | | * Types |
32 | | * ===== |
33 | | * |
34 | | * The following atomic types are supported as typedefs for atomic versions of |
35 | | * the listed ordinary types: |
36 | | * |
37 | | * ordinary type atomic version |
38 | | * ------------------- ---------------------- |
39 | | * bool atomic_bool |
40 | | * |
41 | | * char atomic_char |
42 | | * signed char atomic_schar |
43 | | * unsigned char atomic_uchar |
44 | | * |
45 | | * short atomic_short |
46 | | * unsigned short atomic_ushort |
47 | | * |
48 | | * int atomic_int |
49 | | * unsigned int atomic_uint |
50 | | * |
51 | | * long atomic_long |
52 | | * unsigned long atomic_ulong |
53 | | * |
54 | | * long long atomic_llong |
55 | | * unsigned long long atomic_ullong |
56 | | * |
57 | | * size_t atomic_size_t |
58 | | * ptrdiff_t atomic_ptrdiff_t |
59 | | * |
60 | | * intmax_t atomic_intmax_t |
61 | | * uintmax_t atomic_uintmax_t |
62 | | * |
63 | | * intptr_t atomic_intptr_t |
64 | | * uintptr_t atomic_uintptr_t |
65 | | * |
66 | | * uint8_t atomic_uint8_t (*) |
67 | | * uint16_t atomic_uint16_t (*) |
68 | | * uint32_t atomic_uint32_t (*) |
69 | | * int8_t atomic_int8_t (*) |
70 | | * int16_t atomic_int16_t (*) |
71 | | * int32_t atomic_int32_t (*) |
72 | | * uint64_t atomic_uint64_t (*) |
73 | | * int64_t atomic_int64_t (*) |
74 | | * |
75 | | * (*) Not specified by C11. |
76 | | * |
77 | | * Atomic types may also be obtained via ATOMIC(TYPE), e.g. ATOMIC(void *). |
78 | | * Only basic integer types and pointer types can be made atomic this way, |
79 | | * e.g. atomic structs are not supported. |
80 | | * |
81 | | * The atomic version of a type doesn't necessarily have the same size or |
82 | | * representation as the ordinary version; for example, atomic_int might be a |
83 | | * typedef for a struct. The range of an atomic type does match the range of |
84 | | * the corresponding ordinary type. |
85 | | * |
86 | | * C11 says that one may use the _Atomic keyword in place of the typedef name, |
87 | | * e.g. "_Atomic int" instead of "atomic_int". This library doesn't support |
88 | | * that. |
89 | | * |
90 | | * |
91 | | * Life Cycle |
92 | | * ========== |
93 | | * |
94 | | * To initialize an atomic variable at its point of definition, use: |
95 | | * |
96 | | * static atomic_int ai = 123; |
97 | | * |
98 | | * To initialize an atomic variable in code, use atomic_init(): |
99 | | * |
100 | | * static atomic_int ai; |
101 | | * ... |
102 | | * atomic_init(&ai, 123); |
103 | | * |
104 | | * |
105 | | * Barriers |
106 | | * ======== |
107 | | * |
108 | | * enum memory_order specifies the strictness of a memory barrier. It has the |
109 | | * following values: |
110 | | * |
111 | | * memory_order_relaxed: |
112 | | * |
113 | | * Only atomicity is provided, does not imply any memory ordering with |
114 | | * respect to any other variable (atomic or not). Relaxed accesses to |
115 | | * the same atomic variable will be performed in the program order. |
116 | | * The compiler and CPU are free to move memory accesses to other |
117 | | * variables past the atomic operation. |
118 | | * |
119 | | * memory_order_consume: |
120 | | * |
121 | | * Memory accesses with data dependency on the result of the consume |
122 | | * operation (atomic_read_explicit, or a load operation preceding a |
123 | | * atomic_thread_fence) will not be moved prior to the consume |
124 | | * barrier. Non-data-dependent loads and stores can be reordered to |
125 | | * happen before the consume barrier. |
126 | | * |
127 | | * RCU is the prime example of the use of the consume barrier: The |
128 | | * consume barrier guarantees that reads from a RCU protected object |
129 | | * are performed after the RCU protected pointer is read. A |
130 | | * corresponding release barrier is used to store the modified RCU |
131 | | * protected pointer after the RCU protected object has been fully |
132 | | * constructed. The synchronization between these barriers prevents |
133 | | * the RCU "consumer" from seeing uninitialized data. |
134 | | * |
135 | | * May not be used with atomic_store_explicit(), as consume semantics |
136 | | * applies only to atomic loads. |
137 | | * |
138 | | * memory_order_acquire: |
139 | | * |
140 | | * Memory accesses after an acquire barrier cannot be moved before the |
141 | | * barrier. Memory accesses before an acquire barrier *can* be moved |
142 | | * after it. |
143 | | * |
144 | | * An atomic_thread_fence with memory_order_acquire does not have a |
145 | | * load operation by itself; it prevents all following memory accesses |
146 | | * from moving prior to preceding loads. |
147 | | * |
148 | | * May not be used with atomic_store_explicit(), as acquire semantics |
149 | | * applies only to atomic loads. |
150 | | * |
151 | | * memory_order_release: |
152 | | * |
153 | | * Memory accesses before a release barrier cannot be moved after the |
154 | | * barrier. Memory accesses after a release barrier *can* be moved |
155 | | * before it. |
156 | | * |
157 | | * An atomic_thread_fence with memory_order_release does not have a |
158 | | * store operation by itself; it prevents all preceding memory accesses |
159 | | * from moving past subsequent stores. |
160 | | * |
161 | | * May not be used with atomic_read_explicit(), as release semantics |
162 | | * applies only to atomic stores. |
163 | | * |
164 | | * memory_order_acq_rel: |
165 | | * |
166 | | * Memory accesses cannot be moved across an acquire-release barrier in |
167 | | * either direction. |
168 | | * |
169 | | * May only be used with atomic read-modify-write operations, as both |
170 | | * load and store operation is required for acquire-release semantics. |
171 | | * |
172 | | * An atomic_thread_fence with memory_order_acq_rel does not have |
173 | | * either load or store operation by itself; it prevents all following |
174 | | * memory accesses from moving prior to preceding loads and all |
175 | | * preceding memory accesses from moving past subsequent stores. |
176 | | * |
177 | | * memory_order_seq_cst: |
178 | | * |
179 | | * Prevents movement of memory accesses like an acquire-release barrier, |
180 | | * but whereas acquire-release synchronizes cooperating threads (using |
181 | | * the same atomic variable), sequential-consistency synchronizes the |
182 | | * whole system, providing a total order for stores on all atomic |
183 | | * variables. |
184 | | * |
185 | | * OVS atomics require the memory_order to be passed as a compile-time constant |
186 | | * value, as some compiler implementations may perform poorly if the memory |
187 | | * order parameter is passed in as a run-time value. |
188 | | * |
189 | | * The following functions insert explicit barriers. Most of the other atomic |
190 | | * functions also include barriers. |
191 | | * |
192 | | * void atomic_thread_fence(memory_order order); |
193 | | * |
194 | | * Inserts a barrier of the specified type. |
195 | | * |
196 | | * For memory_order_relaxed, this is a no-op. |
197 | | * |
198 | | * void atomic_signal_fence(memory_order order); |
199 | | * |
200 | | * Inserts a barrier of the specified type, but only with respect to |
201 | | * signal handlers in the same thread as the barrier. This is |
202 | | * basically a compiler optimization barrier, except for |
203 | | * memory_order_relaxed, which is a no-op. |
204 | | * |
205 | | * |
206 | | * Atomic Operations |
207 | | * ================= |
208 | | * |
209 | | * In this section, A is an atomic type and C is the corresponding non-atomic |
210 | | * type. |
211 | | * |
212 | | * The "store", "exchange", and "compare_exchange" primitives match C11: |
213 | | * |
214 | | * void atomic_store(A *object, C value); |
215 | | * void atomic_store_explicit(A *object, C value, memory_order); |
216 | | * |
217 | | * Atomically stores 'value' into '*object', respecting the given |
218 | | * memory order (or memory_order_seq_cst for atomic_store()). |
219 | | * |
220 | | * bool atomic_compare_exchange_strong(A *object, C *expected, C desired); |
221 | | * bool atomic_compare_exchange_weak(A *object, C *expected, C desired); |
222 | | * bool atomic_compare_exchange_strong_explicit(A *object, C *expected, |
223 | | * C desired, |
224 | | * memory_order success, |
225 | | * memory_order failure); |
226 | | * bool atomic_compare_exchange_weak_explicit(A *object, C *expected, |
227 | | * C desired, |
228 | | * memory_order success, |
229 | | * memory_order failure); |
230 | | * |
231 | | * Atomically loads '*object' and compares it with '*expected' and if |
232 | | * equal, stores 'desired' into '*object' (an atomic read-modify-write |
233 | | * operation) and returns true, and if non-equal, stores the actual |
234 | | * value of '*object' into '*expected' (an atomic load operation) and |
235 | | * returns false. The memory order for the successful case (atomic |
236 | | * read-modify-write operation) is 'success', and for the unsuccessful |
237 | | * case (atomic load operation) 'failure'. 'failure' may not be |
238 | | * stronger than 'success'. |
239 | | * |
240 | | * The weak forms may fail (returning false) also when '*object' equals |
241 | | * '*expected'. The strong form can be implemented by the weak form in |
242 | | * a loop. Some platforms can implement the weak form more |
243 | | * efficiently, so it should be used if the application will need to |
244 | | * loop anyway. |
245 | | * |
246 | | * C atomic_exchange(A *object, C desired); |
247 | | * C atomic_exchange_explicit(A *object, C desired, memory_order); |
248 | | * |
249 | | * Atomically stores 'desired' into '*object', returning the value |
250 | | * previously held. |
251 | | * |
252 | | * The following primitives differ from the C11 ones (and have different names) |
253 | | * because there does not appear to be a way to implement the standard |
254 | | * primitives in standard C: |
255 | | * |
256 | | * void atomic_read(A *src, C *dst); |
257 | | * void atomic_read_explicit(A *src, C *dst, memory_order); |
258 | | * |
259 | | * Atomically loads a value from 'src', writing the value read into |
260 | | * '*dst', respecting the given memory order (or memory_order_seq_cst |
261 | | * for atomic_read()). |
262 | | * |
263 | | * void atomic_add(A *rmw, C arg, C *orig); |
264 | | * void atomic_sub(A *rmw, C arg, C *orig); |
265 | | * void atomic_or(A *rmw, C arg, C *orig); |
266 | | * void atomic_xor(A *rmw, C arg, C *orig); |
267 | | * void atomic_and(A *rmw, C arg, C *orig); |
268 | | * void atomic_add_explicit(A *rmw, C arg, C *orig, memory_order); |
269 | | * void atomic_sub_explicit(A *rmw, C arg, C *orig, memory_order); |
270 | | * void atomic_or_explicit(A *rmw, C arg, C *orig, memory_order); |
271 | | * void atomic_xor_explicit(A *rmw, C arg, C *orig, memory_order); |
272 | | * void atomic_and_explicit(A *rmw, C arg, C *orig, memory_order); |
273 | | * |
274 | | * Atomically applies the given operation, with 'arg' as the second |
275 | | * operand, to '*rmw', and stores the original value of '*rmw' into |
276 | | * '*orig', respecting the given memory order (or memory_order_seq_cst |
277 | | * if none is specified). |
278 | | * |
279 | | * The results are similar to those that would be obtained with +=, -=, |
280 | | * |=, ^=, or |= on non-atomic types. |
281 | | * |
282 | | * |
283 | | * atomic_flag |
284 | | * =========== |
285 | | * |
286 | | * atomic_flag is a typedef for a type with two states, set and clear, that |
287 | | * provides atomic test-and-set functionality. |
288 | | * |
289 | | * |
290 | | * Life Cycle |
291 | | * ---------- |
292 | | * |
293 | | * ATOMIC_FLAG_INIT is an initializer for atomic_flag. The initial state is |
294 | | * "clear". |
295 | | * |
296 | | * An atomic_flag may also be initialized at runtime with atomic_flag_clear(). |
297 | | * |
298 | | * |
299 | | * Operations |
300 | | * ---------- |
301 | | * |
302 | | * The following functions are available. |
303 | | * |
304 | | * bool atomic_flag_test_and_set(atomic_flag *object) |
305 | | * bool atomic_flag_test_and_set_explicit(atomic_flag *object, |
306 | | * memory_order); |
307 | | * |
308 | | * Atomically sets '*object', respecting the given memory order (or |
309 | | * memory_order_seq_cst for atomic_flag_test_and_set()). Returns the |
310 | | * previous value of the flag (false for clear, true for set). |
311 | | * |
312 | | * void atomic_flag_clear(atomic_flag *object); |
313 | | * void atomic_flag_clear_explicit(atomic_flag *object, memory_order); |
314 | | * |
315 | | * Atomically clears '*object', respecting the given memory order (or |
316 | | * memory_order_seq_cst for atomic_flag_clear()). |
317 | | */ |
318 | | |
319 | | #include <limits.h> |
320 | | #include <pthread.h> |
321 | | #include <stdbool.h> |
322 | | #include <stddef.h> |
323 | | #include <stdint.h> |
324 | | #include "compiler.h" |
325 | | #include "util.h" |
326 | | |
327 | | #define IN_OVS_ATOMIC_H |
328 | | #if __CHECKER__ |
329 | | /* sparse doesn't understand some GCC extensions we use. */ |
330 | | #include "ovs-atomic-pthreads.h" |
331 | | #elif __clang__ && __has_extension(c_atomic) |
332 | | #include "ovs-atomic-clang.h" |
333 | | #elif HAVE_ATOMIC && __cplusplus >= 201103L |
334 | | #include "ovs-atomic-c++.h" |
335 | | #elif HAVE_STDATOMIC_H && !defined(__cplusplus) |
336 | | #include "ovs-atomic-c11.h" |
337 | | #elif __GNUC__ >= 5 && !defined(__cplusplus) |
338 | | #error "GCC 5+ should have <stdatomic.h>" |
339 | | #elif __GNUC__ >= 5 || (__GNUC__ >= 4 && __GNUC_MINOR__ >= 7) |
340 | | #include "ovs-atomic-gcc4.7+.h" |
341 | | #elif __GNUC__ && defined(__x86_64__) |
342 | | #include "ovs-atomic-x86_64.h" |
343 | | #elif __GNUC__ && defined(__i386__) |
344 | | #include "ovs-atomic-i586.h" |
345 | | #elif HAVE_GCC4_ATOMICS |
346 | | #include "ovs-atomic-gcc4+.h" |
347 | | #elif _MSC_VER |
348 | | #include "ovs-atomic-msvc.h" |
349 | | #else |
350 | | /* ovs-atomic-pthreads implementation is provided for portability. |
351 | | * It might be too slow for real use because Open vSwitch is |
352 | | * optimized for platforms where real atomic ops are available. */ |
353 | | #include "ovs-atomic-pthreads.h" |
354 | | #endif |
355 | | #undef IN_OVS_ATOMIC_H |
356 | | |
357 | | #ifndef OMIT_STANDARD_ATOMIC_TYPES |
358 | | typedef ATOMIC(bool) atomic_bool; |
359 | | |
360 | | typedef ATOMIC(char) atomic_char; |
361 | | typedef ATOMIC(signed char) atomic_schar; |
362 | | typedef ATOMIC(unsigned char) atomic_uchar; |
363 | | |
364 | | typedef ATOMIC(short) atomic_short; |
365 | | typedef ATOMIC(unsigned short) atomic_ushort; |
366 | | |
367 | | typedef ATOMIC(int) atomic_int; |
368 | | typedef ATOMIC(unsigned int) atomic_uint; |
369 | | |
370 | | typedef ATOMIC(long) atomic_long; |
371 | | typedef ATOMIC(unsigned long) atomic_ulong; |
372 | | |
373 | | typedef ATOMIC(long long) atomic_llong; |
374 | | typedef ATOMIC(unsigned long long) atomic_ullong; |
375 | | |
376 | | typedef ATOMIC(size_t) atomic_size_t; |
377 | | typedef ATOMIC(ptrdiff_t) atomic_ptrdiff_t; |
378 | | |
379 | | typedef ATOMIC(intmax_t) atomic_intmax_t; |
380 | | typedef ATOMIC(uintmax_t) atomic_uintmax_t; |
381 | | |
382 | | typedef ATOMIC(intptr_t) atomic_intptr_t; |
383 | | typedef ATOMIC(uintptr_t) atomic_uintptr_t; |
384 | | #endif /* !OMIT_STANDARD_ATOMIC_TYPES */ |
385 | | |
386 | | /* Nonstandard atomic types. */ |
387 | | typedef ATOMIC(uint8_t) atomic_uint8_t; |
388 | | typedef ATOMIC(uint16_t) atomic_uint16_t; |
389 | | typedef ATOMIC(uint32_t) atomic_uint32_t; |
390 | | typedef ATOMIC(uint64_t) atomic_uint64_t; |
391 | | |
392 | | typedef ATOMIC(int8_t) atomic_int8_t; |
393 | | typedef ATOMIC(int16_t) atomic_int16_t; |
394 | | typedef ATOMIC(int32_t) atomic_int32_t; |
395 | | typedef ATOMIC(int64_t) atomic_int64_t; |
396 | | |
397 | | /* Relaxed atomic operations. |
398 | | * |
399 | | * When an operation on an atomic variable is not expected to synchronize |
400 | | * with operations on other (atomic or non-atomic) variables, no memory |
401 | | * barriers are needed and the relaxed memory ordering can be used. These |
402 | | * macros make such uses less daunting, but not invisible. */ |
403 | | #define atomic_store_relaxed(VAR, VALUE) \ |
404 | 0 | atomic_store_explicit(VAR, VALUE, memory_order_relaxed) |
405 | | #define atomic_read_relaxed(VAR, DST) \ |
406 | 0 | atomic_read_explicit(VAR, DST, memory_order_relaxed) |
407 | | #define atomic_compare_exchange_strong_relaxed(DST, EXP, SRC) \ |
408 | | atomic_compare_exchange_strong_explicit(DST, EXP, SRC, \ |
409 | | memory_order_relaxed, \ |
410 | | memory_order_relaxed) |
411 | | #define atomic_compare_exchange_weak_relaxed(DST, EXP, SRC) \ |
412 | 0 | atomic_compare_exchange_weak_explicit(DST, EXP, SRC, \ |
413 | | memory_order_relaxed, \ |
414 | | memory_order_relaxed) |
415 | | #define atomic_add_relaxed(RMW, ARG, ORIG) \ |
416 | 9.85k | atomic_add_explicit(RMW, ARG, ORIG, memory_order_relaxed) |
417 | | #define atomic_sub_relaxed(RMW, ARG, ORIG) \ |
418 | 0 | atomic_sub_explicit(RMW, ARG, ORIG, memory_order_relaxed) |
419 | | #define atomic_or_relaxed(RMW, ARG, ORIG) \ |
420 | | atomic_or_explicit(RMW, ARG, ORIG, memory_order_relaxed) |
421 | | #define atomic_xor_relaxed(RMW, ARG, ORIG) \ |
422 | | atomic_xor_explicit(RMW, ARG, ORIG, memory_order_relaxed) |
423 | | #define atomic_and_relaxed(RMW, ARG, ORIG) \ |
424 | | atomic_and_explicit(RMW, ARG, ORIG, memory_order_relaxed) |
425 | | #define atomic_flag_test_and_set_relaxed(FLAG) \ |
426 | | atomic_flag_test_and_set_explicit(FLAG, memory_order_relaxed) |
427 | | #define atomic_flag_clear_relaxed(FLAG) \ |
428 | | atomic_flag_clear_explicit(FLAG, memory_order_relaxed) |
429 | | |
430 | | /* A simplified atomic count. Does not provide any synchronization with any |
431 | | * other variables. |
432 | | * |
433 | | * Typically a counter is not used to synchronize the state of any other |
434 | | * variables (with the notable exception of reference count, below). |
435 | | * This abstraction releaves the user from the memory order considerations, |
436 | | * and may make the code easier to read. |
437 | | * |
438 | | * We only support the unsigned int counters, as those are the most common. */ |
439 | | typedef struct atomic_count { |
440 | | atomic_uint count; |
441 | | } atomic_count; |
442 | | |
443 | 9.85k | #define ATOMIC_COUNT_INIT(VALUE) { VALUE } |
444 | | |
445 | | static inline void |
446 | | atomic_count_init(atomic_count *count, unsigned int value) |
447 | 0 | { |
448 | 0 | atomic_init(&count->count, value); |
449 | 0 | } Unexecuted instantiation: flow_extract_target.c:atomic_count_init Unexecuted instantiation: dp-packet.c:atomic_count_init Unexecuted instantiation: flow.c:atomic_count_init Unexecuted instantiation: netdev.c:atomic_count_init Unexecuted instantiation: ofp-msgs.c:atomic_count_init Unexecuted instantiation: ofp-util.c:atomic_count_init Unexecuted instantiation: ovs-rcu.c:atomic_count_init Unexecuted instantiation: ovs-router.c:atomic_count_init Unexecuted instantiation: ovs-thread.c:atomic_count_init Unexecuted instantiation: packets.c:atomic_count_init Unexecuted instantiation: poll-loop.c:atomic_count_init Unexecuted instantiation: pvector.c:atomic_count_init Unexecuted instantiation: random.c:atomic_count_init Unexecuted instantiation: seq.c:atomic_count_init Unexecuted instantiation: socket-util.c:atomic_count_init Unexecuted instantiation: timeval.c:atomic_count_init Unexecuted instantiation: tnl-ports.c:atomic_count_init Unexecuted instantiation: tun-metadata.c:atomic_count_init Unexecuted instantiation: unixctl.c:atomic_count_init Unexecuted instantiation: userspace-tso.c:atomic_count_init Unexecuted instantiation: util.c:atomic_count_init Unexecuted instantiation: uuid.c:atomic_count_init Unexecuted instantiation: vlog.c:atomic_count_init Unexecuted instantiation: netdev-linux.c:atomic_count_init Unexecuted instantiation: netdev-offload-tc.c:atomic_count_init Unexecuted instantiation: netlink-socket.c:atomic_count_init Unexecuted instantiation: route-table.c:atomic_count_init Unexecuted instantiation: tc.c:atomic_count_init Unexecuted instantiation: async-append-aio.c:atomic_count_init Unexecuted instantiation: dirs.c:atomic_count_init Unexecuted instantiation: classifier.c:atomic_count_init Unexecuted instantiation: ccmap.c:atomic_count_init Unexecuted instantiation: cmap.c:atomic_count_init Unexecuted instantiation: command-line.c:atomic_count_init Unexecuted instantiation: connectivity.c:atomic_count_init Unexecuted instantiation: coverage.c:atomic_count_init Unexecuted instantiation: dp-packet-gso.c:atomic_count_init Unexecuted instantiation: dpif.c:atomic_count_init Unexecuted instantiation: fatal-signal.c:atomic_count_init Unexecuted instantiation: guarded-list.c:atomic_count_init Unexecuted instantiation: hmap.c:atomic_count_init Unexecuted instantiation: jsonrpc.c:atomic_count_init Unexecuted instantiation: meta-flow.c:atomic_count_init Unexecuted instantiation: netdev-offload.c:atomic_count_init Unexecuted instantiation: netdev-vport.c:atomic_count_init Unexecuted instantiation: netlink.c:atomic_count_init Unexecuted instantiation: nx-match.c:atomic_count_init Unexecuted instantiation: odp-execute.c:atomic_count_init Unexecuted instantiation: odp-execute-private.c:atomic_count_init Unexecuted instantiation: odp-util.c:atomic_count_init Unexecuted instantiation: ofp-actions.c:atomic_count_init Unexecuted instantiation: ofp-monitor.c:atomic_count_init Unexecuted instantiation: ovs-replay.c:atomic_count_init Unexecuted instantiation: stream.c:atomic_count_init Unexecuted instantiation: tnl-neigh-cache.c:atomic_count_init Unexecuted instantiation: netdev-native-tnl.c:atomic_count_init Unexecuted instantiation: daemon-unix.c:atomic_count_init Unexecuted instantiation: stream-unix.c:atomic_count_init Unexecuted instantiation: dpif-netlink.c:atomic_count_init Unexecuted instantiation: dpif-netlink-rtnl.c:atomic_count_init Unexecuted instantiation: netlink-conntrack.c:atomic_count_init Unexecuted instantiation: netlink-notifier.c:atomic_count_init Unexecuted instantiation: stream-ssl.c:atomic_count_init Unexecuted instantiation: conntrack.c:atomic_count_init Unexecuted instantiation: daemon.c:atomic_count_init Unexecuted instantiation: dpif-netdev.c:atomic_count_init Unexecuted instantiation: dpif-netdev-private-dfc.c:atomic_count_init Unexecuted instantiation: dpif-netdev-private-dpif.c:atomic_count_init Unexecuted instantiation: dpif-netdev-private-extract.c:atomic_count_init Unexecuted instantiation: dpif-netdev-perf.c:atomic_count_init Unexecuted instantiation: fat-rwlock.c:atomic_count_init Unexecuted instantiation: hindex.c:atomic_count_init Unexecuted instantiation: id-fpool.c:atomic_count_init Unexecuted instantiation: ipf.c:atomic_count_init Unexecuted instantiation: learn.c:atomic_count_init Unexecuted instantiation: lockfile.c:atomic_count_init Unexecuted instantiation: mpsc-queue.c:atomic_count_init Unexecuted instantiation: ovs-numa.c:atomic_count_init Unexecuted instantiation: process.c:atomic_count_init Unexecuted instantiation: stream-replay.c:atomic_count_init Unexecuted instantiation: dpdk-stub.c:atomic_count_init Unexecuted instantiation: vswitch-idl.c:atomic_count_init Unexecuted instantiation: conntrack-icmp.c:atomic_count_init Unexecuted instantiation: conntrack-tcp.c:atomic_count_init Unexecuted instantiation: conntrack-tp.c:atomic_count_init Unexecuted instantiation: conntrack-other.c:atomic_count_init Unexecuted instantiation: dpif-netdev-extract-study.c:atomic_count_init Unexecuted instantiation: dpif-netdev-lookup.c:atomic_count_init Unexecuted instantiation: dpif-netdev-lookup-autovalidator.c:atomic_count_init Unexecuted instantiation: dpif-netdev-lookup-generic.c:atomic_count_init Unexecuted instantiation: ovsdb-data.c:atomic_count_init Unexecuted instantiation: ovsdb-idl.c:atomic_count_init Unexecuted instantiation: ovsdb-types.c:atomic_count_init Unexecuted instantiation: miniflow_target.c:atomic_count_init Unexecuted instantiation: ofctl_parse_target.c:atomic_count_init |
450 | | |
451 | | static inline unsigned int |
452 | | atomic_count_inc(atomic_count *count) |
453 | 9.85k | { |
454 | 9.85k | unsigned int old; |
455 | | |
456 | 9.85k | atomic_add_relaxed(&count->count, 1u, &old); |
457 | | |
458 | 9.85k | return old; |
459 | 9.85k | } Unexecuted instantiation: flow_extract_target.c:atomic_count_inc Unexecuted instantiation: dp-packet.c:atomic_count_inc Unexecuted instantiation: flow.c:atomic_count_inc Unexecuted instantiation: netdev.c:atomic_count_inc ofp-msgs.c:atomic_count_inc Line | Count | Source | 453 | 9.85k | { | 454 | 9.85k | unsigned int old; | 455 | | | 456 | 9.85k | atomic_add_relaxed(&count->count, 1u, &old); | 457 | | | 458 | 9.85k | return old; | 459 | 9.85k | } |
Unexecuted instantiation: ofp-util.c:atomic_count_inc Unexecuted instantiation: ovs-rcu.c:atomic_count_inc Unexecuted instantiation: ovs-router.c:atomic_count_inc Unexecuted instantiation: ovs-thread.c:atomic_count_inc Unexecuted instantiation: packets.c:atomic_count_inc Unexecuted instantiation: poll-loop.c:atomic_count_inc Unexecuted instantiation: pvector.c:atomic_count_inc Unexecuted instantiation: random.c:atomic_count_inc Unexecuted instantiation: seq.c:atomic_count_inc Unexecuted instantiation: socket-util.c:atomic_count_inc Unexecuted instantiation: timeval.c:atomic_count_inc Unexecuted instantiation: tnl-ports.c:atomic_count_inc Unexecuted instantiation: tun-metadata.c:atomic_count_inc Unexecuted instantiation: unixctl.c:atomic_count_inc Unexecuted instantiation: userspace-tso.c:atomic_count_inc Unexecuted instantiation: util.c:atomic_count_inc Unexecuted instantiation: uuid.c:atomic_count_inc Unexecuted instantiation: vlog.c:atomic_count_inc Unexecuted instantiation: netdev-linux.c:atomic_count_inc Unexecuted instantiation: netdev-offload-tc.c:atomic_count_inc Unexecuted instantiation: netlink-socket.c:atomic_count_inc Unexecuted instantiation: route-table.c:atomic_count_inc Unexecuted instantiation: tc.c:atomic_count_inc Unexecuted instantiation: async-append-aio.c:atomic_count_inc Unexecuted instantiation: dirs.c:atomic_count_inc Unexecuted instantiation: classifier.c:atomic_count_inc Unexecuted instantiation: ccmap.c:atomic_count_inc Unexecuted instantiation: cmap.c:atomic_count_inc Unexecuted instantiation: command-line.c:atomic_count_inc Unexecuted instantiation: connectivity.c:atomic_count_inc Unexecuted instantiation: coverage.c:atomic_count_inc Unexecuted instantiation: dp-packet-gso.c:atomic_count_inc Unexecuted instantiation: dpif.c:atomic_count_inc Unexecuted instantiation: fatal-signal.c:atomic_count_inc Unexecuted instantiation: guarded-list.c:atomic_count_inc Unexecuted instantiation: hmap.c:atomic_count_inc Unexecuted instantiation: jsonrpc.c:atomic_count_inc Unexecuted instantiation: meta-flow.c:atomic_count_inc Unexecuted instantiation: netdev-offload.c:atomic_count_inc Unexecuted instantiation: netdev-vport.c:atomic_count_inc Unexecuted instantiation: netlink.c:atomic_count_inc Unexecuted instantiation: nx-match.c:atomic_count_inc Unexecuted instantiation: odp-execute.c:atomic_count_inc Unexecuted instantiation: odp-execute-private.c:atomic_count_inc Unexecuted instantiation: odp-util.c:atomic_count_inc Unexecuted instantiation: ofp-actions.c:atomic_count_inc Unexecuted instantiation: ofp-monitor.c:atomic_count_inc Unexecuted instantiation: ovs-replay.c:atomic_count_inc Unexecuted instantiation: stream.c:atomic_count_inc Unexecuted instantiation: tnl-neigh-cache.c:atomic_count_inc Unexecuted instantiation: netdev-native-tnl.c:atomic_count_inc Unexecuted instantiation: daemon-unix.c:atomic_count_inc Unexecuted instantiation: stream-unix.c:atomic_count_inc Unexecuted instantiation: dpif-netlink.c:atomic_count_inc Unexecuted instantiation: dpif-netlink-rtnl.c:atomic_count_inc Unexecuted instantiation: netlink-conntrack.c:atomic_count_inc Unexecuted instantiation: netlink-notifier.c:atomic_count_inc Unexecuted instantiation: stream-ssl.c:atomic_count_inc Unexecuted instantiation: conntrack.c:atomic_count_inc Unexecuted instantiation: daemon.c:atomic_count_inc Unexecuted instantiation: dpif-netdev.c:atomic_count_inc Unexecuted instantiation: dpif-netdev-private-dfc.c:atomic_count_inc Unexecuted instantiation: dpif-netdev-private-dpif.c:atomic_count_inc Unexecuted instantiation: dpif-netdev-private-extract.c:atomic_count_inc Unexecuted instantiation: dpif-netdev-perf.c:atomic_count_inc Unexecuted instantiation: fat-rwlock.c:atomic_count_inc Unexecuted instantiation: hindex.c:atomic_count_inc Unexecuted instantiation: id-fpool.c:atomic_count_inc Unexecuted instantiation: ipf.c:atomic_count_inc Unexecuted instantiation: learn.c:atomic_count_inc Unexecuted instantiation: lockfile.c:atomic_count_inc Unexecuted instantiation: mpsc-queue.c:atomic_count_inc Unexecuted instantiation: ovs-numa.c:atomic_count_inc Unexecuted instantiation: process.c:atomic_count_inc Unexecuted instantiation: stream-replay.c:atomic_count_inc Unexecuted instantiation: dpdk-stub.c:atomic_count_inc Unexecuted instantiation: vswitch-idl.c:atomic_count_inc Unexecuted instantiation: conntrack-icmp.c:atomic_count_inc Unexecuted instantiation: conntrack-tcp.c:atomic_count_inc Unexecuted instantiation: conntrack-tp.c:atomic_count_inc Unexecuted instantiation: conntrack-other.c:atomic_count_inc Unexecuted instantiation: dpif-netdev-extract-study.c:atomic_count_inc Unexecuted instantiation: dpif-netdev-lookup.c:atomic_count_inc Unexecuted instantiation: dpif-netdev-lookup-autovalidator.c:atomic_count_inc Unexecuted instantiation: dpif-netdev-lookup-generic.c:atomic_count_inc Unexecuted instantiation: ovsdb-data.c:atomic_count_inc Unexecuted instantiation: ovsdb-idl.c:atomic_count_inc Unexecuted instantiation: ovsdb-types.c:atomic_count_inc Unexecuted instantiation: miniflow_target.c:atomic_count_inc Unexecuted instantiation: ofctl_parse_target.c:atomic_count_inc |
460 | | |
461 | | static inline unsigned int |
462 | | atomic_count_dec(atomic_count *count) |
463 | 0 | { |
464 | 0 | unsigned int old; |
465 | |
|
466 | 0 | atomic_sub_relaxed(&count->count, 1u, &old); |
467 | |
|
468 | 0 | return old; |
469 | 0 | } Unexecuted instantiation: flow_extract_target.c:atomic_count_dec Unexecuted instantiation: dp-packet.c:atomic_count_dec Unexecuted instantiation: flow.c:atomic_count_dec Unexecuted instantiation: netdev.c:atomic_count_dec Unexecuted instantiation: ofp-msgs.c:atomic_count_dec Unexecuted instantiation: ofp-util.c:atomic_count_dec Unexecuted instantiation: ovs-rcu.c:atomic_count_dec Unexecuted instantiation: ovs-router.c:atomic_count_dec Unexecuted instantiation: ovs-thread.c:atomic_count_dec Unexecuted instantiation: packets.c:atomic_count_dec Unexecuted instantiation: poll-loop.c:atomic_count_dec Unexecuted instantiation: pvector.c:atomic_count_dec Unexecuted instantiation: random.c:atomic_count_dec Unexecuted instantiation: seq.c:atomic_count_dec Unexecuted instantiation: socket-util.c:atomic_count_dec Unexecuted instantiation: timeval.c:atomic_count_dec Unexecuted instantiation: tnl-ports.c:atomic_count_dec Unexecuted instantiation: tun-metadata.c:atomic_count_dec Unexecuted instantiation: unixctl.c:atomic_count_dec Unexecuted instantiation: userspace-tso.c:atomic_count_dec Unexecuted instantiation: util.c:atomic_count_dec Unexecuted instantiation: uuid.c:atomic_count_dec Unexecuted instantiation: vlog.c:atomic_count_dec Unexecuted instantiation: netdev-linux.c:atomic_count_dec Unexecuted instantiation: netdev-offload-tc.c:atomic_count_dec Unexecuted instantiation: netlink-socket.c:atomic_count_dec Unexecuted instantiation: route-table.c:atomic_count_dec Unexecuted instantiation: tc.c:atomic_count_dec Unexecuted instantiation: async-append-aio.c:atomic_count_dec Unexecuted instantiation: dirs.c:atomic_count_dec Unexecuted instantiation: classifier.c:atomic_count_dec Unexecuted instantiation: ccmap.c:atomic_count_dec Unexecuted instantiation: cmap.c:atomic_count_dec Unexecuted instantiation: command-line.c:atomic_count_dec Unexecuted instantiation: connectivity.c:atomic_count_dec Unexecuted instantiation: coverage.c:atomic_count_dec Unexecuted instantiation: dp-packet-gso.c:atomic_count_dec Unexecuted instantiation: dpif.c:atomic_count_dec Unexecuted instantiation: fatal-signal.c:atomic_count_dec Unexecuted instantiation: guarded-list.c:atomic_count_dec Unexecuted instantiation: hmap.c:atomic_count_dec Unexecuted instantiation: jsonrpc.c:atomic_count_dec Unexecuted instantiation: meta-flow.c:atomic_count_dec Unexecuted instantiation: netdev-offload.c:atomic_count_dec Unexecuted instantiation: netdev-vport.c:atomic_count_dec Unexecuted instantiation: netlink.c:atomic_count_dec Unexecuted instantiation: nx-match.c:atomic_count_dec Unexecuted instantiation: odp-execute.c:atomic_count_dec Unexecuted instantiation: odp-execute-private.c:atomic_count_dec Unexecuted instantiation: odp-util.c:atomic_count_dec Unexecuted instantiation: ofp-actions.c:atomic_count_dec Unexecuted instantiation: ofp-monitor.c:atomic_count_dec Unexecuted instantiation: ovs-replay.c:atomic_count_dec Unexecuted instantiation: stream.c:atomic_count_dec Unexecuted instantiation: tnl-neigh-cache.c:atomic_count_dec Unexecuted instantiation: netdev-native-tnl.c:atomic_count_dec Unexecuted instantiation: daemon-unix.c:atomic_count_dec Unexecuted instantiation: stream-unix.c:atomic_count_dec Unexecuted instantiation: dpif-netlink.c:atomic_count_dec Unexecuted instantiation: dpif-netlink-rtnl.c:atomic_count_dec Unexecuted instantiation: netlink-conntrack.c:atomic_count_dec Unexecuted instantiation: netlink-notifier.c:atomic_count_dec Unexecuted instantiation: stream-ssl.c:atomic_count_dec Unexecuted instantiation: conntrack.c:atomic_count_dec Unexecuted instantiation: daemon.c:atomic_count_dec Unexecuted instantiation: dpif-netdev.c:atomic_count_dec Unexecuted instantiation: dpif-netdev-private-dfc.c:atomic_count_dec Unexecuted instantiation: dpif-netdev-private-dpif.c:atomic_count_dec Unexecuted instantiation: dpif-netdev-private-extract.c:atomic_count_dec Unexecuted instantiation: dpif-netdev-perf.c:atomic_count_dec Unexecuted instantiation: fat-rwlock.c:atomic_count_dec Unexecuted instantiation: hindex.c:atomic_count_dec Unexecuted instantiation: id-fpool.c:atomic_count_dec Unexecuted instantiation: ipf.c:atomic_count_dec Unexecuted instantiation: learn.c:atomic_count_dec Unexecuted instantiation: lockfile.c:atomic_count_dec Unexecuted instantiation: mpsc-queue.c:atomic_count_dec Unexecuted instantiation: ovs-numa.c:atomic_count_dec Unexecuted instantiation: process.c:atomic_count_dec Unexecuted instantiation: stream-replay.c:atomic_count_dec Unexecuted instantiation: dpdk-stub.c:atomic_count_dec Unexecuted instantiation: vswitch-idl.c:atomic_count_dec Unexecuted instantiation: conntrack-icmp.c:atomic_count_dec Unexecuted instantiation: conntrack-tcp.c:atomic_count_dec Unexecuted instantiation: conntrack-tp.c:atomic_count_dec Unexecuted instantiation: conntrack-other.c:atomic_count_dec Unexecuted instantiation: dpif-netdev-extract-study.c:atomic_count_dec Unexecuted instantiation: dpif-netdev-lookup.c:atomic_count_dec Unexecuted instantiation: dpif-netdev-lookup-autovalidator.c:atomic_count_dec Unexecuted instantiation: dpif-netdev-lookup-generic.c:atomic_count_dec Unexecuted instantiation: ovsdb-data.c:atomic_count_dec Unexecuted instantiation: ovsdb-idl.c:atomic_count_dec Unexecuted instantiation: ovsdb-types.c:atomic_count_dec Unexecuted instantiation: miniflow_target.c:atomic_count_dec Unexecuted instantiation: ofctl_parse_target.c:atomic_count_dec |
470 | | |
471 | | static inline unsigned int |
472 | | atomic_count_get(atomic_count *count) |
473 | 0 | { |
474 | 0 | unsigned int value; |
475 | |
|
476 | 0 | atomic_read_relaxed(&count->count, &value); |
477 | |
|
478 | 0 | return value; |
479 | 0 | } Unexecuted instantiation: flow_extract_target.c:atomic_count_get Unexecuted instantiation: dp-packet.c:atomic_count_get Unexecuted instantiation: flow.c:atomic_count_get Unexecuted instantiation: netdev.c:atomic_count_get Unexecuted instantiation: ofp-msgs.c:atomic_count_get Unexecuted instantiation: ofp-util.c:atomic_count_get Unexecuted instantiation: ovs-rcu.c:atomic_count_get Unexecuted instantiation: ovs-router.c:atomic_count_get Unexecuted instantiation: ovs-thread.c:atomic_count_get Unexecuted instantiation: packets.c:atomic_count_get Unexecuted instantiation: poll-loop.c:atomic_count_get Unexecuted instantiation: pvector.c:atomic_count_get Unexecuted instantiation: random.c:atomic_count_get Unexecuted instantiation: seq.c:atomic_count_get Unexecuted instantiation: socket-util.c:atomic_count_get Unexecuted instantiation: timeval.c:atomic_count_get Unexecuted instantiation: tnl-ports.c:atomic_count_get Unexecuted instantiation: tun-metadata.c:atomic_count_get Unexecuted instantiation: unixctl.c:atomic_count_get Unexecuted instantiation: userspace-tso.c:atomic_count_get Unexecuted instantiation: util.c:atomic_count_get Unexecuted instantiation: uuid.c:atomic_count_get Unexecuted instantiation: vlog.c:atomic_count_get Unexecuted instantiation: netdev-linux.c:atomic_count_get Unexecuted instantiation: netdev-offload-tc.c:atomic_count_get Unexecuted instantiation: netlink-socket.c:atomic_count_get Unexecuted instantiation: route-table.c:atomic_count_get Unexecuted instantiation: tc.c:atomic_count_get Unexecuted instantiation: async-append-aio.c:atomic_count_get Unexecuted instantiation: dirs.c:atomic_count_get Unexecuted instantiation: classifier.c:atomic_count_get Unexecuted instantiation: ccmap.c:atomic_count_get Unexecuted instantiation: cmap.c:atomic_count_get Unexecuted instantiation: command-line.c:atomic_count_get Unexecuted instantiation: connectivity.c:atomic_count_get Unexecuted instantiation: coverage.c:atomic_count_get Unexecuted instantiation: dp-packet-gso.c:atomic_count_get Unexecuted instantiation: dpif.c:atomic_count_get Unexecuted instantiation: fatal-signal.c:atomic_count_get Unexecuted instantiation: guarded-list.c:atomic_count_get Unexecuted instantiation: hmap.c:atomic_count_get Unexecuted instantiation: jsonrpc.c:atomic_count_get Unexecuted instantiation: meta-flow.c:atomic_count_get Unexecuted instantiation: netdev-offload.c:atomic_count_get Unexecuted instantiation: netdev-vport.c:atomic_count_get Unexecuted instantiation: netlink.c:atomic_count_get Unexecuted instantiation: nx-match.c:atomic_count_get Unexecuted instantiation: odp-execute.c:atomic_count_get Unexecuted instantiation: odp-execute-private.c:atomic_count_get Unexecuted instantiation: odp-util.c:atomic_count_get Unexecuted instantiation: ofp-actions.c:atomic_count_get Unexecuted instantiation: ofp-monitor.c:atomic_count_get Unexecuted instantiation: ovs-replay.c:atomic_count_get Unexecuted instantiation: stream.c:atomic_count_get Unexecuted instantiation: tnl-neigh-cache.c:atomic_count_get Unexecuted instantiation: netdev-native-tnl.c:atomic_count_get Unexecuted instantiation: daemon-unix.c:atomic_count_get Unexecuted instantiation: stream-unix.c:atomic_count_get Unexecuted instantiation: dpif-netlink.c:atomic_count_get Unexecuted instantiation: dpif-netlink-rtnl.c:atomic_count_get Unexecuted instantiation: netlink-conntrack.c:atomic_count_get Unexecuted instantiation: netlink-notifier.c:atomic_count_get Unexecuted instantiation: stream-ssl.c:atomic_count_get Unexecuted instantiation: conntrack.c:atomic_count_get Unexecuted instantiation: daemon.c:atomic_count_get Unexecuted instantiation: dpif-netdev.c:atomic_count_get Unexecuted instantiation: dpif-netdev-private-dfc.c:atomic_count_get Unexecuted instantiation: dpif-netdev-private-dpif.c:atomic_count_get Unexecuted instantiation: dpif-netdev-private-extract.c:atomic_count_get Unexecuted instantiation: dpif-netdev-perf.c:atomic_count_get Unexecuted instantiation: fat-rwlock.c:atomic_count_get Unexecuted instantiation: hindex.c:atomic_count_get Unexecuted instantiation: id-fpool.c:atomic_count_get Unexecuted instantiation: ipf.c:atomic_count_get Unexecuted instantiation: learn.c:atomic_count_get Unexecuted instantiation: lockfile.c:atomic_count_get Unexecuted instantiation: mpsc-queue.c:atomic_count_get Unexecuted instantiation: ovs-numa.c:atomic_count_get Unexecuted instantiation: process.c:atomic_count_get Unexecuted instantiation: stream-replay.c:atomic_count_get Unexecuted instantiation: dpdk-stub.c:atomic_count_get Unexecuted instantiation: vswitch-idl.c:atomic_count_get Unexecuted instantiation: conntrack-icmp.c:atomic_count_get Unexecuted instantiation: conntrack-tcp.c:atomic_count_get Unexecuted instantiation: conntrack-tp.c:atomic_count_get Unexecuted instantiation: conntrack-other.c:atomic_count_get Unexecuted instantiation: dpif-netdev-extract-study.c:atomic_count_get Unexecuted instantiation: dpif-netdev-lookup.c:atomic_count_get Unexecuted instantiation: dpif-netdev-lookup-autovalidator.c:atomic_count_get Unexecuted instantiation: dpif-netdev-lookup-generic.c:atomic_count_get Unexecuted instantiation: ovsdb-data.c:atomic_count_get Unexecuted instantiation: ovsdb-idl.c:atomic_count_get Unexecuted instantiation: ovsdb-types.c:atomic_count_get Unexecuted instantiation: miniflow_target.c:atomic_count_get Unexecuted instantiation: ofctl_parse_target.c:atomic_count_get |
480 | | |
481 | | static inline void |
482 | | atomic_count_set(atomic_count *count, unsigned int value) |
483 | 0 | { |
484 | 0 | atomic_store_relaxed(&count->count, value); |
485 | 0 | } Unexecuted instantiation: flow_extract_target.c:atomic_count_set Unexecuted instantiation: dp-packet.c:atomic_count_set Unexecuted instantiation: flow.c:atomic_count_set Unexecuted instantiation: netdev.c:atomic_count_set Unexecuted instantiation: ofp-msgs.c:atomic_count_set Unexecuted instantiation: ofp-util.c:atomic_count_set Unexecuted instantiation: ovs-rcu.c:atomic_count_set Unexecuted instantiation: ovs-router.c:atomic_count_set Unexecuted instantiation: ovs-thread.c:atomic_count_set Unexecuted instantiation: packets.c:atomic_count_set Unexecuted instantiation: poll-loop.c:atomic_count_set Unexecuted instantiation: pvector.c:atomic_count_set Unexecuted instantiation: random.c:atomic_count_set Unexecuted instantiation: seq.c:atomic_count_set Unexecuted instantiation: socket-util.c:atomic_count_set Unexecuted instantiation: timeval.c:atomic_count_set Unexecuted instantiation: tnl-ports.c:atomic_count_set Unexecuted instantiation: tun-metadata.c:atomic_count_set Unexecuted instantiation: unixctl.c:atomic_count_set Unexecuted instantiation: userspace-tso.c:atomic_count_set Unexecuted instantiation: util.c:atomic_count_set Unexecuted instantiation: uuid.c:atomic_count_set Unexecuted instantiation: vlog.c:atomic_count_set Unexecuted instantiation: netdev-linux.c:atomic_count_set Unexecuted instantiation: netdev-offload-tc.c:atomic_count_set Unexecuted instantiation: netlink-socket.c:atomic_count_set Unexecuted instantiation: route-table.c:atomic_count_set Unexecuted instantiation: tc.c:atomic_count_set Unexecuted instantiation: async-append-aio.c:atomic_count_set Unexecuted instantiation: dirs.c:atomic_count_set Unexecuted instantiation: classifier.c:atomic_count_set Unexecuted instantiation: ccmap.c:atomic_count_set Unexecuted instantiation: cmap.c:atomic_count_set Unexecuted instantiation: command-line.c:atomic_count_set Unexecuted instantiation: connectivity.c:atomic_count_set Unexecuted instantiation: coverage.c:atomic_count_set Unexecuted instantiation: dp-packet-gso.c:atomic_count_set Unexecuted instantiation: dpif.c:atomic_count_set Unexecuted instantiation: fatal-signal.c:atomic_count_set Unexecuted instantiation: guarded-list.c:atomic_count_set Unexecuted instantiation: hmap.c:atomic_count_set Unexecuted instantiation: jsonrpc.c:atomic_count_set Unexecuted instantiation: meta-flow.c:atomic_count_set Unexecuted instantiation: netdev-offload.c:atomic_count_set Unexecuted instantiation: netdev-vport.c:atomic_count_set Unexecuted instantiation: netlink.c:atomic_count_set Unexecuted instantiation: nx-match.c:atomic_count_set Unexecuted instantiation: odp-execute.c:atomic_count_set Unexecuted instantiation: odp-execute-private.c:atomic_count_set Unexecuted instantiation: odp-util.c:atomic_count_set Unexecuted instantiation: ofp-actions.c:atomic_count_set Unexecuted instantiation: ofp-monitor.c:atomic_count_set Unexecuted instantiation: ovs-replay.c:atomic_count_set Unexecuted instantiation: stream.c:atomic_count_set Unexecuted instantiation: tnl-neigh-cache.c:atomic_count_set Unexecuted instantiation: netdev-native-tnl.c:atomic_count_set Unexecuted instantiation: daemon-unix.c:atomic_count_set Unexecuted instantiation: stream-unix.c:atomic_count_set Unexecuted instantiation: dpif-netlink.c:atomic_count_set Unexecuted instantiation: dpif-netlink-rtnl.c:atomic_count_set Unexecuted instantiation: netlink-conntrack.c:atomic_count_set Unexecuted instantiation: netlink-notifier.c:atomic_count_set Unexecuted instantiation: stream-ssl.c:atomic_count_set Unexecuted instantiation: conntrack.c:atomic_count_set Unexecuted instantiation: daemon.c:atomic_count_set Unexecuted instantiation: dpif-netdev.c:atomic_count_set Unexecuted instantiation: dpif-netdev-private-dfc.c:atomic_count_set Unexecuted instantiation: dpif-netdev-private-dpif.c:atomic_count_set Unexecuted instantiation: dpif-netdev-private-extract.c:atomic_count_set Unexecuted instantiation: dpif-netdev-perf.c:atomic_count_set Unexecuted instantiation: fat-rwlock.c:atomic_count_set Unexecuted instantiation: hindex.c:atomic_count_set Unexecuted instantiation: id-fpool.c:atomic_count_set Unexecuted instantiation: ipf.c:atomic_count_set Unexecuted instantiation: learn.c:atomic_count_set Unexecuted instantiation: lockfile.c:atomic_count_set Unexecuted instantiation: mpsc-queue.c:atomic_count_set Unexecuted instantiation: ovs-numa.c:atomic_count_set Unexecuted instantiation: process.c:atomic_count_set Unexecuted instantiation: stream-replay.c:atomic_count_set Unexecuted instantiation: dpdk-stub.c:atomic_count_set Unexecuted instantiation: vswitch-idl.c:atomic_count_set Unexecuted instantiation: conntrack-icmp.c:atomic_count_set Unexecuted instantiation: conntrack-tcp.c:atomic_count_set Unexecuted instantiation: conntrack-tp.c:atomic_count_set Unexecuted instantiation: conntrack-other.c:atomic_count_set Unexecuted instantiation: dpif-netdev-extract-study.c:atomic_count_set Unexecuted instantiation: dpif-netdev-lookup.c:atomic_count_set Unexecuted instantiation: dpif-netdev-lookup-autovalidator.c:atomic_count_set Unexecuted instantiation: dpif-netdev-lookup-generic.c:atomic_count_set Unexecuted instantiation: ovsdb-data.c:atomic_count_set Unexecuted instantiation: ovsdb-idl.c:atomic_count_set Unexecuted instantiation: ovsdb-types.c:atomic_count_set Unexecuted instantiation: miniflow_target.c:atomic_count_set Unexecuted instantiation: ofctl_parse_target.c:atomic_count_set |
486 | | |
487 | | static inline uint64_t |
488 | | atomic_count_inc64(atomic_uint64_t *counter) |
489 | 0 | { |
490 | 0 | uint64_t old; |
491 | |
|
492 | 0 | atomic_add_relaxed(counter, 1ull, &old); |
493 | |
|
494 | 0 | return old; |
495 | 0 | } Unexecuted instantiation: flow_extract_target.c:atomic_count_inc64 Unexecuted instantiation: dp-packet.c:atomic_count_inc64 Unexecuted instantiation: flow.c:atomic_count_inc64 Unexecuted instantiation: netdev.c:atomic_count_inc64 Unexecuted instantiation: ofp-msgs.c:atomic_count_inc64 Unexecuted instantiation: ofp-util.c:atomic_count_inc64 Unexecuted instantiation: ovs-rcu.c:atomic_count_inc64 Unexecuted instantiation: ovs-router.c:atomic_count_inc64 Unexecuted instantiation: ovs-thread.c:atomic_count_inc64 Unexecuted instantiation: packets.c:atomic_count_inc64 Unexecuted instantiation: poll-loop.c:atomic_count_inc64 Unexecuted instantiation: pvector.c:atomic_count_inc64 Unexecuted instantiation: random.c:atomic_count_inc64 Unexecuted instantiation: seq.c:atomic_count_inc64 Unexecuted instantiation: socket-util.c:atomic_count_inc64 Unexecuted instantiation: timeval.c:atomic_count_inc64 Unexecuted instantiation: tnl-ports.c:atomic_count_inc64 Unexecuted instantiation: tun-metadata.c:atomic_count_inc64 Unexecuted instantiation: unixctl.c:atomic_count_inc64 Unexecuted instantiation: userspace-tso.c:atomic_count_inc64 Unexecuted instantiation: util.c:atomic_count_inc64 Unexecuted instantiation: uuid.c:atomic_count_inc64 Unexecuted instantiation: vlog.c:atomic_count_inc64 Unexecuted instantiation: netdev-linux.c:atomic_count_inc64 Unexecuted instantiation: netdev-offload-tc.c:atomic_count_inc64 Unexecuted instantiation: netlink-socket.c:atomic_count_inc64 Unexecuted instantiation: route-table.c:atomic_count_inc64 Unexecuted instantiation: tc.c:atomic_count_inc64 Unexecuted instantiation: async-append-aio.c:atomic_count_inc64 Unexecuted instantiation: dirs.c:atomic_count_inc64 Unexecuted instantiation: classifier.c:atomic_count_inc64 Unexecuted instantiation: ccmap.c:atomic_count_inc64 Unexecuted instantiation: cmap.c:atomic_count_inc64 Unexecuted instantiation: command-line.c:atomic_count_inc64 Unexecuted instantiation: connectivity.c:atomic_count_inc64 Unexecuted instantiation: coverage.c:atomic_count_inc64 Unexecuted instantiation: dp-packet-gso.c:atomic_count_inc64 Unexecuted instantiation: dpif.c:atomic_count_inc64 Unexecuted instantiation: fatal-signal.c:atomic_count_inc64 Unexecuted instantiation: guarded-list.c:atomic_count_inc64 Unexecuted instantiation: hmap.c:atomic_count_inc64 Unexecuted instantiation: jsonrpc.c:atomic_count_inc64 Unexecuted instantiation: meta-flow.c:atomic_count_inc64 Unexecuted instantiation: netdev-offload.c:atomic_count_inc64 Unexecuted instantiation: netdev-vport.c:atomic_count_inc64 Unexecuted instantiation: netlink.c:atomic_count_inc64 Unexecuted instantiation: nx-match.c:atomic_count_inc64 Unexecuted instantiation: odp-execute.c:atomic_count_inc64 Unexecuted instantiation: odp-execute-private.c:atomic_count_inc64 Unexecuted instantiation: odp-util.c:atomic_count_inc64 Unexecuted instantiation: ofp-actions.c:atomic_count_inc64 Unexecuted instantiation: ofp-monitor.c:atomic_count_inc64 Unexecuted instantiation: ovs-replay.c:atomic_count_inc64 Unexecuted instantiation: stream.c:atomic_count_inc64 Unexecuted instantiation: tnl-neigh-cache.c:atomic_count_inc64 Unexecuted instantiation: netdev-native-tnl.c:atomic_count_inc64 Unexecuted instantiation: daemon-unix.c:atomic_count_inc64 Unexecuted instantiation: stream-unix.c:atomic_count_inc64 Unexecuted instantiation: dpif-netlink.c:atomic_count_inc64 Unexecuted instantiation: dpif-netlink-rtnl.c:atomic_count_inc64 Unexecuted instantiation: netlink-conntrack.c:atomic_count_inc64 Unexecuted instantiation: netlink-notifier.c:atomic_count_inc64 Unexecuted instantiation: stream-ssl.c:atomic_count_inc64 Unexecuted instantiation: conntrack.c:atomic_count_inc64 Unexecuted instantiation: daemon.c:atomic_count_inc64 Unexecuted instantiation: dpif-netdev.c:atomic_count_inc64 Unexecuted instantiation: dpif-netdev-private-dfc.c:atomic_count_inc64 Unexecuted instantiation: dpif-netdev-private-dpif.c:atomic_count_inc64 Unexecuted instantiation: dpif-netdev-private-extract.c:atomic_count_inc64 Unexecuted instantiation: dpif-netdev-perf.c:atomic_count_inc64 Unexecuted instantiation: fat-rwlock.c:atomic_count_inc64 Unexecuted instantiation: hindex.c:atomic_count_inc64 Unexecuted instantiation: id-fpool.c:atomic_count_inc64 Unexecuted instantiation: ipf.c:atomic_count_inc64 Unexecuted instantiation: learn.c:atomic_count_inc64 Unexecuted instantiation: lockfile.c:atomic_count_inc64 Unexecuted instantiation: mpsc-queue.c:atomic_count_inc64 Unexecuted instantiation: ovs-numa.c:atomic_count_inc64 Unexecuted instantiation: process.c:atomic_count_inc64 Unexecuted instantiation: stream-replay.c:atomic_count_inc64 Unexecuted instantiation: dpdk-stub.c:atomic_count_inc64 Unexecuted instantiation: vswitch-idl.c:atomic_count_inc64 Unexecuted instantiation: conntrack-icmp.c:atomic_count_inc64 Unexecuted instantiation: conntrack-tcp.c:atomic_count_inc64 Unexecuted instantiation: conntrack-tp.c:atomic_count_inc64 Unexecuted instantiation: conntrack-other.c:atomic_count_inc64 Unexecuted instantiation: dpif-netdev-extract-study.c:atomic_count_inc64 Unexecuted instantiation: dpif-netdev-lookup.c:atomic_count_inc64 Unexecuted instantiation: dpif-netdev-lookup-autovalidator.c:atomic_count_inc64 Unexecuted instantiation: dpif-netdev-lookup-generic.c:atomic_count_inc64 Unexecuted instantiation: ovsdb-data.c:atomic_count_inc64 Unexecuted instantiation: ovsdb-idl.c:atomic_count_inc64 Unexecuted instantiation: ovsdb-types.c:atomic_count_inc64 Unexecuted instantiation: miniflow_target.c:atomic_count_inc64 Unexecuted instantiation: ofctl_parse_target.c:atomic_count_inc64 |
496 | | |
497 | | static inline uint64_t |
498 | | atomic_count_dec64(atomic_uint64_t *counter) |
499 | 0 | { |
500 | 0 | uint64_t old; |
501 | |
|
502 | 0 | atomic_sub_relaxed(counter, 1ull, &old); |
503 | |
|
504 | 0 | return old; |
505 | 0 | } Unexecuted instantiation: flow_extract_target.c:atomic_count_dec64 Unexecuted instantiation: dp-packet.c:atomic_count_dec64 Unexecuted instantiation: flow.c:atomic_count_dec64 Unexecuted instantiation: netdev.c:atomic_count_dec64 Unexecuted instantiation: ofp-msgs.c:atomic_count_dec64 Unexecuted instantiation: ofp-util.c:atomic_count_dec64 Unexecuted instantiation: ovs-rcu.c:atomic_count_dec64 Unexecuted instantiation: ovs-router.c:atomic_count_dec64 Unexecuted instantiation: ovs-thread.c:atomic_count_dec64 Unexecuted instantiation: packets.c:atomic_count_dec64 Unexecuted instantiation: poll-loop.c:atomic_count_dec64 Unexecuted instantiation: pvector.c:atomic_count_dec64 Unexecuted instantiation: random.c:atomic_count_dec64 Unexecuted instantiation: seq.c:atomic_count_dec64 Unexecuted instantiation: socket-util.c:atomic_count_dec64 Unexecuted instantiation: timeval.c:atomic_count_dec64 Unexecuted instantiation: tnl-ports.c:atomic_count_dec64 Unexecuted instantiation: tun-metadata.c:atomic_count_dec64 Unexecuted instantiation: unixctl.c:atomic_count_dec64 Unexecuted instantiation: userspace-tso.c:atomic_count_dec64 Unexecuted instantiation: util.c:atomic_count_dec64 Unexecuted instantiation: uuid.c:atomic_count_dec64 Unexecuted instantiation: vlog.c:atomic_count_dec64 Unexecuted instantiation: netdev-linux.c:atomic_count_dec64 Unexecuted instantiation: netdev-offload-tc.c:atomic_count_dec64 Unexecuted instantiation: netlink-socket.c:atomic_count_dec64 Unexecuted instantiation: route-table.c:atomic_count_dec64 Unexecuted instantiation: tc.c:atomic_count_dec64 Unexecuted instantiation: async-append-aio.c:atomic_count_dec64 Unexecuted instantiation: dirs.c:atomic_count_dec64 Unexecuted instantiation: classifier.c:atomic_count_dec64 Unexecuted instantiation: ccmap.c:atomic_count_dec64 Unexecuted instantiation: cmap.c:atomic_count_dec64 Unexecuted instantiation: command-line.c:atomic_count_dec64 Unexecuted instantiation: connectivity.c:atomic_count_dec64 Unexecuted instantiation: coverage.c:atomic_count_dec64 Unexecuted instantiation: dp-packet-gso.c:atomic_count_dec64 Unexecuted instantiation: dpif.c:atomic_count_dec64 Unexecuted instantiation: fatal-signal.c:atomic_count_dec64 Unexecuted instantiation: guarded-list.c:atomic_count_dec64 Unexecuted instantiation: hmap.c:atomic_count_dec64 Unexecuted instantiation: jsonrpc.c:atomic_count_dec64 Unexecuted instantiation: meta-flow.c:atomic_count_dec64 Unexecuted instantiation: netdev-offload.c:atomic_count_dec64 Unexecuted instantiation: netdev-vport.c:atomic_count_dec64 Unexecuted instantiation: netlink.c:atomic_count_dec64 Unexecuted instantiation: nx-match.c:atomic_count_dec64 Unexecuted instantiation: odp-execute.c:atomic_count_dec64 Unexecuted instantiation: odp-execute-private.c:atomic_count_dec64 Unexecuted instantiation: odp-util.c:atomic_count_dec64 Unexecuted instantiation: ofp-actions.c:atomic_count_dec64 Unexecuted instantiation: ofp-monitor.c:atomic_count_dec64 Unexecuted instantiation: ovs-replay.c:atomic_count_dec64 Unexecuted instantiation: stream.c:atomic_count_dec64 Unexecuted instantiation: tnl-neigh-cache.c:atomic_count_dec64 Unexecuted instantiation: netdev-native-tnl.c:atomic_count_dec64 Unexecuted instantiation: daemon-unix.c:atomic_count_dec64 Unexecuted instantiation: stream-unix.c:atomic_count_dec64 Unexecuted instantiation: dpif-netlink.c:atomic_count_dec64 Unexecuted instantiation: dpif-netlink-rtnl.c:atomic_count_dec64 Unexecuted instantiation: netlink-conntrack.c:atomic_count_dec64 Unexecuted instantiation: netlink-notifier.c:atomic_count_dec64 Unexecuted instantiation: stream-ssl.c:atomic_count_dec64 Unexecuted instantiation: conntrack.c:atomic_count_dec64 Unexecuted instantiation: daemon.c:atomic_count_dec64 Unexecuted instantiation: dpif-netdev.c:atomic_count_dec64 Unexecuted instantiation: dpif-netdev-private-dfc.c:atomic_count_dec64 Unexecuted instantiation: dpif-netdev-private-dpif.c:atomic_count_dec64 Unexecuted instantiation: dpif-netdev-private-extract.c:atomic_count_dec64 Unexecuted instantiation: dpif-netdev-perf.c:atomic_count_dec64 Unexecuted instantiation: fat-rwlock.c:atomic_count_dec64 Unexecuted instantiation: hindex.c:atomic_count_dec64 Unexecuted instantiation: id-fpool.c:atomic_count_dec64 Unexecuted instantiation: ipf.c:atomic_count_dec64 Unexecuted instantiation: learn.c:atomic_count_dec64 Unexecuted instantiation: lockfile.c:atomic_count_dec64 Unexecuted instantiation: mpsc-queue.c:atomic_count_dec64 Unexecuted instantiation: ovs-numa.c:atomic_count_dec64 Unexecuted instantiation: process.c:atomic_count_dec64 Unexecuted instantiation: stream-replay.c:atomic_count_dec64 Unexecuted instantiation: dpdk-stub.c:atomic_count_dec64 Unexecuted instantiation: vswitch-idl.c:atomic_count_dec64 Unexecuted instantiation: conntrack-icmp.c:atomic_count_dec64 Unexecuted instantiation: conntrack-tcp.c:atomic_count_dec64 Unexecuted instantiation: conntrack-tp.c:atomic_count_dec64 Unexecuted instantiation: conntrack-other.c:atomic_count_dec64 Unexecuted instantiation: dpif-netdev-extract-study.c:atomic_count_dec64 Unexecuted instantiation: dpif-netdev-lookup.c:atomic_count_dec64 Unexecuted instantiation: dpif-netdev-lookup-autovalidator.c:atomic_count_dec64 Unexecuted instantiation: dpif-netdev-lookup-generic.c:atomic_count_dec64 Unexecuted instantiation: ovsdb-data.c:atomic_count_dec64 Unexecuted instantiation: ovsdb-idl.c:atomic_count_dec64 Unexecuted instantiation: ovsdb-types.c:atomic_count_dec64 Unexecuted instantiation: miniflow_target.c:atomic_count_dec64 Unexecuted instantiation: ofctl_parse_target.c:atomic_count_dec64 |
506 | | |
507 | | static inline uint64_t |
508 | | atomic_count_get64(atomic_uint64_t *counter) |
509 | 0 | { |
510 | 0 | uint64_t value; |
511 | 0 |
|
512 | 0 | atomic_read_relaxed(counter, &value); |
513 | 0 |
|
514 | 0 | return value; |
515 | 0 | } Unexecuted instantiation: flow_extract_target.c:atomic_count_get64 Unexecuted instantiation: dp-packet.c:atomic_count_get64 Unexecuted instantiation: flow.c:atomic_count_get64 Unexecuted instantiation: netdev.c:atomic_count_get64 Unexecuted instantiation: ofp-msgs.c:atomic_count_get64 Unexecuted instantiation: ofp-util.c:atomic_count_get64 Unexecuted instantiation: ovs-rcu.c:atomic_count_get64 Unexecuted instantiation: ovs-router.c:atomic_count_get64 Unexecuted instantiation: ovs-thread.c:atomic_count_get64 Unexecuted instantiation: packets.c:atomic_count_get64 Unexecuted instantiation: poll-loop.c:atomic_count_get64 Unexecuted instantiation: pvector.c:atomic_count_get64 Unexecuted instantiation: random.c:atomic_count_get64 Unexecuted instantiation: seq.c:atomic_count_get64 Unexecuted instantiation: socket-util.c:atomic_count_get64 Unexecuted instantiation: timeval.c:atomic_count_get64 Unexecuted instantiation: tnl-ports.c:atomic_count_get64 Unexecuted instantiation: tun-metadata.c:atomic_count_get64 Unexecuted instantiation: unixctl.c:atomic_count_get64 Unexecuted instantiation: userspace-tso.c:atomic_count_get64 Unexecuted instantiation: util.c:atomic_count_get64 Unexecuted instantiation: uuid.c:atomic_count_get64 Unexecuted instantiation: vlog.c:atomic_count_get64 Unexecuted instantiation: netdev-linux.c:atomic_count_get64 Unexecuted instantiation: netdev-offload-tc.c:atomic_count_get64 Unexecuted instantiation: netlink-socket.c:atomic_count_get64 Unexecuted instantiation: route-table.c:atomic_count_get64 Unexecuted instantiation: tc.c:atomic_count_get64 Unexecuted instantiation: async-append-aio.c:atomic_count_get64 Unexecuted instantiation: dirs.c:atomic_count_get64 Unexecuted instantiation: classifier.c:atomic_count_get64 Unexecuted instantiation: ccmap.c:atomic_count_get64 Unexecuted instantiation: cmap.c:atomic_count_get64 Unexecuted instantiation: command-line.c:atomic_count_get64 Unexecuted instantiation: connectivity.c:atomic_count_get64 Unexecuted instantiation: coverage.c:atomic_count_get64 Unexecuted instantiation: dp-packet-gso.c:atomic_count_get64 Unexecuted instantiation: dpif.c:atomic_count_get64 Unexecuted instantiation: fatal-signal.c:atomic_count_get64 Unexecuted instantiation: guarded-list.c:atomic_count_get64 Unexecuted instantiation: hmap.c:atomic_count_get64 Unexecuted instantiation: jsonrpc.c:atomic_count_get64 Unexecuted instantiation: meta-flow.c:atomic_count_get64 Unexecuted instantiation: netdev-offload.c:atomic_count_get64 Unexecuted instantiation: netdev-vport.c:atomic_count_get64 Unexecuted instantiation: netlink.c:atomic_count_get64 Unexecuted instantiation: nx-match.c:atomic_count_get64 Unexecuted instantiation: odp-execute.c:atomic_count_get64 Unexecuted instantiation: odp-execute-private.c:atomic_count_get64 Unexecuted instantiation: odp-util.c:atomic_count_get64 Unexecuted instantiation: ofp-actions.c:atomic_count_get64 Unexecuted instantiation: ofp-monitor.c:atomic_count_get64 Unexecuted instantiation: ovs-replay.c:atomic_count_get64 Unexecuted instantiation: stream.c:atomic_count_get64 Unexecuted instantiation: tnl-neigh-cache.c:atomic_count_get64 Unexecuted instantiation: netdev-native-tnl.c:atomic_count_get64 Unexecuted instantiation: daemon-unix.c:atomic_count_get64 Unexecuted instantiation: stream-unix.c:atomic_count_get64 Unexecuted instantiation: dpif-netlink.c:atomic_count_get64 Unexecuted instantiation: dpif-netlink-rtnl.c:atomic_count_get64 Unexecuted instantiation: netlink-conntrack.c:atomic_count_get64 Unexecuted instantiation: netlink-notifier.c:atomic_count_get64 Unexecuted instantiation: stream-ssl.c:atomic_count_get64 Unexecuted instantiation: conntrack.c:atomic_count_get64 Unexecuted instantiation: daemon.c:atomic_count_get64 Unexecuted instantiation: dpif-netdev.c:atomic_count_get64 Unexecuted instantiation: dpif-netdev-private-dfc.c:atomic_count_get64 Unexecuted instantiation: dpif-netdev-private-dpif.c:atomic_count_get64 Unexecuted instantiation: dpif-netdev-private-extract.c:atomic_count_get64 Unexecuted instantiation: dpif-netdev-perf.c:atomic_count_get64 Unexecuted instantiation: fat-rwlock.c:atomic_count_get64 Unexecuted instantiation: hindex.c:atomic_count_get64 Unexecuted instantiation: id-fpool.c:atomic_count_get64 Unexecuted instantiation: ipf.c:atomic_count_get64 Unexecuted instantiation: learn.c:atomic_count_get64 Unexecuted instantiation: lockfile.c:atomic_count_get64 Unexecuted instantiation: mpsc-queue.c:atomic_count_get64 Unexecuted instantiation: ovs-numa.c:atomic_count_get64 Unexecuted instantiation: process.c:atomic_count_get64 Unexecuted instantiation: stream-replay.c:atomic_count_get64 Unexecuted instantiation: dpdk-stub.c:atomic_count_get64 Unexecuted instantiation: vswitch-idl.c:atomic_count_get64 Unexecuted instantiation: conntrack-icmp.c:atomic_count_get64 Unexecuted instantiation: conntrack-tcp.c:atomic_count_get64 Unexecuted instantiation: conntrack-tp.c:atomic_count_get64 Unexecuted instantiation: conntrack-other.c:atomic_count_get64 Unexecuted instantiation: dpif-netdev-extract-study.c:atomic_count_get64 Unexecuted instantiation: dpif-netdev-lookup.c:atomic_count_get64 Unexecuted instantiation: dpif-netdev-lookup-autovalidator.c:atomic_count_get64 Unexecuted instantiation: dpif-netdev-lookup-generic.c:atomic_count_get64 Unexecuted instantiation: ovsdb-data.c:atomic_count_get64 Unexecuted instantiation: ovsdb-idl.c:atomic_count_get64 Unexecuted instantiation: ovsdb-types.c:atomic_count_get64 Unexecuted instantiation: miniflow_target.c:atomic_count_get64 Unexecuted instantiation: ofctl_parse_target.c:atomic_count_get64 |
516 | | |
517 | | static inline void |
518 | | atomic_count_set64(atomic_uint64_t *counter, uint64_t value) |
519 | 0 | { |
520 | 0 | atomic_store_relaxed(counter, value); |
521 | 0 | } Unexecuted instantiation: flow_extract_target.c:atomic_count_set64 Unexecuted instantiation: dp-packet.c:atomic_count_set64 Unexecuted instantiation: flow.c:atomic_count_set64 Unexecuted instantiation: netdev.c:atomic_count_set64 Unexecuted instantiation: ofp-msgs.c:atomic_count_set64 Unexecuted instantiation: ofp-util.c:atomic_count_set64 Unexecuted instantiation: ovs-rcu.c:atomic_count_set64 Unexecuted instantiation: ovs-router.c:atomic_count_set64 Unexecuted instantiation: ovs-thread.c:atomic_count_set64 Unexecuted instantiation: packets.c:atomic_count_set64 Unexecuted instantiation: poll-loop.c:atomic_count_set64 Unexecuted instantiation: pvector.c:atomic_count_set64 Unexecuted instantiation: random.c:atomic_count_set64 Unexecuted instantiation: seq.c:atomic_count_set64 Unexecuted instantiation: socket-util.c:atomic_count_set64 Unexecuted instantiation: timeval.c:atomic_count_set64 Unexecuted instantiation: tnl-ports.c:atomic_count_set64 Unexecuted instantiation: tun-metadata.c:atomic_count_set64 Unexecuted instantiation: unixctl.c:atomic_count_set64 Unexecuted instantiation: userspace-tso.c:atomic_count_set64 Unexecuted instantiation: util.c:atomic_count_set64 Unexecuted instantiation: uuid.c:atomic_count_set64 Unexecuted instantiation: vlog.c:atomic_count_set64 Unexecuted instantiation: netdev-linux.c:atomic_count_set64 Unexecuted instantiation: netdev-offload-tc.c:atomic_count_set64 Unexecuted instantiation: netlink-socket.c:atomic_count_set64 Unexecuted instantiation: route-table.c:atomic_count_set64 Unexecuted instantiation: tc.c:atomic_count_set64 Unexecuted instantiation: async-append-aio.c:atomic_count_set64 Unexecuted instantiation: dirs.c:atomic_count_set64 Unexecuted instantiation: classifier.c:atomic_count_set64 Unexecuted instantiation: ccmap.c:atomic_count_set64 Unexecuted instantiation: cmap.c:atomic_count_set64 Unexecuted instantiation: command-line.c:atomic_count_set64 Unexecuted instantiation: connectivity.c:atomic_count_set64 Unexecuted instantiation: coverage.c:atomic_count_set64 Unexecuted instantiation: dp-packet-gso.c:atomic_count_set64 Unexecuted instantiation: dpif.c:atomic_count_set64 Unexecuted instantiation: fatal-signal.c:atomic_count_set64 Unexecuted instantiation: guarded-list.c:atomic_count_set64 Unexecuted instantiation: hmap.c:atomic_count_set64 Unexecuted instantiation: jsonrpc.c:atomic_count_set64 Unexecuted instantiation: meta-flow.c:atomic_count_set64 Unexecuted instantiation: netdev-offload.c:atomic_count_set64 Unexecuted instantiation: netdev-vport.c:atomic_count_set64 Unexecuted instantiation: netlink.c:atomic_count_set64 Unexecuted instantiation: nx-match.c:atomic_count_set64 Unexecuted instantiation: odp-execute.c:atomic_count_set64 Unexecuted instantiation: odp-execute-private.c:atomic_count_set64 Unexecuted instantiation: odp-util.c:atomic_count_set64 Unexecuted instantiation: ofp-actions.c:atomic_count_set64 Unexecuted instantiation: ofp-monitor.c:atomic_count_set64 Unexecuted instantiation: ovs-replay.c:atomic_count_set64 Unexecuted instantiation: stream.c:atomic_count_set64 Unexecuted instantiation: tnl-neigh-cache.c:atomic_count_set64 Unexecuted instantiation: netdev-native-tnl.c:atomic_count_set64 Unexecuted instantiation: daemon-unix.c:atomic_count_set64 Unexecuted instantiation: stream-unix.c:atomic_count_set64 Unexecuted instantiation: dpif-netlink.c:atomic_count_set64 Unexecuted instantiation: dpif-netlink-rtnl.c:atomic_count_set64 Unexecuted instantiation: netlink-conntrack.c:atomic_count_set64 Unexecuted instantiation: netlink-notifier.c:atomic_count_set64 Unexecuted instantiation: stream-ssl.c:atomic_count_set64 Unexecuted instantiation: conntrack.c:atomic_count_set64 Unexecuted instantiation: daemon.c:atomic_count_set64 Unexecuted instantiation: dpif-netdev.c:atomic_count_set64 Unexecuted instantiation: dpif-netdev-private-dfc.c:atomic_count_set64 Unexecuted instantiation: dpif-netdev-private-dpif.c:atomic_count_set64 Unexecuted instantiation: dpif-netdev-private-extract.c:atomic_count_set64 Unexecuted instantiation: dpif-netdev-perf.c:atomic_count_set64 Unexecuted instantiation: fat-rwlock.c:atomic_count_set64 Unexecuted instantiation: hindex.c:atomic_count_set64 Unexecuted instantiation: id-fpool.c:atomic_count_set64 Unexecuted instantiation: ipf.c:atomic_count_set64 Unexecuted instantiation: learn.c:atomic_count_set64 Unexecuted instantiation: lockfile.c:atomic_count_set64 Unexecuted instantiation: mpsc-queue.c:atomic_count_set64 Unexecuted instantiation: ovs-numa.c:atomic_count_set64 Unexecuted instantiation: process.c:atomic_count_set64 Unexecuted instantiation: stream-replay.c:atomic_count_set64 Unexecuted instantiation: dpdk-stub.c:atomic_count_set64 Unexecuted instantiation: vswitch-idl.c:atomic_count_set64 Unexecuted instantiation: conntrack-icmp.c:atomic_count_set64 Unexecuted instantiation: conntrack-tcp.c:atomic_count_set64 Unexecuted instantiation: conntrack-tp.c:atomic_count_set64 Unexecuted instantiation: conntrack-other.c:atomic_count_set64 Unexecuted instantiation: dpif-netdev-extract-study.c:atomic_count_set64 Unexecuted instantiation: dpif-netdev-lookup.c:atomic_count_set64 Unexecuted instantiation: dpif-netdev-lookup-autovalidator.c:atomic_count_set64 Unexecuted instantiation: dpif-netdev-lookup-generic.c:atomic_count_set64 Unexecuted instantiation: ovsdb-data.c:atomic_count_set64 Unexecuted instantiation: ovsdb-idl.c:atomic_count_set64 Unexecuted instantiation: ovsdb-types.c:atomic_count_set64 Unexecuted instantiation: miniflow_target.c:atomic_count_set64 Unexecuted instantiation: ofctl_parse_target.c:atomic_count_set64 |
522 | | |
523 | | /* Reference count. */ |
524 | | struct ovs_refcount { |
525 | | atomic_uint count; |
526 | | }; |
527 | | |
528 | | /* Initializes 'refcount'. The reference count is initially 1. */ |
529 | | static inline void |
530 | | ovs_refcount_init(struct ovs_refcount *refcount) |
531 | 0 | { |
532 | 0 | atomic_init(&refcount->count, 1u); |
533 | 0 | } Unexecuted instantiation: flow_extract_target.c:ovs_refcount_init Unexecuted instantiation: dp-packet.c:ovs_refcount_init Unexecuted instantiation: flow.c:ovs_refcount_init Unexecuted instantiation: netdev.c:ovs_refcount_init Unexecuted instantiation: ofp-msgs.c:ovs_refcount_init Unexecuted instantiation: ofp-util.c:ovs_refcount_init Unexecuted instantiation: ovs-rcu.c:ovs_refcount_init Unexecuted instantiation: ovs-router.c:ovs_refcount_init Unexecuted instantiation: ovs-thread.c:ovs_refcount_init Unexecuted instantiation: packets.c:ovs_refcount_init Unexecuted instantiation: poll-loop.c:ovs_refcount_init Unexecuted instantiation: pvector.c:ovs_refcount_init Unexecuted instantiation: random.c:ovs_refcount_init Unexecuted instantiation: seq.c:ovs_refcount_init Unexecuted instantiation: socket-util.c:ovs_refcount_init Unexecuted instantiation: timeval.c:ovs_refcount_init Unexecuted instantiation: tnl-ports.c:ovs_refcount_init Unexecuted instantiation: tun-metadata.c:ovs_refcount_init Unexecuted instantiation: unixctl.c:ovs_refcount_init Unexecuted instantiation: userspace-tso.c:ovs_refcount_init Unexecuted instantiation: util.c:ovs_refcount_init Unexecuted instantiation: uuid.c:ovs_refcount_init Unexecuted instantiation: vlog.c:ovs_refcount_init Unexecuted instantiation: netdev-linux.c:ovs_refcount_init Unexecuted instantiation: netdev-offload-tc.c:ovs_refcount_init Unexecuted instantiation: netlink-socket.c:ovs_refcount_init Unexecuted instantiation: route-table.c:ovs_refcount_init Unexecuted instantiation: tc.c:ovs_refcount_init Unexecuted instantiation: async-append-aio.c:ovs_refcount_init Unexecuted instantiation: dirs.c:ovs_refcount_init Unexecuted instantiation: classifier.c:ovs_refcount_init Unexecuted instantiation: ccmap.c:ovs_refcount_init Unexecuted instantiation: cmap.c:ovs_refcount_init Unexecuted instantiation: command-line.c:ovs_refcount_init Unexecuted instantiation: connectivity.c:ovs_refcount_init Unexecuted instantiation: coverage.c:ovs_refcount_init Unexecuted instantiation: dp-packet-gso.c:ovs_refcount_init Unexecuted instantiation: dpif.c:ovs_refcount_init Unexecuted instantiation: fatal-signal.c:ovs_refcount_init Unexecuted instantiation: guarded-list.c:ovs_refcount_init Unexecuted instantiation: hmap.c:ovs_refcount_init Unexecuted instantiation: jsonrpc.c:ovs_refcount_init Unexecuted instantiation: meta-flow.c:ovs_refcount_init Unexecuted instantiation: netdev-offload.c:ovs_refcount_init Unexecuted instantiation: netdev-vport.c:ovs_refcount_init Unexecuted instantiation: netlink.c:ovs_refcount_init Unexecuted instantiation: nx-match.c:ovs_refcount_init Unexecuted instantiation: odp-execute.c:ovs_refcount_init Unexecuted instantiation: odp-execute-private.c:ovs_refcount_init Unexecuted instantiation: odp-util.c:ovs_refcount_init Unexecuted instantiation: ofp-actions.c:ovs_refcount_init Unexecuted instantiation: ofp-monitor.c:ovs_refcount_init Unexecuted instantiation: ovs-replay.c:ovs_refcount_init Unexecuted instantiation: stream.c:ovs_refcount_init Unexecuted instantiation: tnl-neigh-cache.c:ovs_refcount_init Unexecuted instantiation: netdev-native-tnl.c:ovs_refcount_init Unexecuted instantiation: daemon-unix.c:ovs_refcount_init Unexecuted instantiation: stream-unix.c:ovs_refcount_init Unexecuted instantiation: dpif-netlink.c:ovs_refcount_init Unexecuted instantiation: dpif-netlink-rtnl.c:ovs_refcount_init Unexecuted instantiation: netlink-conntrack.c:ovs_refcount_init Unexecuted instantiation: netlink-notifier.c:ovs_refcount_init Unexecuted instantiation: stream-ssl.c:ovs_refcount_init Unexecuted instantiation: conntrack.c:ovs_refcount_init Unexecuted instantiation: daemon.c:ovs_refcount_init Unexecuted instantiation: dpif-netdev.c:ovs_refcount_init Unexecuted instantiation: dpif-netdev-private-dfc.c:ovs_refcount_init Unexecuted instantiation: dpif-netdev-private-dpif.c:ovs_refcount_init Unexecuted instantiation: dpif-netdev-private-extract.c:ovs_refcount_init Unexecuted instantiation: dpif-netdev-perf.c:ovs_refcount_init Unexecuted instantiation: fat-rwlock.c:ovs_refcount_init Unexecuted instantiation: hindex.c:ovs_refcount_init Unexecuted instantiation: id-fpool.c:ovs_refcount_init Unexecuted instantiation: ipf.c:ovs_refcount_init Unexecuted instantiation: learn.c:ovs_refcount_init Unexecuted instantiation: lockfile.c:ovs_refcount_init Unexecuted instantiation: mpsc-queue.c:ovs_refcount_init Unexecuted instantiation: ovs-numa.c:ovs_refcount_init Unexecuted instantiation: process.c:ovs_refcount_init Unexecuted instantiation: stream-replay.c:ovs_refcount_init Unexecuted instantiation: dpdk-stub.c:ovs_refcount_init Unexecuted instantiation: vswitch-idl.c:ovs_refcount_init Unexecuted instantiation: conntrack-icmp.c:ovs_refcount_init Unexecuted instantiation: conntrack-tcp.c:ovs_refcount_init Unexecuted instantiation: conntrack-tp.c:ovs_refcount_init Unexecuted instantiation: conntrack-other.c:ovs_refcount_init Unexecuted instantiation: dpif-netdev-extract-study.c:ovs_refcount_init Unexecuted instantiation: dpif-netdev-lookup.c:ovs_refcount_init Unexecuted instantiation: dpif-netdev-lookup-autovalidator.c:ovs_refcount_init Unexecuted instantiation: dpif-netdev-lookup-generic.c:ovs_refcount_init Unexecuted instantiation: ovsdb-data.c:ovs_refcount_init Unexecuted instantiation: ovsdb-idl.c:ovs_refcount_init Unexecuted instantiation: ovsdb-types.c:ovs_refcount_init Unexecuted instantiation: miniflow_target.c:ovs_refcount_init Unexecuted instantiation: ofctl_parse_target.c:ovs_refcount_init |
534 | | |
535 | | /* Increments 'refcount'. |
536 | | * |
537 | | * Does not provide a memory barrier, as the calling thread must have |
538 | | * protected access to the object already. */ |
539 | | static inline void |
540 | | ovs_refcount_ref(struct ovs_refcount *refcount) |
541 | 0 | { |
542 | 0 | unsigned int old_refcount; |
543 | |
|
544 | 0 | atomic_add_explicit(&refcount->count, 1u, &old_refcount, |
545 | 0 | memory_order_relaxed); |
546 | 0 | ovs_assert(old_refcount > 0); |
547 | 0 | } Unexecuted instantiation: flow_extract_target.c:ovs_refcount_ref Unexecuted instantiation: dp-packet.c:ovs_refcount_ref Unexecuted instantiation: flow.c:ovs_refcount_ref Unexecuted instantiation: netdev.c:ovs_refcount_ref Unexecuted instantiation: ofp-msgs.c:ovs_refcount_ref Unexecuted instantiation: ofp-util.c:ovs_refcount_ref Unexecuted instantiation: ovs-rcu.c:ovs_refcount_ref Unexecuted instantiation: ovs-router.c:ovs_refcount_ref Unexecuted instantiation: ovs-thread.c:ovs_refcount_ref Unexecuted instantiation: packets.c:ovs_refcount_ref Unexecuted instantiation: poll-loop.c:ovs_refcount_ref Unexecuted instantiation: pvector.c:ovs_refcount_ref Unexecuted instantiation: random.c:ovs_refcount_ref Unexecuted instantiation: seq.c:ovs_refcount_ref Unexecuted instantiation: socket-util.c:ovs_refcount_ref Unexecuted instantiation: timeval.c:ovs_refcount_ref Unexecuted instantiation: tnl-ports.c:ovs_refcount_ref Unexecuted instantiation: tun-metadata.c:ovs_refcount_ref Unexecuted instantiation: unixctl.c:ovs_refcount_ref Unexecuted instantiation: userspace-tso.c:ovs_refcount_ref Unexecuted instantiation: util.c:ovs_refcount_ref Unexecuted instantiation: uuid.c:ovs_refcount_ref Unexecuted instantiation: vlog.c:ovs_refcount_ref Unexecuted instantiation: netdev-linux.c:ovs_refcount_ref Unexecuted instantiation: netdev-offload-tc.c:ovs_refcount_ref Unexecuted instantiation: netlink-socket.c:ovs_refcount_ref Unexecuted instantiation: route-table.c:ovs_refcount_ref Unexecuted instantiation: tc.c:ovs_refcount_ref Unexecuted instantiation: async-append-aio.c:ovs_refcount_ref Unexecuted instantiation: dirs.c:ovs_refcount_ref Unexecuted instantiation: classifier.c:ovs_refcount_ref Unexecuted instantiation: ccmap.c:ovs_refcount_ref Unexecuted instantiation: cmap.c:ovs_refcount_ref Unexecuted instantiation: command-line.c:ovs_refcount_ref Unexecuted instantiation: connectivity.c:ovs_refcount_ref Unexecuted instantiation: coverage.c:ovs_refcount_ref Unexecuted instantiation: dp-packet-gso.c:ovs_refcount_ref Unexecuted instantiation: dpif.c:ovs_refcount_ref Unexecuted instantiation: fatal-signal.c:ovs_refcount_ref Unexecuted instantiation: guarded-list.c:ovs_refcount_ref Unexecuted instantiation: hmap.c:ovs_refcount_ref Unexecuted instantiation: jsonrpc.c:ovs_refcount_ref Unexecuted instantiation: meta-flow.c:ovs_refcount_ref Unexecuted instantiation: netdev-offload.c:ovs_refcount_ref Unexecuted instantiation: netdev-vport.c:ovs_refcount_ref Unexecuted instantiation: netlink.c:ovs_refcount_ref Unexecuted instantiation: nx-match.c:ovs_refcount_ref Unexecuted instantiation: odp-execute.c:ovs_refcount_ref Unexecuted instantiation: odp-execute-private.c:ovs_refcount_ref Unexecuted instantiation: odp-util.c:ovs_refcount_ref Unexecuted instantiation: ofp-actions.c:ovs_refcount_ref Unexecuted instantiation: ofp-monitor.c:ovs_refcount_ref Unexecuted instantiation: ovs-replay.c:ovs_refcount_ref Unexecuted instantiation: stream.c:ovs_refcount_ref Unexecuted instantiation: tnl-neigh-cache.c:ovs_refcount_ref Unexecuted instantiation: netdev-native-tnl.c:ovs_refcount_ref Unexecuted instantiation: daemon-unix.c:ovs_refcount_ref Unexecuted instantiation: stream-unix.c:ovs_refcount_ref Unexecuted instantiation: dpif-netlink.c:ovs_refcount_ref Unexecuted instantiation: dpif-netlink-rtnl.c:ovs_refcount_ref Unexecuted instantiation: netlink-conntrack.c:ovs_refcount_ref Unexecuted instantiation: netlink-notifier.c:ovs_refcount_ref Unexecuted instantiation: stream-ssl.c:ovs_refcount_ref Unexecuted instantiation: conntrack.c:ovs_refcount_ref Unexecuted instantiation: daemon.c:ovs_refcount_ref Unexecuted instantiation: dpif-netdev.c:ovs_refcount_ref Unexecuted instantiation: dpif-netdev-private-dfc.c:ovs_refcount_ref Unexecuted instantiation: dpif-netdev-private-dpif.c:ovs_refcount_ref Unexecuted instantiation: dpif-netdev-private-extract.c:ovs_refcount_ref Unexecuted instantiation: dpif-netdev-perf.c:ovs_refcount_ref Unexecuted instantiation: fat-rwlock.c:ovs_refcount_ref Unexecuted instantiation: hindex.c:ovs_refcount_ref Unexecuted instantiation: id-fpool.c:ovs_refcount_ref Unexecuted instantiation: ipf.c:ovs_refcount_ref Unexecuted instantiation: learn.c:ovs_refcount_ref Unexecuted instantiation: lockfile.c:ovs_refcount_ref Unexecuted instantiation: mpsc-queue.c:ovs_refcount_ref Unexecuted instantiation: ovs-numa.c:ovs_refcount_ref Unexecuted instantiation: process.c:ovs_refcount_ref Unexecuted instantiation: stream-replay.c:ovs_refcount_ref Unexecuted instantiation: dpdk-stub.c:ovs_refcount_ref Unexecuted instantiation: vswitch-idl.c:ovs_refcount_ref Unexecuted instantiation: conntrack-icmp.c:ovs_refcount_ref Unexecuted instantiation: conntrack-tcp.c:ovs_refcount_ref Unexecuted instantiation: conntrack-tp.c:ovs_refcount_ref Unexecuted instantiation: conntrack-other.c:ovs_refcount_ref Unexecuted instantiation: dpif-netdev-extract-study.c:ovs_refcount_ref Unexecuted instantiation: dpif-netdev-lookup.c:ovs_refcount_ref Unexecuted instantiation: dpif-netdev-lookup-autovalidator.c:ovs_refcount_ref Unexecuted instantiation: dpif-netdev-lookup-generic.c:ovs_refcount_ref Unexecuted instantiation: ovsdb-data.c:ovs_refcount_ref Unexecuted instantiation: ovsdb-idl.c:ovs_refcount_ref Unexecuted instantiation: ovsdb-types.c:ovs_refcount_ref Unexecuted instantiation: miniflow_target.c:ovs_refcount_ref Unexecuted instantiation: ofctl_parse_target.c:ovs_refcount_ref |
548 | | |
549 | | /* Decrements 'refcount' and returns the previous reference count. Often used |
550 | | * in this form: |
551 | | * |
552 | | * if (ovs_refcount_unref(&object->ref_cnt) == 1) { |
553 | | * ...uninitialize object... |
554 | | * free(object); |
555 | | * } |
556 | | * |
557 | | * Provides a release barrier making the preceding loads and stores to not be |
558 | | * reordered after the unref, and in case of the last reference provides also |
559 | | * an acquire barrier to keep all the following uninitialization from being |
560 | | * reordered before the atomic decrement operation. Together these synchronize |
561 | | * any concurrent unref operations between each other. */ |
562 | | static inline unsigned int |
563 | | ovs_refcount_unref(struct ovs_refcount *refcount) |
564 | 0 | { |
565 | 0 | unsigned int old_refcount; |
566 | |
|
567 | 0 | atomic_sub_explicit(&refcount->count, 1u, &old_refcount, |
568 | 0 | memory_order_release); |
569 | 0 | ovs_assert(old_refcount > 0); |
570 | 0 | if (old_refcount == 1) { |
571 | | /* 'memory_order_release' above means that there are no (reordered) |
572 | | * accesses to the protected object from any thread at this point. |
573 | | * An acquire barrier is needed to keep all subsequent access to the |
574 | | * object's memory from being reordered before the atomic operation |
575 | | * above. */ |
576 | 0 | atomic_thread_fence(memory_order_acquire); |
577 | 0 | } |
578 | 0 | return old_refcount; |
579 | 0 | } Unexecuted instantiation: flow_extract_target.c:ovs_refcount_unref Unexecuted instantiation: dp-packet.c:ovs_refcount_unref Unexecuted instantiation: flow.c:ovs_refcount_unref Unexecuted instantiation: netdev.c:ovs_refcount_unref Unexecuted instantiation: ofp-msgs.c:ovs_refcount_unref Unexecuted instantiation: ofp-util.c:ovs_refcount_unref Unexecuted instantiation: ovs-rcu.c:ovs_refcount_unref Unexecuted instantiation: ovs-router.c:ovs_refcount_unref Unexecuted instantiation: ovs-thread.c:ovs_refcount_unref Unexecuted instantiation: packets.c:ovs_refcount_unref Unexecuted instantiation: poll-loop.c:ovs_refcount_unref Unexecuted instantiation: pvector.c:ovs_refcount_unref Unexecuted instantiation: random.c:ovs_refcount_unref Unexecuted instantiation: seq.c:ovs_refcount_unref Unexecuted instantiation: socket-util.c:ovs_refcount_unref Unexecuted instantiation: timeval.c:ovs_refcount_unref Unexecuted instantiation: tnl-ports.c:ovs_refcount_unref Unexecuted instantiation: tun-metadata.c:ovs_refcount_unref Unexecuted instantiation: unixctl.c:ovs_refcount_unref Unexecuted instantiation: userspace-tso.c:ovs_refcount_unref Unexecuted instantiation: util.c:ovs_refcount_unref Unexecuted instantiation: uuid.c:ovs_refcount_unref Unexecuted instantiation: vlog.c:ovs_refcount_unref Unexecuted instantiation: netdev-linux.c:ovs_refcount_unref Unexecuted instantiation: netdev-offload-tc.c:ovs_refcount_unref Unexecuted instantiation: netlink-socket.c:ovs_refcount_unref Unexecuted instantiation: route-table.c:ovs_refcount_unref Unexecuted instantiation: tc.c:ovs_refcount_unref Unexecuted instantiation: async-append-aio.c:ovs_refcount_unref Unexecuted instantiation: dirs.c:ovs_refcount_unref Unexecuted instantiation: classifier.c:ovs_refcount_unref Unexecuted instantiation: ccmap.c:ovs_refcount_unref Unexecuted instantiation: cmap.c:ovs_refcount_unref Unexecuted instantiation: command-line.c:ovs_refcount_unref Unexecuted instantiation: connectivity.c:ovs_refcount_unref Unexecuted instantiation: coverage.c:ovs_refcount_unref Unexecuted instantiation: dp-packet-gso.c:ovs_refcount_unref Unexecuted instantiation: dpif.c:ovs_refcount_unref Unexecuted instantiation: fatal-signal.c:ovs_refcount_unref Unexecuted instantiation: guarded-list.c:ovs_refcount_unref Unexecuted instantiation: hmap.c:ovs_refcount_unref Unexecuted instantiation: jsonrpc.c:ovs_refcount_unref Unexecuted instantiation: meta-flow.c:ovs_refcount_unref Unexecuted instantiation: netdev-offload.c:ovs_refcount_unref Unexecuted instantiation: netdev-vport.c:ovs_refcount_unref Unexecuted instantiation: netlink.c:ovs_refcount_unref Unexecuted instantiation: nx-match.c:ovs_refcount_unref Unexecuted instantiation: odp-execute.c:ovs_refcount_unref Unexecuted instantiation: odp-execute-private.c:ovs_refcount_unref Unexecuted instantiation: odp-util.c:ovs_refcount_unref Unexecuted instantiation: ofp-actions.c:ovs_refcount_unref Unexecuted instantiation: ofp-monitor.c:ovs_refcount_unref Unexecuted instantiation: ovs-replay.c:ovs_refcount_unref Unexecuted instantiation: stream.c:ovs_refcount_unref Unexecuted instantiation: tnl-neigh-cache.c:ovs_refcount_unref Unexecuted instantiation: netdev-native-tnl.c:ovs_refcount_unref Unexecuted instantiation: daemon-unix.c:ovs_refcount_unref Unexecuted instantiation: stream-unix.c:ovs_refcount_unref Unexecuted instantiation: dpif-netlink.c:ovs_refcount_unref Unexecuted instantiation: dpif-netlink-rtnl.c:ovs_refcount_unref Unexecuted instantiation: netlink-conntrack.c:ovs_refcount_unref Unexecuted instantiation: netlink-notifier.c:ovs_refcount_unref Unexecuted instantiation: stream-ssl.c:ovs_refcount_unref Unexecuted instantiation: conntrack.c:ovs_refcount_unref Unexecuted instantiation: daemon.c:ovs_refcount_unref Unexecuted instantiation: dpif-netdev.c:ovs_refcount_unref Unexecuted instantiation: dpif-netdev-private-dfc.c:ovs_refcount_unref Unexecuted instantiation: dpif-netdev-private-dpif.c:ovs_refcount_unref Unexecuted instantiation: dpif-netdev-private-extract.c:ovs_refcount_unref Unexecuted instantiation: dpif-netdev-perf.c:ovs_refcount_unref Unexecuted instantiation: fat-rwlock.c:ovs_refcount_unref Unexecuted instantiation: hindex.c:ovs_refcount_unref Unexecuted instantiation: id-fpool.c:ovs_refcount_unref Unexecuted instantiation: ipf.c:ovs_refcount_unref Unexecuted instantiation: learn.c:ovs_refcount_unref Unexecuted instantiation: lockfile.c:ovs_refcount_unref Unexecuted instantiation: mpsc-queue.c:ovs_refcount_unref Unexecuted instantiation: ovs-numa.c:ovs_refcount_unref Unexecuted instantiation: process.c:ovs_refcount_unref Unexecuted instantiation: stream-replay.c:ovs_refcount_unref Unexecuted instantiation: dpdk-stub.c:ovs_refcount_unref Unexecuted instantiation: vswitch-idl.c:ovs_refcount_unref Unexecuted instantiation: conntrack-icmp.c:ovs_refcount_unref Unexecuted instantiation: conntrack-tcp.c:ovs_refcount_unref Unexecuted instantiation: conntrack-tp.c:ovs_refcount_unref Unexecuted instantiation: conntrack-other.c:ovs_refcount_unref Unexecuted instantiation: dpif-netdev-extract-study.c:ovs_refcount_unref Unexecuted instantiation: dpif-netdev-lookup.c:ovs_refcount_unref Unexecuted instantiation: dpif-netdev-lookup-autovalidator.c:ovs_refcount_unref Unexecuted instantiation: dpif-netdev-lookup-generic.c:ovs_refcount_unref Unexecuted instantiation: ovsdb-data.c:ovs_refcount_unref Unexecuted instantiation: ovsdb-idl.c:ovs_refcount_unref Unexecuted instantiation: ovsdb-types.c:ovs_refcount_unref Unexecuted instantiation: miniflow_target.c:ovs_refcount_unref Unexecuted instantiation: ofctl_parse_target.c:ovs_refcount_unref |
580 | | |
581 | | /* Reads and returns 'refcount_''s current reference count. |
582 | | * |
583 | | * Does not provide a memory barrier. |
584 | | * |
585 | | * Rarely useful. */ |
586 | | static inline unsigned int |
587 | | ovs_refcount_read(const struct ovs_refcount *refcount_) |
588 | 0 | { |
589 | 0 | struct ovs_refcount *refcount |
590 | 0 | = CONST_CAST(struct ovs_refcount *, refcount_); |
591 | 0 | unsigned int count; |
592 | |
|
593 | 0 | atomic_read_explicit(&refcount->count, &count, memory_order_relaxed); |
594 | 0 | return count; |
595 | 0 | } Unexecuted instantiation: flow_extract_target.c:ovs_refcount_read Unexecuted instantiation: dp-packet.c:ovs_refcount_read Unexecuted instantiation: flow.c:ovs_refcount_read Unexecuted instantiation: netdev.c:ovs_refcount_read Unexecuted instantiation: ofp-msgs.c:ovs_refcount_read Unexecuted instantiation: ofp-util.c:ovs_refcount_read Unexecuted instantiation: ovs-rcu.c:ovs_refcount_read Unexecuted instantiation: ovs-router.c:ovs_refcount_read Unexecuted instantiation: ovs-thread.c:ovs_refcount_read Unexecuted instantiation: packets.c:ovs_refcount_read Unexecuted instantiation: poll-loop.c:ovs_refcount_read Unexecuted instantiation: pvector.c:ovs_refcount_read Unexecuted instantiation: random.c:ovs_refcount_read Unexecuted instantiation: seq.c:ovs_refcount_read Unexecuted instantiation: socket-util.c:ovs_refcount_read Unexecuted instantiation: timeval.c:ovs_refcount_read Unexecuted instantiation: tnl-ports.c:ovs_refcount_read Unexecuted instantiation: tun-metadata.c:ovs_refcount_read Unexecuted instantiation: unixctl.c:ovs_refcount_read Unexecuted instantiation: userspace-tso.c:ovs_refcount_read Unexecuted instantiation: util.c:ovs_refcount_read Unexecuted instantiation: uuid.c:ovs_refcount_read Unexecuted instantiation: vlog.c:ovs_refcount_read Unexecuted instantiation: netdev-linux.c:ovs_refcount_read Unexecuted instantiation: netdev-offload-tc.c:ovs_refcount_read Unexecuted instantiation: netlink-socket.c:ovs_refcount_read Unexecuted instantiation: route-table.c:ovs_refcount_read Unexecuted instantiation: tc.c:ovs_refcount_read Unexecuted instantiation: async-append-aio.c:ovs_refcount_read Unexecuted instantiation: dirs.c:ovs_refcount_read Unexecuted instantiation: classifier.c:ovs_refcount_read Unexecuted instantiation: ccmap.c:ovs_refcount_read Unexecuted instantiation: cmap.c:ovs_refcount_read Unexecuted instantiation: command-line.c:ovs_refcount_read Unexecuted instantiation: connectivity.c:ovs_refcount_read Unexecuted instantiation: coverage.c:ovs_refcount_read Unexecuted instantiation: dp-packet-gso.c:ovs_refcount_read Unexecuted instantiation: dpif.c:ovs_refcount_read Unexecuted instantiation: fatal-signal.c:ovs_refcount_read Unexecuted instantiation: guarded-list.c:ovs_refcount_read Unexecuted instantiation: hmap.c:ovs_refcount_read Unexecuted instantiation: jsonrpc.c:ovs_refcount_read Unexecuted instantiation: meta-flow.c:ovs_refcount_read Unexecuted instantiation: netdev-offload.c:ovs_refcount_read Unexecuted instantiation: netdev-vport.c:ovs_refcount_read Unexecuted instantiation: netlink.c:ovs_refcount_read Unexecuted instantiation: nx-match.c:ovs_refcount_read Unexecuted instantiation: odp-execute.c:ovs_refcount_read Unexecuted instantiation: odp-execute-private.c:ovs_refcount_read Unexecuted instantiation: odp-util.c:ovs_refcount_read Unexecuted instantiation: ofp-actions.c:ovs_refcount_read Unexecuted instantiation: ofp-monitor.c:ovs_refcount_read Unexecuted instantiation: ovs-replay.c:ovs_refcount_read Unexecuted instantiation: stream.c:ovs_refcount_read Unexecuted instantiation: tnl-neigh-cache.c:ovs_refcount_read Unexecuted instantiation: netdev-native-tnl.c:ovs_refcount_read Unexecuted instantiation: daemon-unix.c:ovs_refcount_read Unexecuted instantiation: stream-unix.c:ovs_refcount_read Unexecuted instantiation: dpif-netlink.c:ovs_refcount_read Unexecuted instantiation: dpif-netlink-rtnl.c:ovs_refcount_read Unexecuted instantiation: netlink-conntrack.c:ovs_refcount_read Unexecuted instantiation: netlink-notifier.c:ovs_refcount_read Unexecuted instantiation: stream-ssl.c:ovs_refcount_read Unexecuted instantiation: conntrack.c:ovs_refcount_read Unexecuted instantiation: daemon.c:ovs_refcount_read Unexecuted instantiation: dpif-netdev.c:ovs_refcount_read Unexecuted instantiation: dpif-netdev-private-dfc.c:ovs_refcount_read Unexecuted instantiation: dpif-netdev-private-dpif.c:ovs_refcount_read Unexecuted instantiation: dpif-netdev-private-extract.c:ovs_refcount_read Unexecuted instantiation: dpif-netdev-perf.c:ovs_refcount_read Unexecuted instantiation: fat-rwlock.c:ovs_refcount_read Unexecuted instantiation: hindex.c:ovs_refcount_read Unexecuted instantiation: id-fpool.c:ovs_refcount_read Unexecuted instantiation: ipf.c:ovs_refcount_read Unexecuted instantiation: learn.c:ovs_refcount_read Unexecuted instantiation: lockfile.c:ovs_refcount_read Unexecuted instantiation: mpsc-queue.c:ovs_refcount_read Unexecuted instantiation: ovs-numa.c:ovs_refcount_read Unexecuted instantiation: process.c:ovs_refcount_read Unexecuted instantiation: stream-replay.c:ovs_refcount_read Unexecuted instantiation: dpdk-stub.c:ovs_refcount_read Unexecuted instantiation: vswitch-idl.c:ovs_refcount_read Unexecuted instantiation: conntrack-icmp.c:ovs_refcount_read Unexecuted instantiation: conntrack-tcp.c:ovs_refcount_read Unexecuted instantiation: conntrack-tp.c:ovs_refcount_read Unexecuted instantiation: conntrack-other.c:ovs_refcount_read Unexecuted instantiation: dpif-netdev-extract-study.c:ovs_refcount_read Unexecuted instantiation: dpif-netdev-lookup.c:ovs_refcount_read Unexecuted instantiation: dpif-netdev-lookup-autovalidator.c:ovs_refcount_read Unexecuted instantiation: dpif-netdev-lookup-generic.c:ovs_refcount_read Unexecuted instantiation: ovsdb-data.c:ovs_refcount_read Unexecuted instantiation: ovsdb-idl.c:ovs_refcount_read Unexecuted instantiation: ovsdb-types.c:ovs_refcount_read Unexecuted instantiation: miniflow_target.c:ovs_refcount_read Unexecuted instantiation: ofctl_parse_target.c:ovs_refcount_read |
596 | | |
597 | | /* Increments 'refcount', but only if it is non-zero. |
598 | | * |
599 | | * This may only be called for an object which is RCU protected during |
600 | | * this call. This implies that its possible destruction is postponed |
601 | | * until all current RCU threads quiesce. |
602 | | * |
603 | | * Returns false if the refcount was zero. In this case the object may |
604 | | * be safely accessed until the current thread quiesces, but no additional |
605 | | * references to the object may be taken. |
606 | | * |
607 | | * Does not provide a memory barrier, as the calling thread must have |
608 | | * RCU protected access to the object already. |
609 | | * |
610 | | * It is critical that we never increment a zero refcount to a |
611 | | * non-zero value, as whenever a refcount reaches the zero value, the |
612 | | * protected object may be irrevocably scheduled for deletion. */ |
613 | | static inline bool |
614 | | ovs_refcount_try_ref_rcu(struct ovs_refcount *refcount) |
615 | 0 | { |
616 | 0 | unsigned int count; |
617 | |
|
618 | 0 | atomic_read_explicit(&refcount->count, &count, memory_order_relaxed); |
619 | 0 | do { |
620 | 0 | if (count == 0) { |
621 | 0 | return false; |
622 | 0 | } |
623 | 0 | } while (!atomic_compare_exchange_weak_explicit(&refcount->count, &count, |
624 | 0 | count + 1, |
625 | 0 | memory_order_relaxed, |
626 | 0 | memory_order_relaxed)); |
627 | 0 | return true; |
628 | 0 | } Unexecuted instantiation: flow_extract_target.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: dp-packet.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: flow.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: netdev.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: ofp-msgs.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: ofp-util.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: ovs-rcu.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: ovs-router.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: ovs-thread.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: packets.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: poll-loop.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: pvector.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: random.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: seq.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: socket-util.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: timeval.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: tnl-ports.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: tun-metadata.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: unixctl.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: userspace-tso.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: util.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: uuid.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: vlog.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: netdev-linux.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: netdev-offload-tc.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: netlink-socket.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: route-table.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: tc.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: async-append-aio.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: dirs.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: classifier.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: ccmap.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: cmap.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: command-line.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: connectivity.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: coverage.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: dp-packet-gso.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: dpif.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: fatal-signal.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: guarded-list.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: hmap.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: jsonrpc.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: meta-flow.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: netdev-offload.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: netdev-vport.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: netlink.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: nx-match.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: odp-execute.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: odp-execute-private.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: odp-util.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: ofp-actions.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: ofp-monitor.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: ovs-replay.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: stream.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: tnl-neigh-cache.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: netdev-native-tnl.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: daemon-unix.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: stream-unix.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: dpif-netlink.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: dpif-netlink-rtnl.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: netlink-conntrack.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: netlink-notifier.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: stream-ssl.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: conntrack.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: daemon.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: dpif-netdev.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: dpif-netdev-private-dfc.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: dpif-netdev-private-dpif.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: dpif-netdev-private-extract.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: dpif-netdev-perf.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: fat-rwlock.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: hindex.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: id-fpool.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: ipf.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: learn.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: lockfile.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: mpsc-queue.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: ovs-numa.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: process.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: stream-replay.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: dpdk-stub.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: vswitch-idl.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: conntrack-icmp.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: conntrack-tcp.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: conntrack-tp.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: conntrack-other.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: dpif-netdev-extract-study.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: dpif-netdev-lookup.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: dpif-netdev-lookup-autovalidator.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: dpif-netdev-lookup-generic.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: ovsdb-data.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: ovsdb-idl.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: ovsdb-types.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: miniflow_target.c:ovs_refcount_try_ref_rcu Unexecuted instantiation: ofctl_parse_target.c:ovs_refcount_try_ref_rcu |
629 | | |
630 | | /* Decrements 'refcount' and returns the previous reference count. To |
631 | | * be used only when a memory barrier is already provided for the |
632 | | * protected object independently. |
633 | | * |
634 | | * For example: |
635 | | * |
636 | | * if (ovs_refcount_unref_relaxed(&object->ref_cnt) == 1) { |
637 | | * ovsrcu_postpone(destructor_function, object); |
638 | | * } |
639 | | * |
640 | | * Here RCU quiescing already provides a full memory barrier. No additional |
641 | | * barriers are needed here. |
642 | | * |
643 | | * Or: |
644 | | * |
645 | | * if (stp && ovs_refcount_unref_relaxed(&stp->ref_cnt) == 1) { |
646 | | * ovs_mutex_lock(&mutex); |
647 | | * ovs_list_remove(&stp->node); |
648 | | * ovs_mutex_unlock(&mutex); |
649 | | * free(stp->name); |
650 | | * free(stp); |
651 | | * } |
652 | | * |
653 | | * Here a mutex is used to guard access to all of 'stp' apart from |
654 | | * 'ref_cnt'. Hence all changes to 'stp' by other threads must be |
655 | | * visible when we get the mutex, and no access after the unlock can |
656 | | * be reordered to happen prior the lock operation. No additional |
657 | | * barriers are needed here. |
658 | | */ |
659 | | static inline unsigned int |
660 | | ovs_refcount_unref_relaxed(struct ovs_refcount *refcount) |
661 | 0 | { |
662 | 0 | unsigned int old_refcount; |
663 | |
|
664 | 0 | atomic_sub_explicit(&refcount->count, 1u, &old_refcount, |
665 | 0 | memory_order_relaxed); |
666 | 0 | ovs_assert(old_refcount > 0); |
667 | 0 | return old_refcount; |
668 | 0 | } Unexecuted instantiation: flow_extract_target.c:ovs_refcount_unref_relaxed Unexecuted instantiation: dp-packet.c:ovs_refcount_unref_relaxed Unexecuted instantiation: flow.c:ovs_refcount_unref_relaxed Unexecuted instantiation: netdev.c:ovs_refcount_unref_relaxed Unexecuted instantiation: ofp-msgs.c:ovs_refcount_unref_relaxed Unexecuted instantiation: ofp-util.c:ovs_refcount_unref_relaxed Unexecuted instantiation: ovs-rcu.c:ovs_refcount_unref_relaxed Unexecuted instantiation: ovs-router.c:ovs_refcount_unref_relaxed Unexecuted instantiation: ovs-thread.c:ovs_refcount_unref_relaxed Unexecuted instantiation: packets.c:ovs_refcount_unref_relaxed Unexecuted instantiation: poll-loop.c:ovs_refcount_unref_relaxed Unexecuted instantiation: pvector.c:ovs_refcount_unref_relaxed Unexecuted instantiation: random.c:ovs_refcount_unref_relaxed Unexecuted instantiation: seq.c:ovs_refcount_unref_relaxed Unexecuted instantiation: socket-util.c:ovs_refcount_unref_relaxed Unexecuted instantiation: timeval.c:ovs_refcount_unref_relaxed Unexecuted instantiation: tnl-ports.c:ovs_refcount_unref_relaxed Unexecuted instantiation: tun-metadata.c:ovs_refcount_unref_relaxed Unexecuted instantiation: unixctl.c:ovs_refcount_unref_relaxed Unexecuted instantiation: userspace-tso.c:ovs_refcount_unref_relaxed Unexecuted instantiation: util.c:ovs_refcount_unref_relaxed Unexecuted instantiation: uuid.c:ovs_refcount_unref_relaxed Unexecuted instantiation: vlog.c:ovs_refcount_unref_relaxed Unexecuted instantiation: netdev-linux.c:ovs_refcount_unref_relaxed Unexecuted instantiation: netdev-offload-tc.c:ovs_refcount_unref_relaxed Unexecuted instantiation: netlink-socket.c:ovs_refcount_unref_relaxed Unexecuted instantiation: route-table.c:ovs_refcount_unref_relaxed Unexecuted instantiation: tc.c:ovs_refcount_unref_relaxed Unexecuted instantiation: async-append-aio.c:ovs_refcount_unref_relaxed Unexecuted instantiation: dirs.c:ovs_refcount_unref_relaxed Unexecuted instantiation: classifier.c:ovs_refcount_unref_relaxed Unexecuted instantiation: ccmap.c:ovs_refcount_unref_relaxed Unexecuted instantiation: cmap.c:ovs_refcount_unref_relaxed Unexecuted instantiation: command-line.c:ovs_refcount_unref_relaxed Unexecuted instantiation: connectivity.c:ovs_refcount_unref_relaxed Unexecuted instantiation: coverage.c:ovs_refcount_unref_relaxed Unexecuted instantiation: dp-packet-gso.c:ovs_refcount_unref_relaxed Unexecuted instantiation: dpif.c:ovs_refcount_unref_relaxed Unexecuted instantiation: fatal-signal.c:ovs_refcount_unref_relaxed Unexecuted instantiation: guarded-list.c:ovs_refcount_unref_relaxed Unexecuted instantiation: hmap.c:ovs_refcount_unref_relaxed Unexecuted instantiation: jsonrpc.c:ovs_refcount_unref_relaxed Unexecuted instantiation: meta-flow.c:ovs_refcount_unref_relaxed Unexecuted instantiation: netdev-offload.c:ovs_refcount_unref_relaxed Unexecuted instantiation: netdev-vport.c:ovs_refcount_unref_relaxed Unexecuted instantiation: netlink.c:ovs_refcount_unref_relaxed Unexecuted instantiation: nx-match.c:ovs_refcount_unref_relaxed Unexecuted instantiation: odp-execute.c:ovs_refcount_unref_relaxed Unexecuted instantiation: odp-execute-private.c:ovs_refcount_unref_relaxed Unexecuted instantiation: odp-util.c:ovs_refcount_unref_relaxed Unexecuted instantiation: ofp-actions.c:ovs_refcount_unref_relaxed Unexecuted instantiation: ofp-monitor.c:ovs_refcount_unref_relaxed Unexecuted instantiation: ovs-replay.c:ovs_refcount_unref_relaxed Unexecuted instantiation: stream.c:ovs_refcount_unref_relaxed Unexecuted instantiation: tnl-neigh-cache.c:ovs_refcount_unref_relaxed Unexecuted instantiation: netdev-native-tnl.c:ovs_refcount_unref_relaxed Unexecuted instantiation: daemon-unix.c:ovs_refcount_unref_relaxed Unexecuted instantiation: stream-unix.c:ovs_refcount_unref_relaxed Unexecuted instantiation: dpif-netlink.c:ovs_refcount_unref_relaxed Unexecuted instantiation: dpif-netlink-rtnl.c:ovs_refcount_unref_relaxed Unexecuted instantiation: netlink-conntrack.c:ovs_refcount_unref_relaxed Unexecuted instantiation: netlink-notifier.c:ovs_refcount_unref_relaxed Unexecuted instantiation: stream-ssl.c:ovs_refcount_unref_relaxed Unexecuted instantiation: conntrack.c:ovs_refcount_unref_relaxed Unexecuted instantiation: daemon.c:ovs_refcount_unref_relaxed Unexecuted instantiation: dpif-netdev.c:ovs_refcount_unref_relaxed Unexecuted instantiation: dpif-netdev-private-dfc.c:ovs_refcount_unref_relaxed Unexecuted instantiation: dpif-netdev-private-dpif.c:ovs_refcount_unref_relaxed Unexecuted instantiation: dpif-netdev-private-extract.c:ovs_refcount_unref_relaxed Unexecuted instantiation: dpif-netdev-perf.c:ovs_refcount_unref_relaxed Unexecuted instantiation: fat-rwlock.c:ovs_refcount_unref_relaxed Unexecuted instantiation: hindex.c:ovs_refcount_unref_relaxed Unexecuted instantiation: id-fpool.c:ovs_refcount_unref_relaxed Unexecuted instantiation: ipf.c:ovs_refcount_unref_relaxed Unexecuted instantiation: learn.c:ovs_refcount_unref_relaxed Unexecuted instantiation: lockfile.c:ovs_refcount_unref_relaxed Unexecuted instantiation: mpsc-queue.c:ovs_refcount_unref_relaxed Unexecuted instantiation: ovs-numa.c:ovs_refcount_unref_relaxed Unexecuted instantiation: process.c:ovs_refcount_unref_relaxed Unexecuted instantiation: stream-replay.c:ovs_refcount_unref_relaxed Unexecuted instantiation: dpdk-stub.c:ovs_refcount_unref_relaxed Unexecuted instantiation: vswitch-idl.c:ovs_refcount_unref_relaxed Unexecuted instantiation: conntrack-icmp.c:ovs_refcount_unref_relaxed Unexecuted instantiation: conntrack-tcp.c:ovs_refcount_unref_relaxed Unexecuted instantiation: conntrack-tp.c:ovs_refcount_unref_relaxed Unexecuted instantiation: conntrack-other.c:ovs_refcount_unref_relaxed Unexecuted instantiation: dpif-netdev-extract-study.c:ovs_refcount_unref_relaxed Unexecuted instantiation: dpif-netdev-lookup.c:ovs_refcount_unref_relaxed Unexecuted instantiation: dpif-netdev-lookup-autovalidator.c:ovs_refcount_unref_relaxed Unexecuted instantiation: dpif-netdev-lookup-generic.c:ovs_refcount_unref_relaxed Unexecuted instantiation: ovsdb-data.c:ovs_refcount_unref_relaxed Unexecuted instantiation: ovsdb-idl.c:ovs_refcount_unref_relaxed Unexecuted instantiation: ovsdb-types.c:ovs_refcount_unref_relaxed Unexecuted instantiation: miniflow_target.c:ovs_refcount_unref_relaxed Unexecuted instantiation: ofctl_parse_target.c:ovs_refcount_unref_relaxed |
669 | | |
670 | | #endif /* ovs-atomic.h */ |