Coverage Report

Created: 2023-03-26 07:41

/src/openvswitch/lib/ovs-rcu.h
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright (c) 2014, 2015, 2016 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_RCU_H
18
#define OVS_RCU_H 1
19
20
/* Read-Copy-Update (RCU)
21
 * ======================
22
 *
23
 * Introduction
24
 * ------------
25
 *
26
 * Atomic pointer access makes it pretty easy to implement lock-free
27
 * algorithms.  There is one big problem, though: when a writer updates a
28
 * pointer to point to a new data structure, some thread might be reading the
29
 * old version, and there's no convenient way to free the old version when all
30
 * threads are done with the old version.
31
 *
32
 * The function ovsrcu_postpone() solves that problem.  The function pointer
33
 * passed in as its argument is called only after all threads are done with old
34
 * versions of data structures.  The function callback frees an old version of
35
 * data no longer in use.  This technique is called "read-copy-update", or RCU
36
 * for short.
37
 *
38
 *
39
 * Details
40
 * -------
41
 *
42
 * A "quiescent state" is a time at which a thread holds no pointers to memory
43
 * that is managed by RCU; that is, when the thread is known not to reference
44
 * memory that might be an old version of some object freed via RCU.  For
45
 * example, poll_block() includes a quiescent state.
46
 *
47
 * The following functions manage the recognition of quiescent states:
48
 *
49
 *     void ovsrcu_quiesce(void)
50
 *
51
 *         Recognizes a momentary quiescent state in the current thread.
52
 *
53
 *     void ovsrcu_quiesce_start(void)
54
 *     void ovsrcu_quiesce_end(void)
55
 *
56
 *         Brackets a time period during which the current thread is quiescent.
57
 *
58
 * A newly created thread is initially active, not quiescent. When a process
59
 * becomes multithreaded, the main thread becomes active, not quiescent.
60
 *
61
 * When a quiescient state has occurred in every thread, we say that a "grace
62
 * period" has occurred.  Following a grace period, all of the callbacks
63
 * postponed before the start of the grace period MAY be invoked.  OVS takes
64
 * care of this automatically through the RCU mechanism: while a process still
65
 * has only a single thread, it invokes the postponed callbacks directly from
66
 * ovsrcu_quiesce() and ovsrcu_quiesce_start(); after additional threads have
67
 * been created, it creates an extra helper thread to invoke callbacks.
68
 *
69
 * Please note that while a postponed function call is guaranteed to happen
70
 * after the next time all participating threads have quiesced at least once,
71
 * there is no quarantee that all postponed functions are called as early as
72
 * possible, or that the functions postponed by different threads would be
73
 * called in the order the registrations took place.  In particular, even if
74
 * two threads provably postpone a function each in a specific order, the
75
 * postponed functions may still be called in the opposite order, depending on
76
 * the timing of when the threads call ovsrcu_quiesce(), how many functions
77
 * they postpone, and when the ovs-rcu thread happens to grab the functions to
78
 * be called.
79
 *
80
 * All functions postponed by a single thread are guaranteed to execute in the
81
 * order they were postponed, however.
82
 *
83
 * Usage
84
 * -----
85
 *
86
 * Use OVSRCU_TYPE(TYPE) to declare a pointer to RCU-protected data, e.g. the
87
 * following declares an RCU-protected "struct flow *" named flowp:
88
 *
89
 *     OVSRCU_TYPE(struct flow *) flowp;
90
 *
91
 * Use ovsrcu_get(TYPE, VAR) to read an RCU-protected pointer, e.g. to read the
92
 * pointer variable declared above:
93
 *
94
 *     struct flow *flow = ovsrcu_get(struct flow *, &flowp);
95
 *
96
 * If the pointer variable is currently protected against change (because
97
 * the current thread holds a mutex that protects it), ovsrcu_get_protected()
98
 * may be used instead.  Only on the Alpha architecture is this likely to
99
 * generate different code, but it may be useful documentation.
100
 *
101
 * (With GNU C or Clang, you get a compiler error if TYPE is wrong; other
102
 * compilers will merrily carry along accepting the wrong type.)
103
 *
104
 * Use ovsrcu_set() to write an RCU-protected pointer and ovsrcu_postpone() to
105
 * free the previous data.  ovsrcu_set_hidden() can be used on RCU protected
106
 * data not visible to any readers yet, but will be made visible by a later
107
 * ovsrcu_set().   ovsrcu_init() can be used to initialize RCU pointers when
108
 * no readers are yet executing.  If more than one thread can write the
109
 * pointer, then some form of external synchronization, e.g. a mutex, is
110
 * needed to prevent writers from interfering with one another.  For example,
111
 * to write the pointer variable declared above while safely freeing the old
112
 * value:
113
 *
114
 *     static struct ovs_mutex mutex = OVS_MUTEX_INITIALIZER;
115
 *
116
 *     OVSRCU_TYPE(struct flow *) flowp;
117
 *
118
 *     void
119
 *     change_flow(struct flow *new_flow)
120
 *     {
121
 *         ovs_mutex_lock(&mutex);
122
 *         ovsrcu_postpone(free,
123
 *                         ovsrcu_get_protected(struct flow *, &flowp));
124
 *         ovsrcu_set(&flowp, new_flow);
125
 *         ovs_mutex_unlock(&mutex);
126
 *     }
127
 *
128
 * In some rare cases an object may not be addressable with a pointer, but only
129
 * through an array index (e.g. because it's provided by another library).  It
130
 * is still possible to have RCU semantics by using the ovsrcu_index type.
131
 *
132
 *     static struct ovs_mutex mutex = OVS_MUTEX_INITIALIZER;
133
 *
134
 *     ovsrcu_index port_id;
135
 *
136
 *     void tx()
137
 *     {
138
 *         int id = ovsrcu_index_get(&port_id);
139
 *         if (id == -1) {
140
 *             return;
141
 *         }
142
 *         port_tx(id);
143
 *     }
144
 *
145
 *     void delete()
146
 *     {
147
 *         int id;
148
 *
149
 *         ovs_mutex_lock(&mutex);
150
 *         id = ovsrcu_index_get_protected(&port_id);
151
 *         ovsrcu_index_set(&port_id, -1);
152
 *         ovs_mutex_unlock(&mutex);
153
 *
154
 *         ovsrcu_synchronize();
155
 *         port_delete(id);
156
 *     }
157
 *
158
 * Use ovsrcu_barrier() to wait for all the outstanding RCU callbacks to
159
 * finish. This is useful when you have to destroy some resources however
160
 * these resources are referenced in the outstanding RCU callbacks.
161
 *
162
 *     void rcu_cb(void *A) {
163
 *         do_something(A);
164
 *     }
165
 *
166
 *     void destroy_A() {
167
 *         ovsrcu_postpone(rcu_cb, A); // will use A later
168
 *         ovsrcu_barrier(); // wait for rcu_cb done
169
 *         do_destroy_A(); // free A
170
 *     }
171
 */
172
173
#include "compiler.h"
174
#include "ovs-atomic.h"
175
176
#if __GNUC__
177
#define OVSRCU_TYPE(TYPE) struct { ATOMIC(TYPE) p; }
178
#define OVSRCU_INITIALIZER(VALUE) { VALUE }
179
#define ovsrcu_get__(TYPE, VAR, ORDER)                                  \
180
0
    ({                                                                  \
181
0
        TYPE value__;                                                   \
182
0
        typeof(VAR) ovsrcu_var = (VAR);                                 \
183
0
                                                                        \
184
0
        atomic_read_explicit(CONST_CAST(ATOMIC(TYPE) *, &ovsrcu_var->p), \
185
0
                             &value__, ORDER);                          \
186
0
                                                                        \
187
0
        value__;                                                        \
188
0
    })
189
#define ovsrcu_get(TYPE, VAR) \
190
0
    ovsrcu_get__(TYPE, VAR, memory_order_consume)
191
#define ovsrcu_get_protected(TYPE, VAR) \
192
0
    ovsrcu_get__(TYPE, VAR, memory_order_relaxed)
193
194
/* 'VALUE' may be an atomic operation, which must be evaluated before
195
 * any of the body of the atomic_store_explicit.  Since the type of
196
 * 'VAR' is not fixed, we cannot use an inline function to get
197
 * function semantics for this. */
198
#define ovsrcu_set__(VAR, VALUE, ORDER)                                 \
199
0
    ({                                                                  \
200
0
        typeof(VAR) ovsrcu_var = (VAR);                                 \
201
0
        typeof(VALUE) ovsrcu_value = (VALUE);                           \
202
0
        memory_order ovsrcu_order = (ORDER);                            \
203
0
                                                                        \
204
0
        atomic_store_explicit(&ovsrcu_var->p, ovsrcu_value, ovsrcu_order); \
205
0
        (void *) 0;                                                     \
206
0
    })
207
#else  /* not GNU C */
208
struct ovsrcu_pointer { ATOMIC(void *) p; };
209
#define OVSRCU_TYPE(TYPE) struct ovsrcu_pointer
210
#define OVSRCU_INITIALIZER(VALUE) { VALUE }
211
static inline void *
212
ovsrcu_get__(const struct ovsrcu_pointer *pointer, memory_order order)
213
{
214
    void *value;
215
    atomic_read_explicit(&CONST_CAST(struct ovsrcu_pointer *, pointer)->p,
216
                         &value, order);
217
    return value;
218
}
219
#define ovsrcu_get(TYPE, VAR) \
220
    CONST_CAST(TYPE, ovsrcu_get__(VAR, memory_order_consume))
221
#define ovsrcu_get_protected(TYPE, VAR) \
222
    CONST_CAST(TYPE, ovsrcu_get__(VAR, memory_order_relaxed))
223
224
static inline void ovsrcu_set__(struct ovsrcu_pointer *pointer,
225
                                const void *value,
226
                                memory_order order)
227
{
228
    atomic_store_explicit(&pointer->p, CONST_CAST(void *, value), order);
229
}
230
#endif
231
232
/* Writes VALUE to the RCU-protected pointer whose address is VAR.
233
 *
234
 * Users require external synchronization (e.g. a mutex).  See "Usage" above
235
 * for an example. */
236
#define ovsrcu_set(VAR, VALUE) \
237
0
    ovsrcu_set__(VAR, VALUE, memory_order_release)
238
239
/* This can be used for initializing RCU pointers before any readers can
240
 * see them.  A later ovsrcu_set() needs to make the bigger structure this
241
 * is part of visible to the readers. */
242
#define ovsrcu_set_hidden(VAR, VALUE) \
243
0
    ovsrcu_set__(VAR, VALUE, memory_order_relaxed)
244
245
/* This can be used for initializing RCU pointers before any readers are
246
 * executing. */
247
0
#define ovsrcu_init(VAR, VALUE) atomic_init(&(VAR)->p, VALUE)
248
249
/* Calls FUNCTION passing ARG as its pointer-type argument following the next
250
 * grace period.  See "Usage" above for an example. */
251
void ovsrcu_postpone__(void (*function)(void *aux), void *aux);
252
#define ovsrcu_postpone(FUNCTION, ARG)                          \
253
0
    (/* Verify that ARG is appropriate for FUNCTION. */         \
254
0
     (void) sizeof((FUNCTION)(ARG), 1),                         \
255
0
     /* Verify that ARG is a pointer type. */                   \
256
0
     (void) sizeof(*(ARG)),                                     \
257
0
     ovsrcu_postpone__((void (*)(void *))(FUNCTION), ARG))
258
259
/* An array index protected by RCU semantics.  This is an easier alternative to
260
 * an RCU protected pointer to a malloc'd int. */
261
typedef struct { atomic_int v; } ovsrcu_index;
262
263
static inline int ovsrcu_index_get__(const ovsrcu_index *i, memory_order order)
264
0
{
265
0
    int ret;
266
0
    atomic_read_explicit(CONST_CAST(atomic_int *, &i->v), &ret, order);
267
0
    return ret;
268
0
}
Unexecuted instantiation: miniflow_target.c:ovsrcu_index_get__
Unexecuted instantiation: flow.c:ovsrcu_index_get__
Unexecuted instantiation: netdev.c:ovsrcu_index_get__
Unexecuted instantiation: ofp-util.c:ovsrcu_index_get__
Unexecuted instantiation: ovs-rcu.c:ovsrcu_index_get__
Unexecuted instantiation: ovs-router.c:ovsrcu_index_get__
Unexecuted instantiation: ovs-thread.c:ovsrcu_index_get__
Unexecuted instantiation: packets.c:ovsrcu_index_get__
Unexecuted instantiation: poll-loop.c:ovsrcu_index_get__
Unexecuted instantiation: pvector.c:ovsrcu_index_get__
Unexecuted instantiation: random.c:ovsrcu_index_get__
Unexecuted instantiation: seq.c:ovsrcu_index_get__
Unexecuted instantiation: socket-util.c:ovsrcu_index_get__
Unexecuted instantiation: timeval.c:ovsrcu_index_get__
Unexecuted instantiation: tnl-ports.c:ovsrcu_index_get__
Unexecuted instantiation: tun-metadata.c:ovsrcu_index_get__
Unexecuted instantiation: unixctl.c:ovsrcu_index_get__
Unexecuted instantiation: util.c:ovsrcu_index_get__
Unexecuted instantiation: uuid.c:ovsrcu_index_get__
Unexecuted instantiation: vlog.c:ovsrcu_index_get__
Unexecuted instantiation: netdev-linux.c:ovsrcu_index_get__
Unexecuted instantiation: netdev-offload-tc.c:ovsrcu_index_get__
Unexecuted instantiation: netlink-socket.c:ovsrcu_index_get__
Unexecuted instantiation: route-table.c:ovsrcu_index_get__
Unexecuted instantiation: tc.c:ovsrcu_index_get__
Unexecuted instantiation: async-append-aio.c:ovsrcu_index_get__
Unexecuted instantiation: dirs.c:ovsrcu_index_get__
Unexecuted instantiation: classifier.c:ovsrcu_index_get__
Unexecuted instantiation: ccmap.c:ovsrcu_index_get__
Unexecuted instantiation: cmap.c:ovsrcu_index_get__
Unexecuted instantiation: connectivity.c:ovsrcu_index_get__
Unexecuted instantiation: coverage.c:ovsrcu_index_get__
Unexecuted instantiation: dpif.c:ovsrcu_index_get__
Unexecuted instantiation: fatal-signal.c:ovsrcu_index_get__
Unexecuted instantiation: guarded-list.c:ovsrcu_index_get__
Unexecuted instantiation: hmap.c:ovsrcu_index_get__
Unexecuted instantiation: jsonrpc.c:ovsrcu_index_get__
Unexecuted instantiation: meta-flow.c:ovsrcu_index_get__
Unexecuted instantiation: netdev-offload.c:ovsrcu_index_get__
Unexecuted instantiation: netdev-vport.c:ovsrcu_index_get__
Unexecuted instantiation: netlink.c:ovsrcu_index_get__
Unexecuted instantiation: nx-match.c:ovsrcu_index_get__
Unexecuted instantiation: odp-execute.c:ovsrcu_index_get__
Unexecuted instantiation: odp-util.c:ovsrcu_index_get__
Unexecuted instantiation: ofp-actions.c:ovsrcu_index_get__
Unexecuted instantiation: ofp-msgs.c:ovsrcu_index_get__
Unexecuted instantiation: stream.c:ovsrcu_index_get__
Unexecuted instantiation: tnl-neigh-cache.c:ovsrcu_index_get__
Unexecuted instantiation: netdev-native-tnl.c:ovsrcu_index_get__
Unexecuted instantiation: userspace-tso.c:ovsrcu_index_get__
Unexecuted instantiation: dpif-netlink.c:ovsrcu_index_get__
Unexecuted instantiation: dpif-netlink-rtnl.c:ovsrcu_index_get__
Unexecuted instantiation: netlink-conntrack.c:ovsrcu_index_get__
Unexecuted instantiation: netlink-notifier.c:ovsrcu_index_get__
Unexecuted instantiation: stream-ssl.c:ovsrcu_index_get__
Unexecuted instantiation: conntrack.c:ovsrcu_index_get__
Unexecuted instantiation: dpif-netdev.c:ovsrcu_index_get__
Unexecuted instantiation: dpif-netdev-private-dfc.c:ovsrcu_index_get__
Unexecuted instantiation: dpif-netdev-private-dpif.c:ovsrcu_index_get__
Unexecuted instantiation: dpif-netdev-private-extract.c:ovsrcu_index_get__
Unexecuted instantiation: dpif-netdev-perf.c:ovsrcu_index_get__
Unexecuted instantiation: fat-rwlock.c:ovsrcu_index_get__
Unexecuted instantiation: hindex.c:ovsrcu_index_get__
Unexecuted instantiation: ipf.c:ovsrcu_index_get__
Unexecuted instantiation: learn.c:ovsrcu_index_get__
Unexecuted instantiation: ovs-numa.c:ovsrcu_index_get__
Unexecuted instantiation: dpdk-stub.c:ovsrcu_index_get__
Unexecuted instantiation: vswitch-idl.c:ovsrcu_index_get__
Unexecuted instantiation: conntrack-icmp.c:ovsrcu_index_get__
Unexecuted instantiation: conntrack-tcp.c:ovsrcu_index_get__
Unexecuted instantiation: conntrack-tp.c:ovsrcu_index_get__
Unexecuted instantiation: conntrack-other.c:ovsrcu_index_get__
Unexecuted instantiation: dpif-netdev-extract-study.c:ovsrcu_index_get__
Unexecuted instantiation: dpif-netdev-lookup.c:ovsrcu_index_get__
Unexecuted instantiation: dpif-netdev-lookup-autovalidator.c:ovsrcu_index_get__
Unexecuted instantiation: dpif-netdev-lookup-generic.c:ovsrcu_index_get__
Unexecuted instantiation: ovsdb-data.c:ovsrcu_index_get__
Unexecuted instantiation: ovsdb-idl.c:ovsrcu_index_get__
Unexecuted instantiation: ovsdb-types.c:ovsrcu_index_get__
269
270
/* Returns the index contained in 'i'.  The returned value can be used until
271
 * the next grace period. */
272
static inline int ovsrcu_index_get(const ovsrcu_index *i)
273
0
{
274
0
    return ovsrcu_index_get__(i, memory_order_consume);
275
0
}
Unexecuted instantiation: miniflow_target.c:ovsrcu_index_get
Unexecuted instantiation: flow.c:ovsrcu_index_get
Unexecuted instantiation: netdev.c:ovsrcu_index_get
Unexecuted instantiation: ofp-util.c:ovsrcu_index_get
Unexecuted instantiation: ovs-rcu.c:ovsrcu_index_get
Unexecuted instantiation: ovs-router.c:ovsrcu_index_get
Unexecuted instantiation: ovs-thread.c:ovsrcu_index_get
Unexecuted instantiation: packets.c:ovsrcu_index_get
Unexecuted instantiation: poll-loop.c:ovsrcu_index_get
Unexecuted instantiation: pvector.c:ovsrcu_index_get
Unexecuted instantiation: random.c:ovsrcu_index_get
Unexecuted instantiation: seq.c:ovsrcu_index_get
Unexecuted instantiation: socket-util.c:ovsrcu_index_get
Unexecuted instantiation: timeval.c:ovsrcu_index_get
Unexecuted instantiation: tnl-ports.c:ovsrcu_index_get
Unexecuted instantiation: tun-metadata.c:ovsrcu_index_get
Unexecuted instantiation: unixctl.c:ovsrcu_index_get
Unexecuted instantiation: util.c:ovsrcu_index_get
Unexecuted instantiation: uuid.c:ovsrcu_index_get
Unexecuted instantiation: vlog.c:ovsrcu_index_get
Unexecuted instantiation: netdev-linux.c:ovsrcu_index_get
Unexecuted instantiation: netdev-offload-tc.c:ovsrcu_index_get
Unexecuted instantiation: netlink-socket.c:ovsrcu_index_get
Unexecuted instantiation: route-table.c:ovsrcu_index_get
Unexecuted instantiation: tc.c:ovsrcu_index_get
Unexecuted instantiation: async-append-aio.c:ovsrcu_index_get
Unexecuted instantiation: dirs.c:ovsrcu_index_get
Unexecuted instantiation: classifier.c:ovsrcu_index_get
Unexecuted instantiation: ccmap.c:ovsrcu_index_get
Unexecuted instantiation: cmap.c:ovsrcu_index_get
Unexecuted instantiation: connectivity.c:ovsrcu_index_get
Unexecuted instantiation: coverage.c:ovsrcu_index_get
Unexecuted instantiation: dpif.c:ovsrcu_index_get
Unexecuted instantiation: fatal-signal.c:ovsrcu_index_get
Unexecuted instantiation: guarded-list.c:ovsrcu_index_get
Unexecuted instantiation: hmap.c:ovsrcu_index_get
Unexecuted instantiation: jsonrpc.c:ovsrcu_index_get
Unexecuted instantiation: meta-flow.c:ovsrcu_index_get
Unexecuted instantiation: netdev-offload.c:ovsrcu_index_get
Unexecuted instantiation: netdev-vport.c:ovsrcu_index_get
Unexecuted instantiation: netlink.c:ovsrcu_index_get
Unexecuted instantiation: nx-match.c:ovsrcu_index_get
Unexecuted instantiation: odp-execute.c:ovsrcu_index_get
Unexecuted instantiation: odp-util.c:ovsrcu_index_get
Unexecuted instantiation: ofp-actions.c:ovsrcu_index_get
Unexecuted instantiation: ofp-msgs.c:ovsrcu_index_get
Unexecuted instantiation: stream.c:ovsrcu_index_get
Unexecuted instantiation: tnl-neigh-cache.c:ovsrcu_index_get
Unexecuted instantiation: netdev-native-tnl.c:ovsrcu_index_get
Unexecuted instantiation: userspace-tso.c:ovsrcu_index_get
Unexecuted instantiation: dpif-netlink.c:ovsrcu_index_get
Unexecuted instantiation: dpif-netlink-rtnl.c:ovsrcu_index_get
Unexecuted instantiation: netlink-conntrack.c:ovsrcu_index_get
Unexecuted instantiation: netlink-notifier.c:ovsrcu_index_get
Unexecuted instantiation: stream-ssl.c:ovsrcu_index_get
Unexecuted instantiation: conntrack.c:ovsrcu_index_get
Unexecuted instantiation: dpif-netdev.c:ovsrcu_index_get
Unexecuted instantiation: dpif-netdev-private-dfc.c:ovsrcu_index_get
Unexecuted instantiation: dpif-netdev-private-dpif.c:ovsrcu_index_get
Unexecuted instantiation: dpif-netdev-private-extract.c:ovsrcu_index_get
Unexecuted instantiation: dpif-netdev-perf.c:ovsrcu_index_get
Unexecuted instantiation: fat-rwlock.c:ovsrcu_index_get
Unexecuted instantiation: hindex.c:ovsrcu_index_get
Unexecuted instantiation: ipf.c:ovsrcu_index_get
Unexecuted instantiation: learn.c:ovsrcu_index_get
Unexecuted instantiation: ovs-numa.c:ovsrcu_index_get
Unexecuted instantiation: dpdk-stub.c:ovsrcu_index_get
Unexecuted instantiation: vswitch-idl.c:ovsrcu_index_get
Unexecuted instantiation: conntrack-icmp.c:ovsrcu_index_get
Unexecuted instantiation: conntrack-tcp.c:ovsrcu_index_get
Unexecuted instantiation: conntrack-tp.c:ovsrcu_index_get
Unexecuted instantiation: conntrack-other.c:ovsrcu_index_get
Unexecuted instantiation: dpif-netdev-extract-study.c:ovsrcu_index_get
Unexecuted instantiation: dpif-netdev-lookup.c:ovsrcu_index_get
Unexecuted instantiation: dpif-netdev-lookup-autovalidator.c:ovsrcu_index_get
Unexecuted instantiation: dpif-netdev-lookup-generic.c:ovsrcu_index_get
Unexecuted instantiation: ovsdb-data.c:ovsrcu_index_get
Unexecuted instantiation: ovsdb-idl.c:ovsrcu_index_get
Unexecuted instantiation: ovsdb-types.c:ovsrcu_index_get
276
277
/* Returns the index contained in 'i'.  This is an alternative to
278
 * ovsrcu_index_get() that can be used when there's no possible concurrent
279
 * writer. */
280
static inline int ovsrcu_index_get_protected(const ovsrcu_index *i)
281
0
{
282
0
    return ovsrcu_index_get__(i, memory_order_relaxed);
283
0
}
Unexecuted instantiation: miniflow_target.c:ovsrcu_index_get_protected
Unexecuted instantiation: flow.c:ovsrcu_index_get_protected
Unexecuted instantiation: netdev.c:ovsrcu_index_get_protected
Unexecuted instantiation: ofp-util.c:ovsrcu_index_get_protected
Unexecuted instantiation: ovs-rcu.c:ovsrcu_index_get_protected
Unexecuted instantiation: ovs-router.c:ovsrcu_index_get_protected
Unexecuted instantiation: ovs-thread.c:ovsrcu_index_get_protected
Unexecuted instantiation: packets.c:ovsrcu_index_get_protected
Unexecuted instantiation: poll-loop.c:ovsrcu_index_get_protected
Unexecuted instantiation: pvector.c:ovsrcu_index_get_protected
Unexecuted instantiation: random.c:ovsrcu_index_get_protected
Unexecuted instantiation: seq.c:ovsrcu_index_get_protected
Unexecuted instantiation: socket-util.c:ovsrcu_index_get_protected
Unexecuted instantiation: timeval.c:ovsrcu_index_get_protected
Unexecuted instantiation: tnl-ports.c:ovsrcu_index_get_protected
Unexecuted instantiation: tun-metadata.c:ovsrcu_index_get_protected
Unexecuted instantiation: unixctl.c:ovsrcu_index_get_protected
Unexecuted instantiation: util.c:ovsrcu_index_get_protected
Unexecuted instantiation: uuid.c:ovsrcu_index_get_protected
Unexecuted instantiation: vlog.c:ovsrcu_index_get_protected
Unexecuted instantiation: netdev-linux.c:ovsrcu_index_get_protected
Unexecuted instantiation: netdev-offload-tc.c:ovsrcu_index_get_protected
Unexecuted instantiation: netlink-socket.c:ovsrcu_index_get_protected
Unexecuted instantiation: route-table.c:ovsrcu_index_get_protected
Unexecuted instantiation: tc.c:ovsrcu_index_get_protected
Unexecuted instantiation: async-append-aio.c:ovsrcu_index_get_protected
Unexecuted instantiation: dirs.c:ovsrcu_index_get_protected
Unexecuted instantiation: classifier.c:ovsrcu_index_get_protected
Unexecuted instantiation: ccmap.c:ovsrcu_index_get_protected
Unexecuted instantiation: cmap.c:ovsrcu_index_get_protected
Unexecuted instantiation: connectivity.c:ovsrcu_index_get_protected
Unexecuted instantiation: coverage.c:ovsrcu_index_get_protected
Unexecuted instantiation: dpif.c:ovsrcu_index_get_protected
Unexecuted instantiation: fatal-signal.c:ovsrcu_index_get_protected
Unexecuted instantiation: guarded-list.c:ovsrcu_index_get_protected
Unexecuted instantiation: hmap.c:ovsrcu_index_get_protected
Unexecuted instantiation: jsonrpc.c:ovsrcu_index_get_protected
Unexecuted instantiation: meta-flow.c:ovsrcu_index_get_protected
Unexecuted instantiation: netdev-offload.c:ovsrcu_index_get_protected
Unexecuted instantiation: netdev-vport.c:ovsrcu_index_get_protected
Unexecuted instantiation: netlink.c:ovsrcu_index_get_protected
Unexecuted instantiation: nx-match.c:ovsrcu_index_get_protected
Unexecuted instantiation: odp-execute.c:ovsrcu_index_get_protected
Unexecuted instantiation: odp-util.c:ovsrcu_index_get_protected
Unexecuted instantiation: ofp-actions.c:ovsrcu_index_get_protected
Unexecuted instantiation: ofp-msgs.c:ovsrcu_index_get_protected
Unexecuted instantiation: stream.c:ovsrcu_index_get_protected
Unexecuted instantiation: tnl-neigh-cache.c:ovsrcu_index_get_protected
Unexecuted instantiation: netdev-native-tnl.c:ovsrcu_index_get_protected
Unexecuted instantiation: userspace-tso.c:ovsrcu_index_get_protected
Unexecuted instantiation: dpif-netlink.c:ovsrcu_index_get_protected
Unexecuted instantiation: dpif-netlink-rtnl.c:ovsrcu_index_get_protected
Unexecuted instantiation: netlink-conntrack.c:ovsrcu_index_get_protected
Unexecuted instantiation: netlink-notifier.c:ovsrcu_index_get_protected
Unexecuted instantiation: stream-ssl.c:ovsrcu_index_get_protected
Unexecuted instantiation: conntrack.c:ovsrcu_index_get_protected
Unexecuted instantiation: dpif-netdev.c:ovsrcu_index_get_protected
Unexecuted instantiation: dpif-netdev-private-dfc.c:ovsrcu_index_get_protected
Unexecuted instantiation: dpif-netdev-private-dpif.c:ovsrcu_index_get_protected
Unexecuted instantiation: dpif-netdev-private-extract.c:ovsrcu_index_get_protected
Unexecuted instantiation: dpif-netdev-perf.c:ovsrcu_index_get_protected
Unexecuted instantiation: fat-rwlock.c:ovsrcu_index_get_protected
Unexecuted instantiation: hindex.c:ovsrcu_index_get_protected
Unexecuted instantiation: ipf.c:ovsrcu_index_get_protected
Unexecuted instantiation: learn.c:ovsrcu_index_get_protected
Unexecuted instantiation: ovs-numa.c:ovsrcu_index_get_protected
Unexecuted instantiation: dpdk-stub.c:ovsrcu_index_get_protected
Unexecuted instantiation: vswitch-idl.c:ovsrcu_index_get_protected
Unexecuted instantiation: conntrack-icmp.c:ovsrcu_index_get_protected
Unexecuted instantiation: conntrack-tcp.c:ovsrcu_index_get_protected
Unexecuted instantiation: conntrack-tp.c:ovsrcu_index_get_protected
Unexecuted instantiation: conntrack-other.c:ovsrcu_index_get_protected
Unexecuted instantiation: dpif-netdev-extract-study.c:ovsrcu_index_get_protected
Unexecuted instantiation: dpif-netdev-lookup.c:ovsrcu_index_get_protected
Unexecuted instantiation: dpif-netdev-lookup-autovalidator.c:ovsrcu_index_get_protected
Unexecuted instantiation: dpif-netdev-lookup-generic.c:ovsrcu_index_get_protected
Unexecuted instantiation: ovsdb-data.c:ovsrcu_index_get_protected
Unexecuted instantiation: ovsdb-idl.c:ovsrcu_index_get_protected
Unexecuted instantiation: ovsdb-types.c:ovsrcu_index_get_protected
284
285
static inline void ovsrcu_index_set__(ovsrcu_index *i, int value,
286
                                      memory_order order)
