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