[dpdk-stable] [PATCH v16.11 LTS] vhost: protect active rings from async ring changes

Maxime Coquelin maxime.coquelin at redhat.com
Mon Mar 5 13:32:59 CET 2018



On 03/02/2018 06:28 PM, Luca Boccassi wrote:
> On Fri, 2018-03-02 at 18:10 +0100, Maxime Coquelin wrote:
>> From: Victor Kaplansky <victork at redhat.com>
>>
>> [ backported from upstream commit
>> a3688046995f88c518fa27c45b39ae389260b18d ]
>>
>> When performing live migration or memory hot-plugging,
>> the changes to the device and vrings made by message handler
>> done independently from vring usage by PMD threads.
>>
>> This causes for example segfaults during live-migration
>> with MQ enable, but in general virtually any request
>> sent by qemu changing the state of device can cause
>> problems.
>>
>> These patches fixes all above issues by adding a spinlock
>> to every vring and requiring message handler to start operation
>> only after ensuring that all PMD threads related to the device
>> are out of critical section accessing the vring data.
>>
>> Each vring has its own lock in order to not create contention
>> between PMD threads of different vrings and to prevent
>> performance degradation by scaling queue pair number.
>>
>> See https://bugzilla.redhat.com/show_bug.cgi?id=1450680
>>
>> Cc: stable at dpdk.org
>> Signed-off-by: Victor Kaplansky <victork at redhat.com>
>> Reviewed-by: Maxime Coquelin <maxime.coquelin at redhat.com>
>> Acked-by: Yuanhan Liu <yliu at fridaylinux.org>
>>
>> Backport conflicts:
>> 	lib/librte_vhost/vhost.c
>> 	lib/librte_vhost/vhost.h
>> 	lib/librte_vhost/vhost_user.c
>> 	lib/librte_vhost/virtio_net.c
>>
>> Signed-off-by: Maxime Coquelin <maxime.coquelin at redhat.com>
>> ---
>>
>> Hi Luca, All,
>>
>> This is the v16.11 backport for Victor's patch already available in
>> master and v17.11 LTS. It needed some rework to be applied to v16.11.
> 
> Thank you, applied and pushed to dpdk-stable/16.11.
> 

Thanks Luca,

There is another patch that would be applied on top of it, as Victor's
patch introduce a regression with Virtio-user. I see it is neither in
16.11 nor 17.11 LTS:

commit 9fce5d0b401fc2c13a860bbbfdebcf85080334e1
Author: Maxime Coquelin <maxime.coquelin at redhat.com>
Date:   Mon Feb 12 16:46:12 2018 +0100

     vhost: do not take lock on owner reset

     A deadlock happens when handling VHOST_USER_RESET_OWNER request
     for the same reason the lock is not taken for
     VHOST_USER_GET_VRING_BASE.

     It is safe not to take the lock, as the queues are no more used
     by the application when the virtqueues and the device are reset.

     Fixes: a3688046995f ("vhost: protect active rings from async ring 
changes")
     Cc: stable at dpdk.org

     Signed-off-by: Maxime Coquelin <maxime.coquelin at redhat.com>
     Reviewed-by: Tiwei Bie <tiwei.bie at intel.com>
     Reviewed-by: Jianfeng Tan <jianfeng.tan at intel.com>


Let me know if you want me to post the backport to stable at dpdk.org,
or if you can pick it directly from upstream master.

Cheers,
Maxime


More information about the stable mailing list