287
0
{
288
0
    atomic_store_explicit(&i->v, value, order);
289
0
}
Unexecuted instantiation: miniflow_target.c:ovsrcu_index_set__
Unexecuted instantiation: flow.c:ovsrcu_index_set__
Unexecuted instantiation: netdev.c:ovsrcu_index_set__
Unexecuted instantiation: ofp-util.c:ovsrcu_index_set__
Unexecuted instantiation: ovs-rcu.c:ovsrcu_index_set__
Unexecuted instantiation: ovs-router.c:ovsrcu_index_set__
Unexecuted instantiation: ovs-thread.c:ovsrcu_index_set__
Unexecuted instantiation: packets.c:ovsrcu_index_set__
Unexecuted instantiation: poll-loop.c:ovsrcu_index_set__
Unexecuted instantiation: pvector.c:ovsrcu_index_set__
Unexecuted instantiation: random.c:ovsrcu_index_set__
Unexecuted instantiation: seq.c:ovsrcu_index_set__
Unexecuted instantiation: socket-util.c:ovsrcu_index_set__
Unexecuted instantiation: timeval.c:ovsrcu_index_set__
Unexecuted instantiation: tnl-ports.c:ovsrcu_index_set__
Unexecuted instantiation: tun-metadata.c:ovsrcu_index_set__
Unexecuted instantiation: unixctl.c:ovsrcu_index_set__
Unexecuted instantiation: util.c:ovsrcu_index_set__
Unexecuted instantiation: uuid.c:ovsrcu_index_set__
Unexecuted instantiation: vlog.c:ovsrcu_index_set__
Unexecuted instantiation: netdev-linux.c:ovsrcu_index_set__
Unexecuted instantiation: netdev-offload-tc.c:ovsrcu_index_set__
Unexecuted instantiation: netlink-socket.c:ovsrcu_index_set__
Unexecuted instantiation: route-table.c:ovsrcu_index_set__
Unexecuted instantiation: tc.c:ovsrcu_index_set__
Unexecuted instantiation: async-append-aio.c:ovsrcu_index_set__
Unexecuted instantiation: dirs.c:ovsrcu_index_set__
Unexecuted instantiation: classifier.c:ovsrcu_index_set__
Unexecuted instantiation: ccmap.c:ovsrcu_index_set__
Unexecuted instantiation: cmap.c:ovsrcu_index_set__
Unexecuted instantiation: connectivity.c:ovsrcu_index_set__
Unexecuted instantiation: coverage.c:ovsrcu_index_set__
Unexecuted instantiation: dpif.c:ovsrcu_index_set__
Unexecuted instantiation: fatal-signal.c:ovsrcu_index_set__
Unexecuted instantiation: guarded-list.c:ovsrcu_index_set__
Unexecuted instantiation: hmap.c:ovsrcu_index_set__
Unexecuted instantiation: jsonrpc.c:ovsrcu_index_set__
Unexecuted instantiation: meta-flow.c:ovsrcu_index_set__
Unexecuted instantiation: netdev-offload.c:ovsrcu_index_set__
Unexecuted instantiation: netdev-vport.c:ovsrcu_index_set__
Unexecuted instantiation: netlink.c:ovsrcu_index_set__
Unexecuted instantiation: nx-match.c:ovsrcu_index_set__
Unexecuted instantiation: odp-execute.c:ovsrcu_index_set__
Unexecuted instantiation: odp-util.c:ovsrcu_index_set__
Unexecuted instantiation: ofp-actions.c:ovsrcu_index_set__
Unexecuted instantiation: ofp-msgs.c:ovsrcu_index_set__
Unexecuted instantiation: stream.c:ovsrcu_index_set__
Unexecuted instantiation: tnl-neigh-cache.c:ovsrcu_index_set__
Unexecuted instantiation: netdev-native-tnl.c:ovsrcu_index_set__
Unexecuted instantiation: userspace-tso.c:ovsrcu_index_set__
Unexecuted instantiation: dpif-netlink.c:ovsrcu_index_set__
Unexecuted instantiation: dpif-netlink-rtnl.c:ovsrcu_index_set__
Unexecuted instantiation: netlink-conntrack.c:ovsrcu_index_set__
Unexecuted instantiation: netlink-notifier.c:ovsrcu_index_set__
Unexecuted instantiation: stream-ssl.c:ovsrcu_index_set__
Unexecuted instantiation: conntrack.c:ovsrcu_index_set__
Unexecuted instantiation: dpif-netdev.c:ovsrcu_index_set__
Unexecuted instantiation: dpif-netdev-private-dfc.c:ovsrcu_index_set__
Unexecuted instantiation: dpif-netdev-private-dpif.c:ovsrcu_index_set__
Unexecuted instantiation: dpif-netdev-private-extract.c:ovsrcu_index_set__
Unexecuted instantiation: dpif-netdev-perf.c:ovsrcu_index_set__
Unexecuted instantiation: fat-rwlock.c:ovsrcu_index_set__
Unexecuted instantiation: hindex.c:ovsrcu_index_set__
Unexecuted instantiation: ipf.c:ovsrcu_index_set__
Unexecuted instantiation: learn.c:ovsrcu_index_set__
Unexecuted instantiation: ovs-numa.c:ovsrcu_index_set__
Unexecuted instantiation: dpdk-stub.c:ovsrcu_index_set__
Unexecuted instantiation: vswitch-idl.c:ovsrcu_index_set__
Unexecuted instantiation: conntrack-icmp.c:ovsrcu_index_set__
Unexecuted instantiation: conntrack-tcp.c:ovsrcu_index_set__
Unexecuted instantiation: conntrack-tp.c:ovsrcu_index_set__
Unexecuted instantiation: conntrack-other.c:ovsrcu_index_set__
Unexecuted instantiation: dpif-netdev-extract-study.c:ovsrcu_index_set__
Unexecuted instantiation: dpif-netdev-lookup.c:ovsrcu_index_set__
Unexecuted instantiation: dpif-netdev-lookup-autovalidator.c:ovsrcu_index_set__
Unexecuted instantiation: dpif-netdev-lookup-generic.c:ovsrcu_index_set__
Unexecuted instantiation: ovsdb-data.c:ovsrcu_index_set__
Unexecuted instantiation: ovsdb-idl.c:ovsrcu_index_set__
Unexecuted instantiation: ovsdb-types.c:ovsrcu_index_set__
290
291
/* Writes the index 'value' in 'i'.  The previous value of 'i' may still be
292
 * used by readers until the next grace period. */
