Commit bb6f9a70 authored by Jarno Rajahalme's avatar Jarno Rajahalme Committed by Pravin B Shelar

openvswitch: Clarify locking.

Remove unnecessary locking from functions that are always called with
appropriate locking.
Signed-off-by: default avatarJarno Rajahalme <jrajahalme@nicira.com>
Signed-off-by: default avatarThomas Graf <tgraf@redhat.com>
Signed-off-by: default avatarPravin B Shelar <pshelar@nicira.com>
parent be52c9e9
...@@ -173,6 +173,7 @@ static struct hlist_head *vport_hash_bucket(const struct datapath *dp, ...@@ -173,6 +173,7 @@ static struct hlist_head *vport_hash_bucket(const struct datapath *dp,
return &dp->ports[port_no & (DP_VPORT_HASH_BUCKETS - 1)]; return &dp->ports[port_no & (DP_VPORT_HASH_BUCKETS - 1)];
} }
/* Called with ovs_mutex or RCU read lock. */
struct vport *ovs_lookup_vport(const struct datapath *dp, u16 port_no) struct vport *ovs_lookup_vport(const struct datapath *dp, u16 port_no)
{ {
struct vport *vport; struct vport *vport;
...@@ -652,7 +653,7 @@ static size_t ovs_flow_cmd_msg_size(const struct sw_flow_actions *acts) ...@@ -652,7 +653,7 @@ static size_t ovs_flow_cmd_msg_size(const struct sw_flow_actions *acts)
+ nla_total_size(acts->actions_len); /* OVS_FLOW_ATTR_ACTIONS */ + nla_total_size(acts->actions_len); /* OVS_FLOW_ATTR_ACTIONS */
} }
/* Called with ovs_mutex. */ /* Called with ovs_mutex or RCU read lock. */
static int ovs_flow_cmd_fill_info(struct sw_flow *flow, struct datapath *dp, static int ovs_flow_cmd_fill_info(struct sw_flow *flow, struct datapath *dp,
struct sk_buff *skb, u32 portid, struct sk_buff *skb, u32 portid,
u32 seq, u32 flags, u8 cmd) u32 seq, u32 flags, u8 cmd)
...@@ -743,6 +744,7 @@ static int ovs_flow_cmd_fill_info(struct sw_flow *flow, struct datapath *dp, ...@@ -743,6 +744,7 @@ static int ovs_flow_cmd_fill_info(struct sw_flow *flow, struct datapath *dp,
return err; return err;
} }
/* Must be called with ovs_mutex. */
static struct sk_buff *ovs_flow_cmd_alloc_info(struct sw_flow *flow, static struct sk_buff *ovs_flow_cmd_alloc_info(struct sw_flow *flow,
struct genl_info *info) struct genl_info *info)
{ {
...@@ -753,6 +755,7 @@ static struct sk_buff *ovs_flow_cmd_alloc_info(struct sw_flow *flow, ...@@ -753,6 +755,7 @@ static struct sk_buff *ovs_flow_cmd_alloc_info(struct sw_flow *flow,
return genlmsg_new_unicast(len, info, GFP_KERNEL); return genlmsg_new_unicast(len, info, GFP_KERNEL);
} }
/* Must be called with ovs_mutex. */
static struct sk_buff *ovs_flow_cmd_build_info(struct sw_flow *flow, static struct sk_buff *ovs_flow_cmd_build_info(struct sw_flow *flow,
struct datapath *dp, struct datapath *dp,
struct genl_info *info, struct genl_info *info,
...@@ -1094,6 +1097,7 @@ static size_t ovs_dp_cmd_msg_size(void) ...@@ -1094,6 +1097,7 @@ static size_t ovs_dp_cmd_msg_size(void)
return msgsize; return msgsize;
} }
/* Called with ovs_mutex or RCU read lock. */
static int ovs_dp_cmd_fill_info(struct datapath *dp, struct sk_buff *skb, static int ovs_dp_cmd_fill_info(struct datapath *dp, struct sk_buff *skb,
u32 portid, u32 seq, u32 flags, u8 cmd) u32 portid, u32 seq, u32 flags, u8 cmd)
{ {
...@@ -1109,9 +1113,7 @@ static int ovs_dp_cmd_fill_info(struct datapath *dp, struct sk_buff *skb, ...@@ -1109,9 +1113,7 @@ static int ovs_dp_cmd_fill_info(struct datapath *dp, struct sk_buff *skb,
ovs_header->dp_ifindex = get_dpifindex(dp); ovs_header->dp_ifindex = get_dpifindex(dp);
rcu_read_lock();
err = nla_put_string(skb, OVS_DP_ATTR_NAME, ovs_dp_name(dp)); err = nla_put_string(skb, OVS_DP_ATTR_NAME, ovs_dp_name(dp));
rcu_read_unlock();
if (err) if (err)
goto nla_put_failure; goto nla_put_failure;
...@@ -1136,6 +1138,7 @@ static int ovs_dp_cmd_fill_info(struct datapath *dp, struct sk_buff *skb, ...@@ -1136,6 +1138,7 @@ static int ovs_dp_cmd_fill_info(struct datapath *dp, struct sk_buff *skb,
return -EMSGSIZE; return -EMSGSIZE;
} }
/* Must be called with ovs_mutex. */
static struct sk_buff *ovs_dp_cmd_build_info(struct datapath *dp, static struct sk_buff *ovs_dp_cmd_build_info(struct datapath *dp,
struct genl_info *info, u8 cmd) struct genl_info *info, u8 cmd)
{ {
...@@ -1154,7 +1157,7 @@ static struct sk_buff *ovs_dp_cmd_build_info(struct datapath *dp, ...@@ -1154,7 +1157,7 @@ static struct sk_buff *ovs_dp_cmd_build_info(struct datapath *dp,
return skb; return skb;
} }
/* Called with ovs_mutex. */ /* Called with rcu_read_lock or ovs_mutex. */
static struct datapath *lookup_datapath(struct net *net, static struct datapath *lookup_datapath(struct net *net,
struct ovs_header *ovs_header, struct ovs_header *ovs_header,
struct nlattr *a[OVS_DP_ATTR_MAX + 1]) struct nlattr *a[OVS_DP_ATTR_MAX + 1])
...@@ -1166,10 +1169,8 @@ static struct datapath *lookup_datapath(struct net *net, ...@@ -1166,10 +1169,8 @@ static struct datapath *lookup_datapath(struct net *net,
else { else {
struct vport *vport; struct vport *vport;
rcu_read_lock();
vport = ovs_vport_locate(net, nla_data(a[OVS_DP_ATTR_NAME])); vport = ovs_vport_locate(net, nla_data(a[OVS_DP_ATTR_NAME]));
dp = vport && vport->port_no == OVSP_LOCAL ? vport->dp : NULL; dp = vport && vport->port_no == OVSP_LOCAL ? vport->dp : NULL;
rcu_read_unlock();
} }
return dp ? dp : ERR_PTR(-ENODEV); return dp ? dp : ERR_PTR(-ENODEV);
} }
......
...@@ -122,6 +122,7 @@ void ovs_flow_stats_update(struct sw_flow *flow, struct sk_buff *skb) ...@@ -122,6 +122,7 @@ void ovs_flow_stats_update(struct sw_flow *flow, struct sk_buff *skb)
spin_unlock(&stats->lock); spin_unlock(&stats->lock);
} }
/* Called with ovs_mutex. */
void ovs_flow_stats_get(struct sw_flow *flow, struct ovs_flow_stats *ovs_stats, void ovs_flow_stats_get(struct sw_flow *flow, struct ovs_flow_stats *ovs_stats,
unsigned long *used, __be16 *tcp_flags) unsigned long *used, __be16 *tcp_flags)
{ {
...@@ -132,7 +133,7 @@ void ovs_flow_stats_get(struct sw_flow *flow, struct ovs_flow_stats *ovs_stats, ...@@ -132,7 +133,7 @@ void ovs_flow_stats_get(struct sw_flow *flow, struct ovs_flow_stats *ovs_stats,
memset(ovs_stats, 0, sizeof(*ovs_stats)); memset(ovs_stats, 0, sizeof(*ovs_stats));
for_each_node(node) { for_each_node(node) {
struct flow_stats *stats = rcu_dereference(flow->stats[node]); struct flow_stats *stats = ovsl_dereference(flow->stats[node]);
if (stats) { if (stats) {
/* Local CPU may write on non-local stats, so we must /* Local CPU may write on non-local stats, so we must
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment