On Wed, Oct 31, 2018 at 06:44:09PM +0300, Ilya Maximets wrote:
> Flow offloading thread uses concurrent hash maps which are
> based on rcu protected variables. It must use them while in
> active state. Working in a quiescent state could cause
> segmentation faults because of possible cmap internal
> structure changes.
> 
> Fixes: 02bb2824e51d ("dpif-netdev: do hw flow offload in a thread")
> Signed-off-by: Ilya Maximets <i.maxim...@samsung.com>
> ---
>  lib/dpif-netdev.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
> index 5839f2375..8136b0389 100644
> --- a/lib/dpif-netdev.c
> +++ b/lib/dpif-netdev.c
> @@ -2396,6 +2396,7 @@ dp_netdev_flow_offload_main(void *data OVS_UNUSED)
>              ovsrcu_quiesce_start();
>              ovs_mutex_cond_wait(&dp_flow_offload.cond,
>                                  &dp_flow_offload.mutex);
> +            ovsrcu_quiesce_end();
>          }
>          list = ovs_list_pop_front(&dp_flow_offload.list);
>          offload = CONTAINER_OF(list, struct dp_flow_offload_item, node);

Indeed, this is very similar to system_stats_thread_func().
Must have been an interesting journey to find the root cause if not by
code inspection.

Acked-by: Flavio Leitner <f...@sysclose.org>

fbl

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to