[ovs-dev] [PATCH V9 2/3] dpif-linux: Pass 'struct dpif_linux *' to internal static functions.

Alex Wang alexw at nicira.com
Fri Apr 18 00:41:06 UTC 2014


This commit reformats the dpif-linux module so that all internal
static functions take 'struct dpif_linux *' as input argument.
This will allow the adding of thread-safety annotations.

Signed-off-by: Alex Wang <alexw at nicira.com>

---
V9:
- necessary changes for adding thread-safety annotations.
---
 lib/dpif-linux.c |  113 +++++++++++++++++++++++++++---------------------------
 1 file changed, 56 insertions(+), 57 deletions(-)

diff --git a/lib/dpif-linux.c b/lib/dpif-linux.c
index c119c12..b70ddef 100644
--- a/lib/dpif-linux.c
+++ b/lib/dpif-linux.c
@@ -158,8 +158,8 @@ struct dpif_linux {
     bool refresh_channels;
 };
 
-static void report_loss(struct dpif *, struct dpif_channel *, uint32_t ch_idx,
-                        uint32_t handler_id);
+static void report_loss(struct dpif_linux *, struct dpif_channel *,
+                        uint32_t ch_idx, uint32_t handler_id);
 
 static struct vlog_rate_limit error_rl = VLOG_RATE_LIMIT_INIT(9999, 5);
 
@@ -180,7 +180,7 @@ static int dpif_linux_init(void);
 static int open_dpif(const struct dpif_linux_dp *, struct dpif **);
 static uint32_t dpif_linux_port_get_pid(const struct dpif *,
                                         odp_port_t port_no, uint32_t hash);
-static int dpif_linux_refresh_channels(struct dpif *, uint32_t n_handlers);
+static int dpif_linux_refresh_channels(struct dpif_linux *, uint32_t n_handlers);
 static void dpif_linux_vport_to_ofpbuf(const struct dpif_linux_vport *,
                                        struct ofpbuf *);
 static int dpif_linux_vport_from_ofpbuf(struct dpif_linux_vport *,
@@ -538,7 +538,7 @@ dpif_linux_run(struct dpif *dpif_)
     if (dpif->refresh_channels) {
         dpif->refresh_channels = false;
         fat_rwlock_wrlock(&dpif->upcall_lock);
-        dpif_linux_refresh_channels(dpif_, dpif->n_handlers);
+        dpif_linux_refresh_channels(dpif, dpif->n_handlers);
         fat_rwlock_unlock(&dpif->upcall_lock);
     }
 }
@@ -623,10 +623,9 @@ netdev_to_ovs_vport_type(const struct netdev *netdev)
 }
 
 static int
-dpif_linux_port_add__(struct dpif *dpif_, struct netdev *netdev,
+dpif_linux_port_add__(struct dpif_linux *dpif, struct netdev *netdev,
                       odp_port_t *port_nop)
 {
-    struct dpif_linux *dpif = dpif_linux_cast(dpif_);
     const struct netdev_tunnel_config *tnl_cfg;
     char namebuf[NETDEV_VPORT_NAME_BUFSIZE];
     const char *name = netdev_vport_get_dpif_port(netdev,
@@ -654,7 +653,7 @@ dpif_linux_port_add__(struct dpif *dpif_, struct netdev *netdev,
     if (request.type == OVS_VPORT_TYPE_UNSPEC) {
         VLOG_WARN_RL(&error_rl, "%s: cannot create port `%s' because it has "
                      "unsupported type `%s'",
-                     dpif_name(dpif_), name, type);
+                     dpif_name(&dpif->dpif), name, type);
         vport_del_socksp(socksp, dpif->n_handlers);
         return EINVAL;
     }
@@ -684,7 +683,7 @@ dpif_linux_port_add__(struct dpif *dpif_, struct netdev *netdev,
     } else {
         if (error == EBUSY && *port_nop != ODPP_NONE) {
             VLOG_INFO("%s: requested port %"PRIu32" is in use",
-                      dpif_name(dpif_), *port_nop);
+                      dpif_name(&dpif->dpif), *port_nop);
         }
 
         vport_del_socksp(socksp, dpif->n_handlers);
@@ -695,7 +694,7 @@ dpif_linux_port_add__(struct dpif *dpif_, struct netdev *netdev,
         error = vport_add_channels(dpif, *port_nop, socksp);
         if (error) {
             VLOG_INFO("%s: could not add channel for port %s",
-                      dpif_name(dpif_), name);
+                      dpif_name(&dpif->dpif), name);
 
             /* Delete the port. */
             dpif_linux_vport_init(&request);
@@ -724,16 +723,15 @@ dpif_linux_port_add(struct dpif *dpif_, struct netdev *netdev,
     int error;
 
     fat_rwlock_wrlock(&dpif->upcall_lock);
-    error = dpif_linux_port_add__(dpif_, netdev, port_nop);
+    error = dpif_linux_port_add__(dpif, netdev, port_nop);
     fat_rwlock_unlock(&dpif->upcall_lock);
 
     return error;
 }
 
 static int
-dpif_linux_port_del__(struct dpif *dpif_, odp_port_t port_no)
+dpif_linux_port_del__(struct dpif_linux *dpif, odp_port_t port_no)
 {
-    struct dpif_linux *dpif = dpif_linux_cast(dpif_);
     struct dpif_linux_vport vport;
     int error;
 
@@ -755,14 +753,14 @@ dpif_linux_port_del(struct dpif *dpif_, odp_port_t port_no)
     int error;
 
     fat_rwlock_wrlock(&dpif->upcall_lock);
-    error = dpif_linux_port_del__(dpif_, port_no);
+    error = dpif_linux_port_del__(dpif, port_no);
     fat_rwlock_unlock(&dpif->upcall_lock);
 
     return error;
 }
 
 static int
-dpif_linux_port_query__(const struct dpif *dpif, odp_port_t port_no,
+dpif_linux_port_query__(const struct dpif_linux *dpif, odp_port_t port_no,
                         const char *port_name, struct dpif_port *dpif_port)
 {
     struct dpif_linux_vport request;
@@ -772,7 +770,7 @@ dpif_linux_port_query__(const struct dpif *dpif, odp_port_t port_no,
 
     dpif_linux_vport_init(&request);
     request.cmd = OVS_VPORT_CMD_GET;
-    request.dp_ifindex = dpif_linux_cast(dpif)->dp_ifindex;
+    request.dp_ifindex = dpif->dp_ifindex;
     request.port_no = port_no;
     request.name = port_name;
 
@@ -793,16 +791,20 @@ dpif_linux_port_query__(const struct dpif *dpif, odp_port_t port_no,
 }
 
 static int
-dpif_linux_port_query_by_number(const struct dpif *dpif, odp_port_t port_no,
+dpif_linux_port_query_by_number(const struct dpif *dpif_, odp_port_t port_no,
                                 struct dpif_port *dpif_port)
 {
+    struct dpif_linux *dpif = dpif_linux_cast(dpif_);
+
     return dpif_linux_port_query__(dpif, port_no, NULL, dpif_port);
 }
 
 static int
-dpif_linux_port_query_by_name(const struct dpif *dpif, const char *devname,
+dpif_linux_port_query_by_name(const struct dpif *dpif_, const char *devname,
                               struct dpif_port *dpif_port)
 {
+    struct dpif_linux *dpif = dpif_linux_cast(dpif_);
+
     return dpif_linux_port_query__(dpif, 0, devname, dpif_port);
 }
 
@@ -846,9 +848,9 @@ struct dpif_linux_port_state {
 };
 
 static void
-dpif_linux_port_dump_start__(const struct dpif *dpif_, struct nl_dump *dump)
+dpif_linux_port_dump_start__(const struct dpif_linux *dpif,
+                             struct nl_dump *dump)
 {
-    const struct dpif_linux *dpif = dpif_linux_cast(dpif_);
     struct dpif_linux_vport request;
     struct ofpbuf *buf;
 
@@ -863,8 +865,9 @@ dpif_linux_port_dump_start__(const struct dpif *dpif_, struct nl_dump *dump)
 }
 
 static int
-dpif_linux_port_dump_start(const struct dpif *dpif, void **statep)
+dpif_linux_port_dump_start(const struct dpif *dpif_, void **statep)
 {
+    struct dpif_linux *dpif = dpif_linux_cast(dpif_);
     struct dpif_linux_port_state *state;
 
     *statep = state = xmalloc(sizeof *state);
@@ -875,11 +878,10 @@ dpif_linux_port_dump_start(const struct dpif *dpif, void **statep)
 }
 
 static int
-dpif_linux_port_dump_next__(const struct dpif *dpif_, struct nl_dump *dump,
+dpif_linux_port_dump_next__(const struct dpif_linux *dpif, struct nl_dump *dump,
                             struct dpif_linux_vport *vport,
                             struct ofpbuf *buffer)
 {
-    struct dpif_linux *dpif = dpif_linux_cast(dpif_);
     struct ofpbuf buf;
     int error;
 
@@ -896,9 +898,10 @@ dpif_linux_port_dump_next__(const struct dpif *dpif_, struct nl_dump *dump,
 }
 
 static int
-dpif_linux_port_dump_next(const struct dpif *dpif OVS_UNUSED, void *state_,
+dpif_linux_port_dump_next(const struct dpif *dpif_, void *state_,
                           struct dpif_port *dpif_port)
 {
+    struct dpif_linux *dpif = dpif_linux_cast(dpif_);
     struct dpif_linux_port_state *state = state_;
     struct dpif_linux_vport vport;
     int error;
@@ -1006,11 +1009,10 @@ dpif_linux_port_poll_wait(const struct dpif *dpif_)
 }
 
 static int
-dpif_linux_flow_get__(const struct dpif *dpif_,
+dpif_linux_flow_get__(const struct dpif_linux *dpif,
                       const struct nlattr *key, size_t key_len,
                       struct dpif_linux_flow *reply, struct ofpbuf **bufp)
 {
-    const struct dpif_linux *dpif = dpif_linux_cast(dpif_);
     struct dpif_linux_flow request;
 
     dpif_linux_flow_init(&request);
@@ -1026,11 +1028,12 @@ dpif_linux_flow_get(const struct dpif *dpif_,
                     const struct nlattr *key, size_t key_len,
                     struct ofpbuf **actionsp, struct dpif_flow_stats *stats)
 {
+    const struct dpif_linux *dpif = dpif_linux_cast(dpif_);
     struct dpif_linux_flow reply;
     struct ofpbuf *buf;
     int error;
 
-    error = dpif_linux_flow_get__(dpif_, key, key_len, &reply, &buf);
+    error = dpif_linux_flow_get__(dpif, key, key_len, &reply, &buf);
     if (!error) {
         if (stats) {
             dpif_linux_flow_get_stats(&reply, stats);
@@ -1047,13 +1050,11 @@ dpif_linux_flow_get(const struct dpif *dpif_,
 }
 
 static void
-dpif_linux_init_flow_put(struct dpif *dpif_, const struct dpif_flow_put *put,
+dpif_linux_init_flow_put(struct dpif_linux *dpif, const struct dpif_flow_put *put,
                          struct dpif_linux_flow *request)
 {
     static const struct nlattr dummy_action;
 
-    const struct dpif_linux *dpif = dpif_linux_cast(dpif_);
-
     dpif_linux_flow_init(request);
     request->cmd = (put->flags & DPIF_FP_CREATE
                     ? OVS_FLOW_CMD_NEW : OVS_FLOW_CMD_SET);
@@ -1076,11 +1077,12 @@ dpif_linux_init_flow_put(struct dpif *dpif_, const struct dpif_flow_put *put,
 static int
 dpif_linux_flow_put(struct dpif *dpif_, const struct dpif_flow_put *put)
 {
+    struct dpif_linux *dpif = dpif_linux_cast(dpif_);
     struct dpif_linux_flow request, reply;
     struct ofpbuf *buf;
     int error;
 
-    dpif_linux_init_flow_put(dpif_, put, &request);
+    dpif_linux_init_flow_put(dpif, put, &request);
     error = dpif_linux_flow_transact(&request,
                                      put->stats ? &reply : NULL,
                                      put->stats ? &buf : NULL);
@@ -1092,11 +1094,9 @@ dpif_linux_flow_put(struct dpif *dpif_, const struct dpif_flow_put *put)
 }
 
 static void
-dpif_linux_init_flow_del(struct dpif *dpif_, const struct dpif_flow_del *del,
+dpif_linux_init_flow_del(struct dpif_linux *dpif, const struct dpif_flow_del *del,
                          struct dpif_linux_flow *request)
 {
-    const struct dpif_linux *dpif = dpif_linux_cast(dpif_);
-
     dpif_linux_flow_init(request);
     request->cmd = OVS_FLOW_CMD_DEL;
     request->dp_ifindex = dpif->dp_ifindex;
@@ -1107,11 +1107,12 @@ dpif_linux_init_flow_del(struct dpif *dpif_, const struct dpif_flow_del *del,
 static int
 dpif_linux_flow_del(struct dpif *dpif_, const struct dpif_flow_del *del)
 {
+    struct dpif_linux *dpif = dpif_linux_cast(dpif_);
     struct dpif_linux_flow request, reply;
     struct ofpbuf *buf;
     int error;
 
-    dpif_linux_init_flow_del(dpif_, del, &request);
+    dpif_linux_init_flow_del(dpif, del, &request);
     error = dpif_linux_flow_transact(&request,
                                      del->stats ? &reply : NULL,
                                      del->stats ? &buf : NULL);
@@ -1184,6 +1185,7 @@ dpif_linux_flow_dump_next(const struct dpif *dpif_, void *iter_, void *state_,
                           const struct nlattr **actions, size_t *actions_len,
                           const struct dpif_flow_stats **stats)
 {
+    const struct dpif_linux *dpif = dpif_linux_cast(dpif_);
     struct dpif_linux_flow_iter *iter = iter_;
     struct dpif_linux_flow_state *state = state_;
     struct ofpbuf buf;
@@ -1204,7 +1206,7 @@ dpif_linux_flow_dump_next(const struct dpif *dpif_, void *iter_, void *state_,
         }
 
         if (actions && !state->flow.actions) {
-            error = dpif_linux_flow_get__(dpif_, state->flow.key,
+            error = dpif_linux_flow_get__(dpif, state->flow.key,
                                           state->flow.key_len,
                                           &state->flow, &state->tmp);
             if (error == ENOENT) {
@@ -1311,9 +1313,8 @@ dpif_linux_execute(struct dpif *dpif_, struct dpif_execute *execute)
 #define MAX_OPS 50
 
 static void
-dpif_linux_operate__(struct dpif *dpif_, struct dpif_op **ops, size_t n_ops)
+dpif_linux_operate__(struct dpif_linux *dpif, struct dpif_op **ops, size_t n_ops)
 {
-    const struct dpif_linux *dpif = dpif_linux_cast(dpif_);
 
     struct op_auxdata {
         struct nl_transaction txn;
@@ -1347,7 +1348,7 @@ dpif_linux_operate__(struct dpif *dpif_, struct dpif_op **ops, size_t n_ops)
         switch (op->type) {
         case DPIF_OP_FLOW_PUT:
             put = &op->u.flow_put;
-            dpif_linux_init_flow_put(dpif_, put, &flow);
+            dpif_linux_init_flow_put(dpif, put, &flow);
             if (put->stats) {
                 flow.nlmsg_flags |= NLM_F_ECHO;
                 aux->txn.reply = &aux->reply;
@@ -1357,7 +1358,7 @@ dpif_linux_operate__(struct dpif *dpif_, struct dpif_op **ops, size_t n_ops)
 
         case DPIF_OP_FLOW_DEL:
             del = &op->u.flow_del;
-            dpif_linux_init_flow_del(dpif_, del, &flow);
+            dpif_linux_init_flow_del(dpif, del, &flow);
             if (del->stats) {
                 flow.nlmsg_flags |= NLM_F_ECHO;
                 aux->txn.reply = &aux->reply;
@@ -1442,8 +1443,10 @@ dpif_linux_operate__(struct dpif *dpif_, struct dpif_op **ops, size_t n_ops)
 }
 
 static void
-dpif_linux_operate(struct dpif *dpif, struct dpif_op **ops, size_t n_ops)
+dpif_linux_operate(struct dpif *dpif_, struct dpif_op **ops, size_t n_ops)
 {
+    struct dpif_linux *dpif = dpif_linux_cast(dpif_);
+
     while (n_ops > 0) {
         size_t chunk = MIN(n_ops, MAX_OPS);
         dpif_linux_operate__(dpif, ops, chunk);
@@ -1457,9 +1460,8 @@ dpif_linux_operate(struct dpif *dpif, struct dpif_op **ops, size_t n_ops)
  * any kernel vport that lacks one and deleting any channels that have no
  * backing kernel vports. */
 static int
-dpif_linux_refresh_channels(struct dpif *dpif_, uint32_t n_handlers)
+dpif_linux_refresh_channels(struct dpif_linux *dpif, uint32_t n_handlers)
 {
-    struct dpif_linux *dpif = dpif_linux_cast(dpif_);
     unsigned long int *keep_channels;
     struct dpif_linux_vport vport;
     size_t keep_channels_nbits;
@@ -1501,8 +1503,8 @@ dpif_linux_refresh_channels(struct dpif *dpif_, uint32_t n_handlers)
     keep_channels = bitmap_allocate(keep_channels_nbits);
 
     ofpbuf_use_stub(&buf, reply_stub, sizeof reply_stub);
-    dpif_linux_port_dump_start__(dpif_, &dump);
-    while (!dpif_linux_port_dump_next__(dpif_, &dump, &vport, &buf)) {
+    dpif_linux_port_dump_start__(dpif, &dump);
+    while (!dpif_linux_port_dump_next__(dpif, &dump, &vport, &buf)) {
         uint32_t port_no = odp_to_u32(vport.port_no);
         uint32_t *upcall_pids = NULL;
         int error;
@@ -1519,7 +1521,7 @@ dpif_linux_refresh_channels(struct dpif *dpif_, uint32_t n_handlers)
             error = vport_add_channels(dpif, vport.port_no, socksp);
             if (error) {
                 VLOG_INFO("%s: could not add channels for port %s",
-                          dpif_name(dpif_), vport.name);
+                          dpif_name(&dpif->dpif), vport.name);
                 vport_del_socksp(socksp, dpif->n_handlers);
                 retval = error;
                 goto error;
@@ -1583,17 +1585,15 @@ dpif_linux_refresh_channels(struct dpif *dpif_, uint32_t n_handlers)
 }
 
 static int
-dpif_linux_recv_set__(struct dpif *dpif_, bool enable)
+dpif_linux_recv_set__(struct dpif_linux *dpif, bool enable)
 {
-    struct dpif_linux *dpif = dpif_linux_cast(dpif_);
-
     if ((dpif->handlers != NULL) == enable) {
         return 0;
     } else if (!enable) {
         destroy_all_channels(dpif);
         return 0;
     } else {
-        return dpif_linux_refresh_channels(dpif_, 1);
+        return dpif_linux_refresh_channels(dpif, 1);
     }
 }
 
@@ -1604,7 +1604,7 @@ dpif_linux_recv_set(struct dpif *dpif_, bool enable)
     int error;
 
     fat_rwlock_wrlock(&dpif->upcall_lock);
-    error = dpif_linux_recv_set__(dpif_, enable);
+    error = dpif_linux_recv_set__(dpif, enable);
     fat_rwlock_unlock(&dpif->upcall_lock);
 
     return error;
@@ -1618,7 +1618,7 @@ dpif_linux_handlers_set(struct dpif *dpif_, uint32_t n_handlers)
 
     fat_rwlock_wrlock(&dpif->upcall_lock);
     if (dpif->handlers) {
-        error = dpif_linux_refresh_channels(dpif_, n_handlers);
+        error = dpif_linux_refresh_channels(dpif, n_handlers);
     }
     fat_rwlock_unlock(&dpif->upcall_lock);
 
@@ -1700,10 +1700,9 @@ parse_odp_packet(struct ofpbuf *buf, struct dpif_upcall *upcall,
 }
 
 static int
-dpif_linux_recv__(struct dpif *dpif_, uint32_t handler_id,
+dpif_linux_recv__(struct dpif_linux *dpif, uint32_t handler_id,
                   struct dpif_upcall *upcall, struct ofpbuf *buf)
 {
-    struct dpif_linux *dpif = dpif_linux_cast(dpif_);
     struct dpif_handler *handler;
     int read_tries = 0;
 
@@ -1749,7 +1748,7 @@ dpif_linux_recv__(struct dpif *dpif_, uint32_t handler_id,
                  * packets that the buffer overflowed.  Try again
                  * immediately because there's almost certainly a packet
                  * waiting for us. */
-                report_loss(dpif_, ch, idx, handler_id);
+                report_loss(dpif, ch, idx, handler_id);
                 continue;
             }
 
@@ -1781,7 +1780,7 @@ dpif_linux_recv(struct dpif *dpif_, uint32_t handler_id,
     int error;
 
     fat_rwlock_rdlock(&dpif->upcall_lock);
-    error = dpif_linux_recv__(dpif_, handler_id, upcall, buf);
+    error = dpif_linux_recv__(dpif, handler_id, upcall, buf);
     fat_rwlock_unlock(&dpif->upcall_lock);
 
     return error;
@@ -2410,7 +2409,7 @@ dpif_linux_flow_get_stats(const struct dpif_linux_flow *flow,
 /* Logs information about a packet that was recently lost in 'ch' (in
  * 'dpif_'). */
 static void
-report_loss(struct dpif *dpif_, struct dpif_channel *ch, uint32_t ch_idx,
+report_loss(struct dpif_linux *dpif, struct dpif_channel *ch, uint32_t ch_idx,
             uint32_t handler_id)
 {
     static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 5);
@@ -2427,6 +2426,6 @@ report_loss(struct dpif *dpif_, struct dpif_channel *ch, uint32_t ch_idx,
     }
 
     VLOG_WARN("%s: lost packet on port channel %u of handler %u",
-              dpif_name(dpif_), ch_idx, handler_id);
+              dpif_name(&dpif->dpif), ch_idx, handler_id);
     ds_destroy(&s);
 }
-- 
1.7.9.5




More information about the dev mailing list