Acked-by: Daniele Di Proietto <diproiet...@vmware.com>

2016-10-13 2:58 GMT-07:00 Bhanuprakash Bodireddy <
bhanuprakash.bodire...@intel.com>:

> Add comments in dp_netdev_input__() to explain the reason behind
> clearing the flow batches before packet_batch_execute().
>
> Signed-off-by: Bhanuprakash Bodireddy <bhanuprakash.bodire...@intel.com>
> Co-authored-by: Antonio Fischetti <antonio.fische...@intel.com>
> ---
>  lib/dpif-netdev.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
>
> diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
> index 3b3556a..84aa570 100644
> --- a/lib/dpif-netdev.c
> +++ b/lib/dpif-netdev.c
> @@ -4182,6 +4182,15 @@ dp_netdev_input__(struct dp_netdev_pmd_thread *pmd,
>          fast_path_processing(pmd, packets, keys, batches, &n_batches,
> in_port, now);
>      }
>
> +    /* All the flow batches need to be reset before any call to
> +     * packet_batch_per_flow_execute() as it could potentially trigger
> +     * recirculation. When a packet matching flow ‘j’ happens to be
> +     * recirculated, the nested call to dp_netdev_input__() could
> potentially
> +     * classify the packet as matching another flow - say 'k'. It could
> happen
> +     * that in the previous call to dp_netdev_input__() that same flow
> 'k' had
> +     * already its own batches[k] still waiting to be served.  So if its
> +     * ‘batch’ member is not reset, the recirculated packet would be
> wrongly
> +     * appended to batches[k] of the 1st call to dp_netdev_input__(). */
>      for (i = 0; i < n_batches; i++) {
>          batches[i].flow->batch = NULL;
>      }
> --
> 2.4.11
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
>
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to