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

Reply via email to