Acked-by: Ethan Jackson <et...@nicira.com>
On Thu, Apr 17, 2014 at 5:41 PM, Alex Wang <al...@nicira.com> wrote: > 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 <al...@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 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev