On Mon, Mar 31, 2014 at 11:18 AM, Jarno Rajahalme <jrajaha...@nicira.com> wrote: > Reduce and clarify locking requirements for ovs_flow_cmd_alloc_info(), > ovs_flow_cmd_fill_info() and ovs_flow_cmd_build_info(). > > A datapath pointer is available only when holding a lock. Change > ovs_flow_cmd_fill_info() and ovs_flow_cmd_build_info() to take a > dp_ifindex directly, rather than a datapath pointer that is then > (only) used to get the dp_ifindex. This is useful, since the > dp_ifindex is available even when the datapath pointer is not, both > before and after taking a lock, which makes further critical section > reduction possible. > > Make ovs_flow_cmd_alloc_info() take an 'acts' argument instead a > 'flow' pointer. This allows some future patches to do the allocation > before acquiring the flow pointer. > > The locking requirements after this patch are: > > ovs_flow_cmd_alloc_info(): May be called without locking, must not be > called while holding the RCU read lock (due to memory allocation). > If 'acts' belong to a flow in the flow table, however, then the > caller must hold ovs_mutex. > > ovs_flow_cmd_fill_info(): Either ovs_mutex or RCU read lock must be held. > > ovs_flow_cmd_build_info(): This calls both of the above, so the caller > must hold ovs_mutex. > > Signed-off-by: Jarno Rajahalme <jrajaha...@nicira.com>
LGTM Acked-by: Pravin B Shelar <pshe...@nicira.com> _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev