[v2] net/virtio: fix crash when device reconnecting
Checks
Commit Message
When doing virtio device initialization, virtqueues will be reset in
server mode if ring type is packed. It will cause issue because queues
have been freed in the beginning of device initialization.
Fix this issue by checking whether device has been initialized before
reset. If device hasn't been initialized, there's no need to reset
queues.
Fixes: 6ebbf4109f35 ("net/virtio-user: fix packed ring server mode")
Signed-off-by: Marvin Liu <yong.liu@intel.com>
Comments
On 5/6/20 5:07 PM, Marvin Liu wrote:
> When doing virtio device initialization, virtqueues will be reset in
> server mode if ring type is packed. It will cause issue because queues
> have been freed in the beginning of device initialization.
>
> Fix this issue by checking whether device has been initialized before
> reset. If device hasn't been initialized, there's no need to reset
> queues.
>
> Fixes: 6ebbf4109f35 ("net/virtio-user: fix packed ring server mode")
>
> Signed-off-by: Marvin Liu <yong.liu@intel.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Thanks,
Maxime
On 5/6/20 5:07 PM, Marvin Liu wrote:
> When doing virtio device initialization, virtqueues will be reset in
> server mode if ring type is packed. It will cause issue because queues
> have been freed in the beginning of device initialization.
>
> Fix this issue by checking whether device has been initialized before
> reset. If device hasn't been initialized, there's no need to reset
> queues.
>
> Fixes: 6ebbf4109f35 ("net/virtio-user: fix packed ring server mode")
>
> Signed-off-by: Marvin Liu <yong.liu@intel.com>
Applied to dpdk-next-virtio/master
Thanks,
Maxime
Tested-by: Wang, Yinan <yinan.wang@intel.com>
> -----Original Message-----
> From: dev <dev-bounces@dpdk.org> On Behalf Of Maxime Coquelin
> Sent: 2020年5月7日 22:18
> To: Liu, Yong <yong.liu@intel.com>; Ye, Xiaolong <xiaolong.ye@intel.com>;
> Wang, Zhihong <zhihong.wang@intel.com>
> Cc: dev@dpdk.org
> Subject: Re: [dpdk-dev] [PATCH v2] net/virtio: fix crash when device
> reconnecting
>
>
>
> On 5/6/20 5:07 PM, Marvin Liu wrote:
> > When doing virtio device initialization, virtqueues will be reset in
> > server mode if ring type is packed. It will cause issue because queues
> > have been freed in the beginning of device initialization.
> >
> > Fix this issue by checking whether device has been initialized before
> > reset. If device hasn't been initialized, there's no need to reset
> > queues.
> >
> > Fixes: 6ebbf4109f35 ("net/virtio-user: fix packed ring server mode")
> >
> > Signed-off-by: Marvin Liu <yong.liu@intel.com>
>
> Applied to dpdk-next-virtio/master
>
> Thanks,
> Maxime
@@ -89,7 +89,8 @@ virtio_user_server_reconnect(struct virtio_user_dev *dev)
dev->features &= dev->device_features;
/* For packed ring, resetting queues is required in reconnection. */
- if (vtpci_packed_queue(hw)) {
+ if (vtpci_packed_queue(hw) &&
+ (vtpci_get_status(hw) & VIRTIO_CONFIG_STATUS_DRIVER_OK)) {
PMD_INIT_LOG(NOTICE, "Packets on the fly will be dropped"
" when packed ring reconnecting.");
virtio_user_reset_queues_packed(eth_dev);