293
static inline void ovsrcu_index_set(ovsrcu_index *i, int value)
294
0
{
295
0
    ovsrcu_index_set__(i, value, memory_order_release);
296
0
}
Unexecuted instantiation: miniflow_target.c:ovsrcu_index_set
Unexecuted instantiation: flow.c:ovsrcu_index_set
Unexecuted instantiation: netdev.c:ovsrcu_index_set
Unexecuted instantiation: ofp-util.c:ovsrcu_index_set
Unexecuted instantiation: ovs-rcu.c:ovsrcu_index_set
Unexecuted instantiation: ovs-router.c:ovsrcu_index_set
Unexecuted instantiation: ovs-thread.c:ovsrcu_index_set
Unexecuted instantiation: packets.c:ovsrcu_index_set
Unexecuted instantiation: poll-loop.c:ovsrcu_index_set
Unexecuted instantiation: pvector.c:ovsrcu_index_set
Unexecuted instantiation: random.c:ovsrcu_index_set
Unexecuted instantiation: seq.c:ovsrcu_index_set
Unexecuted instantiation: socket-util.c:ovsrcu_index_set
Unexecuted instantiation: timeval.c:ovsrcu_index_set
Unexecuted instantiation: tnl-ports.c:ovsrcu_index_set
Unexecuted instantiation: tun-metadata.c:ovsrcu_index_set
Unexecuted instantiation: unixctl.c:ovsrcu_index_set
Unexecuted instantiation: util.c:ovsrcu_index_set
Unexecuted instantiation: uuid.c:ovsrcu_index_set
Unexecuted instantiation: vlog.c:ovsrcu_index_set
Unexecuted instantiation: netdev-linux.c:ovsrcu_index_set
Unexecuted instantiation: netdev-offload-tc.c:ovsrcu_index_set
Unexecuted instantiation: netlink-socket.c:ovsrcu_index_set
Unexecuted instantiation: route-table.c:ovsrcu_index_set
Unexecuted instantiation: tc.c:ovsrcu_index_set
Unexecuted instantiation: async-append-aio.c:ovsrcu_index_set
Unexecuted instantiation: dirs.c:ovsrcu_index_set
Unexecuted instantiation: classifier.c:ovsrcu_index_set
Unexecuted instantiation: ccmap.c:ovsrcu_index_set
Unexecuted instantiation: cmap.c:ovsrcu_index_set
Unexecuted instantiation: connectivity.c:ovsrcu_index_set
Unexecuted instantiation: coverage.c:ovsrcu_index_set
Unexecuted instantiation: dpif.c:ovsrcu_index_set
Unexecuted instantiation: fatal-signal.c:ovsrcu_index_set
Unexecuted instantiation: guarded-list.c:ovsrcu_index_set
Unexecuted instantiation: hmap.c:ovsrcu_index_set
Unexecuted instantiation: jsonrpc.c:ovsrcu_index_set
Unexecuted instantiation: meta-flow.c:ovsrcu_index_set
Unexecuted instantiation: netdev-offload.c:ovsrcu_index_set
Unexecuted instantiation: netdev-vport.c:ovsrcu_index_set
Unexecuted instantiation: netlink.c:ovsrcu_index_set
Unexecuted instantiation: nx-match.c:ovsrcu_index_set
Unexecuted instantiation: odp-execute.c:ovsrcu_index_set
Unexecuted instantiation: odp-util.c:ovsrcu_index_set
Unexecuted instantiation: ofp-actions.c:ovsrcu_index_set
Unexecuted instantiation: ofp-msgs.c:ovsrcu_index_set
Unexecuted instantiation: stream.c:ovsrcu_index_set
Unexecuted instantiation: tnl-neigh-cache.c:ovsrcu_index_set
Unexecuted instantiation: netdev-native-tnl.c:ovsrcu_index_set
Unexecuted instantiation: userspace-tso.c:ovsrcu_index_set
Unexecuted instantiation: dpif-netlink.c:ovsrcu_index_set
Unexecuted instantiation: dpif-netlink-rtnl.c:ovsrcu_index_set
Unexecuted instantiation: netlink-conntrack.c:ovsrcu_index_set
Unexecuted instantiation: netlink-notifier.c:ovsrcu_index_set
Unexecuted instantiation: stream-ssl.c:ovsrcu_index_set
Unexecuted instantiation: conntrack.c:ovsrcu_index_set
Unexecuted instantiation: dpif-netdev.c:ovsrcu_index_set
Unexecuted instantiation: dpif-netdev-private-dfc.c:ovsrcu_index_set
Unexecuted instantiation: dpif-netdev-private-dpif.c:ovsrcu_index_set
Unexecuted instantiation: dpif-netdev-private-extract.c:ovsrcu_index_set
Unexecuted instantiation: dpif-netdev-perf.c:ovsrcu_index_set
Unexecuted instantiation: fat-rwlock.c:ovsrcu_index_set
Unexecuted instantiation: hindex.c:ovsrcu_index_set
Unexecuted instantiation: ipf.c:ovsrcu_index_set
Unexecuted instantiation: learn.c:ovsrcu_index_set
Unexecuted instantiation: ovs-numa.c:ovsrcu_index_set
Unexecuted instantiation: dpdk-stub.c:ovsrcu_index_set
Unexecuted instantiation: vswitch-idl.c:ovsrcu_index_set
Unexecuted instantiation: conntrack-icmp.c:ovsrcu_index_set
Unexecuted instantiation: conntrack-tcp.c:ovsrcu_index_set
Unexecuted instantiation: conntrack-tp.c:ovsrcu_index_set
Unexecuted instantiation: conntrack-other.c:ovsrcu_index_set
Unexecuted instantiation: dpif-netdev-extract-study.c:ovsrcu_index_set
Unexecuted instantiation: dpif-netdev-lookup.c:ovsrcu_index_set
Unexecuted instantiation: dpif-netdev-lookup-autovalidator.c:ovsrcu_index_set
Unexecuted instantiation: dpif-netdev-lookup-generic.c:ovsrcu_index_set
Unexecuted instantiation: ovsdb-data.c:ovsrcu_index_set
Unexecuted instantiation: ovsdb-idl.c:ovsrcu_index_set
Unexecuted instantiation: ovsdb-types.c:ovsrcu_index_set
297
298
/* Writes the index 'value' in 'i'.  This is an alternative to
299
 * ovsrcu_index_set() that can be used when there's no possible concurrent
300
 * reader. */
301
static inline void ovsrcu_index_set_hidden(ovsrcu_index *i, int value)
302
0
{
303
0
    ovsrcu_index_set__(i, value, memory_order_relaxed);
304
0
}
Unexecuted instantiation: miniflow_target.c:ovsrcu_index_set_hidden
Unexecuted instantiation: flow.c:ovsrcu_index_set_hidden
Unexecuted instantiation: netdev.c:ovsrcu_index_set_hidden
Unexecuted instantiation: ofp-util.c:ovsrcu_index_set_hidden
Unexecuted instantiation: ovs-rcu.c:ovsrcu_index_set_hidden
Unexecuted instantiation: ovs-router.c:ovsrcu_index_set_hidden
Unexecuted instantiation: ovs-thread.c:ovsrcu_index_set_hidden
Unexecuted instantiation: packets.c:ovsrcu_index_set_hidden
Unexecuted instantiation: poll-loop.c:ovsrcu_index_set_hidden
Unexecuted instantiation: pvector.c:ovsrcu_index_set_hidden
Unexecuted instantiation: random.c:ovsrcu_index_set_hidden
Unexecuted instantiation: seq.c:ovsrcu_index_set_hidden
Unexecuted instantiation: socket-util.c:ovsrcu_index_set_hidden
Unexecuted instantiation: timeval.c:ovsrcu_index_set_hidden
Unexecuted instantiation: tnl-ports.c:ovsrcu_index_set_hidden
Unexecuted instantiation: tun-metadata.c:ovsrcu_index_set_hidden
Unexecuted instantiation: unixctl.c:ovsrcu_index_set_hidden
Unexecuted instantiation: util.c:ovsrcu_index_set_hidden
Unexecuted instantiation: uuid.c:ovsrcu_index_set_hidden
Unexecuted instantiation: vlog.c:ovsrcu_index_set_hidden
Unexecuted instantiation: netdev-linux.c:ovsrcu_index_set_hidden
Unexecuted instantiation: netdev-offload-tc.c:ovsrcu_index_set_hidden
Unexecuted instantiation: netlink-socket.c:ovsrcu_index_set_hidden
Unexecuted instantiation: route-table.c:ovsrcu_index_set_hidden
Unexecuted instantiation: tc.c:ovsrcu_index_set_hidden
Unexecuted instantiation: async-append-aio.c:ovsrcu_index_set_hidden
Unexecuted instantiation: dirs.c:ovsrcu_index_set_hidden
Unexecuted instantiation: classifier.c:ovsrcu_index_set_hidden
Unexecuted instantiation: ccmap.c:ovsrcu_index_set_hidden
Unexecuted instantiation: cmap.c:ovsrcu_index_set_hidden
Unexecuted instantiation: connectivity.c:ovsrcu_index_set_hidden
Unexecuted instantiation: coverage.c:ovsrcu_index_set_hidden
Unexecuted instantiation: dpif.c:ovsrcu_index_set_hidden
Unexecuted instantiation: fatal-signal.c:ovsrcu_index_set_hidden
Unexecuted instantiation: guarded-list.c:ovsrcu_index_set_hidden
Unexecuted instantiation: hmap.c:ovsrcu_index_set_hidden
Unexecuted instantiation: jsonrpc.c:ovsrcu_index_set_hidden
Unexecuted instantiation: meta-flow.c:ovsrcu_index_set_hidden
Unexecuted instantiation: netdev-offload.c:ovsrcu_index_set_hidden
Unexecuted instantiation: netdev-vport.c:ovsrcu_index_set_hidden
Unexecuted instantiation: netlink.c:ovsrcu_index_set_hidden
Unexecuted instantiation: nx-match.c:ovsrcu_index_set_hidden
Unexecuted instantiation: odp-execute.c:ovsrcu_index_set_hidden
Unexecuted instantiation: odp-util.c:ovsrcu_index_set_hidden
Unexecuted instantiation: ofp-actions.c:ovsrcu_index_set_hidden
Unexecuted instantiation: ofp-msgs.c:ovsrcu_index_set_hidden
Unexecuted instantiation: stream.c:ovsrcu_index_set_hidden
Unexecuted instantiation: tnl-neigh-cache.c:ovsrcu_index_set_hidden
Unexecuted instantiation: netdev-native-tnl.c:ovsrcu_index_set_hidden
Unexecuted instantiation: userspace-tso.c:ovsrcu_index_set_hidden
Unexecuted instantiation: dpif-netlink.c:ovsrcu_index_set_hidden
Unexecuted instantiation: dpif-netlink-rtnl.c:ovsrcu_index_set_hidden
Unexecuted instantiation: netlink-conntrack.c:ovsrcu_index_set_hidden
Unexecuted instantiation: netlink-notifier.c:ovsrcu_index_set_hidden
Unexecuted instantiation: stream-ssl.c:ovsrcu_index_set_hidden
Unexecuted instantiation: conntrack.c:ovsrcu_index_set_hidden
Unexecuted instantiation: dpif-netdev.c:ovsrcu_index_set_hidden
Unexecuted instantiation: dpif-netdev-private-dfc.c:ovsrcu_index_set_hidden
Unexecuted instantiation: dpif-netdev-private-dpif.c:ovsrcu_index_set_hidden
Unexecuted instantiation: dpif-netdev-private-extract.c:ovsrcu_index_set_hidden
Unexecuted instantiation: dpif-netdev-perf.c:ovsrcu_index_set_hidden
Unexecuted instantiation: fat-rwlock.c:ovsrcu_index_set_hidden
Unexecuted instantiation: hindex.c:ovsrcu_index_set_hidden
Unexecuted instantiation: ipf.c:ovsrcu_index_set_hidden
Unexecuted instantiation: learn.c:ovsrcu_index_set_hidden
Unexecuted instantiation: ovs-numa.c:ovsrcu_index_set_hidden
Unexecuted instantiation: dpdk-stub.c:ovsrcu_index_set_hidden
Unexecuted instantiation: vswitch-idl.c:ovsrcu_index_set_hidden
Unexecuted instantiation: conntrack-icmp.c:ovsrcu_index_set_hidden
Unexecuted instantiation: conntrack-tcp.c:ovsrcu_index_set_hidden
Unexecuted instantiation: conntrack-tp.c:ovsrcu_index_set_hidden
Unexecuted instantiation: conntrack-other.c:ovsrcu_index_set_hidden
Unexecuted instantiation: dpif-netdev-extract-study.c:ovsrcu_index_set_hidden
Unexecuted instantiation: dpif-netdev-lookup.c:ovsrcu_index_set_hidden
Unexecuted instantiation: dpif-netdev-lookup-autovalidator.c:ovsrcu_index_set_hidden
Unexecuted instantiation: dpif-netdev-lookup-generic.c:ovsrcu_index_set_hidden
Unexecuted instantiation: ovsdb-data.c:ovsrcu_index_set_hidden
Unexecuted instantiation: ovsdb-idl.c:ovsrcu_index_set_hidden
Unexecuted instantiation: ovsdb-types.c:ovsrcu_index_set_hidden
305
306
/* Initializes 'i' with 'value'.  This is safe to call as long as there are no
307
 * concurrent readers. */
308
static inline void ovsrcu_index_init(ovsrcu_index *i, int value)
309
0
{
310
0
    atomic_init(&i->v, value);
311
0
}
Unexecuted instantiation: miniflow_target.c:ovsrcu_index_init
Unexecuted instantiation: flow.c:ovsrcu_index_init
Unexecuted instantiation: netdev.c:ovsrcu_index_init
Unexecuted instantiation: ofp-util.c:ovsrcu_index_init
Unexecuted instantiation: ovs-rcu.c:ovsrcu_index_init
Unexecuted instantiation: ovs-router.c:ovsrcu_index_init
Unexecuted instantiation: ovs-thread.c:ovsrcu_index_init
Unexecuted instantiation: packets.c:ovsrcu_index_init
Unexecuted instantiation: poll-loop.c:ovsrcu_index_init
Unexecuted instantiation: pvector.c:ovsrcu_index_init
Unexecuted instantiation: random.c:ovsrcu_index_init
Unexecuted instantiation: seq.c:ovsrcu_index_init
Unexecuted instantiation: socket-util.c:ovsrcu_index_init
Unexecuted instantiation: timeval.c:ovsrcu_index_init
Unexecuted instantiation: tnl-ports.c:ovsrcu_index_init
Unexecuted instantiation: tun-metadata.c:ovsrcu_index_init
Unexecuted instantiation: unixctl.c:ovsrcu_index_init
Unexecuted instantiation: util.c:ovsrcu_index_init
Unexecuted instantiation: uuid.c:ovsrcu_index_init
Unexecuted instantiation: vlog.c:ovsrcu_index_init
Unexecuted instantiation: netdev-linux.c:ovsrcu_index_init
Unexecuted instantiation: netdev-offload-tc.c:ovsrcu_index_init
Unexecuted instantiation: netlink-socket.c:ovsrcu_index_init
Unexecuted instantiation: route-table.c:ovsrcu_index_init
Unexecuted instantiation: tc.c:ovsrcu_index_init
Unexecuted instantiation: async-append-aio.c:ovsrcu_index_init
Unexecuted instantiation: dirs.c:ovsrcu_index_init
Unexecuted instantiation: classifier.c:ovsrcu_index_init
Unexecuted instantiation: ccmap.c:ovsrcu_index_init
Unexecuted instantiation: cmap.c:ovsrcu_index_init
Unexecuted instantiation: connectivity.c:ovsrcu_index_init
Unexecuted instantiation: coverage.c:ovsrcu_index_init
Unexecuted instantiation: dpif.c:ovsrcu_index_init
Unexecuted instantiation: fatal-signal.c:ovsrcu_index_init
Unexecuted instantiation: guarded-list.c:ovsrcu_index_init
Unexecuted instantiation: hmap.c:ovsrcu_index_init
Unexecuted instantiation: jsonrpc.c:ovsrcu_index_init
Unexecuted instantiation: meta-flow.c:ovsrcu_index_init
Unexecuted instantiation: netdev-offload.c:ovsrcu_index_init
Unexecuted instantiation: netdev-vport.c:ovsrcu_index_init
Unexecuted instantiation: netlink.c:ovsrcu_index_init
Unexecuted instantiation: nx-match.c:ovsrcu_index_init
Unexecuted instantiation: odp-execute.c:ovsrcu_index_init
Unexecuted instantiation: odp-util.c:ovsrcu_index_init
Unexecuted instantiation: ofp-actions.c:ovsrcu_index_init
Unexecuted instantiation: ofp-msgs.c:ovsrcu_index_init
Unexecuted instantiation: stream.c:ovsrcu_index_init
Unexecuted instantiation: tnl-neigh-cache.c:ovsrcu_index_init
Unexecuted instantiation: netdev-native-tnl.c:ovsrcu_index_init
Unexecuted instantiation: userspace-tso.c:ovsrcu_index_init
Unexecuted instantiation: dpif-netlink.c:ovsrcu_index_init
Unexecuted instantiation: dpif-netlink-rtnl.c:ovsrcu_index_init
Unexecuted instantiation: netlink-conntrack.c:ovsrcu_index_init
Unexecuted instantiation: netlink-notifier.c:ovsrcu_index_init
Unexecuted instantiation: stream-ssl.c:ovsrcu_index_init
Unexecuted instantiation: conntrack.c:ovsrcu_index_init
Unexecuted instantiation: dpif-netdev.c:ovsrcu_index_init
Unexecuted instantiation: dpif-netdev-private-dfc.c:ovsrcu_index_init
Unexecuted instantiation: dpif-netdev-private-dpif.c:ovsrcu_index_init
Unexecuted instantiation: dpif-netdev-private-extract.c:ovsrcu_index_init
Unexecuted instantiation: dpif-netdev-perf.c:ovsrcu_index_init
Unexecuted instantiation: fat-rwlock.c:ovsrcu_index_init
Unexecuted instantiation: hindex.c:ovsrcu_index_init
Unexecuted instantiation: ipf.c:ovsrcu_index_init
Unexecuted instantiation: learn.c:ovsrcu_index_init
Unexecuted instantiation: ovs-numa.c:ovsrcu_index_init
Unexecuted instantiation: dpdk-stub.c:ovsrcu_index_init
Unexecuted instantiation: vswitch-idl.c:ovsrcu_index_init
Unexecuted instantiation: conntrack-icmp.c:ovsrcu_index_init
Unexecuted instantiation: conntrack-tcp.c:ovsrcu_index_init
Unexecuted instantiation: conntrack-tp.c:ovsrcu_index_init
Unexecuted instantiation: conntrack-other.c:ovsrcu_index_init
Unexecuted instantiation: dpif-netdev-extract-study.c:ovsrcu_index_init
Unexecuted instantiation: dpif-netdev-lookup.c:ovsrcu_index_init
Unexecuted instantiation: dpif-netdev-lookup-autovalidator.c:ovsrcu_index_init
Unexecuted instantiation: dpif-netdev-lookup-generic.c:ovsrcu_index_init
Unexecuted instantiation: ovsdb-data.c:ovsrcu_index_init
Unexecuted instantiation: ovsdb-idl.c:ovsrcu_index_init
Unexecuted instantiation: ovsdb-types.c:ovsrcu_index_init
312
313
/* Quiescent states. */
314
void ovsrcu_quiesce_start(void);
315
void ovsrcu_quiesce_end(void);
316
void ovsrcu_quiesce(void);
317
int ovsrcu_try_quiesce(void);
318
bool ovsrcu_is_quiescent(void);
319
320
/* Synchronization.  Waits for all non-quiescent threads to quiesce at least
321
 * once.  This can block for a relatively long time. */
322
void ovsrcu_synchronize(void);
323
324
void ovsrcu_exit(void);
325
326
void ovsrcu_barrier(void);
327
328
#endif /* ovs-rcu.h */