[ovs-dev] [PATCH] dpif-netdev: End the quiescent state for flow offloading thread.
Ilya Maximets
i.maximets at samsung.com
Thu Nov 1 14:06:36 UTC 2018
On 01.11.2018 3:30, Flavio Leitner wrote:
> 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.maximets at 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.
Yeah. Bugs like this are really tricky. We had one with quiescent state
while iterating and deleting pmd threads a few years ago. Was fixed by Daniele.
Fortunately, current one was found by inspection.
>
> Acked-by: Flavio Leitner <fbl at sysclose.org>
>
> fbl
>
>
>
More information about the dev
mailing list