[ovs-dev] [PATCH v5 8/9] datapath: Minimize ovs_flow_cmd_new|set critical sections.
Jarno Rajahalme
jrajahalme at nicira.com
Sun Mar 30 00:12:47 UTC 2014
On Mar 28, 2014, at 1:26 PM, Pravin Shelar <pshelar at nicira.com> wrote:
> On Tue, Mar 25, 2014 at 2:35 PM, Jarno Rajahalme <jrajahalme at nicira.com> wrote:
>> Signed-off-by: Jarno Rajahalme <jrajahalme at nicira.com>
>> ---
>> v5: Make functionality after ovs_unlock() case specific to make the common
>> case more optimal.
>>
>> datapath/datapath.c | 135 ++++++++++++++++++++++++++++++---------------------
>> 1 file changed, 81 insertions(+), 54 deletions(-)
>>
>> diff --git a/datapath/datapath.c b/datapath/datapath.c
>> index 0de00ad..aa3f789 100644
>> --- a/datapath/datapath.c
>> +++ b/datapath/datapath.c
>> @@ -808,7 +808,7 @@ static int ovs_flow_cmd_new(struct sk_buff *skb, struct genl_info *info)
>> struct nlattr **a = info->attrs;
>> struct ovs_header *ovs_header = info->userhdr;
>> struct sw_flow_key key, masked_key;
>> - struct sw_flow *flow;
>> + struct sw_flow *flow, *new_flow;
>> struct sw_flow_mask mask;
>> struct sk_buff *reply;
>> struct datapath *dp;
>> @@ -842,35 +842,52 @@ static int ovs_flow_cmd_new(struct sk_buff *skb, struct genl_info *info)
>> &masked_key, 0, &acts);
>> if (error) {
>> OVS_NLERR("Flow actions may not be safe on all matching packets.\n");
>> - goto err_kfree;
>> + goto err_kfree_acts;
>> + }
>> +
>> + reply = ovs_flow_cmd_alloc_info(acts, info, false);
>> + if (IS_ERR(reply)) {
>> + error = PTR_ERR(reply);
>> + goto err_kfree_acts;
>> }
>>
>> + /* Most of the time we need to allocate a new flow, do it before
>> + * locking. */
>> + new_flow = ovs_flow_alloc();
>> + if (IS_ERR(new_flow)) {
>> + error = PTR_ERR(new_flow);
>> + goto err_kfree_reply;
>> + }
>> + new_flow->key = masked_key;
>> + new_flow->unmasked_key = key;
>> +
> If flow alloc is done at start, we can directly use flow->key and
> flow->unmasked_key rather than using local key and unmasked_key.
>
Right, will happen in the next version.
Jarno
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openvswitch.org/pipermail/ovs-dev/attachments/20140329/182e3c6b/attachment-0005.html>
More information about the dev
mailing list