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 <[email protected]>
> ---
> 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 <[email protected]>
fbl
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev