[1/3] vhost: do not realloc device and queues during running
Checks
Commit Message
When the device has been started, don't do the reallocation anymore.
Otherwise the pointers used in application threads can be invalidated
without proper protection. Instead of introducing a global lock to
protect the change of device pointers which will hurt the performance,
let's just do the reallocation during setup.
Fixes: af295ad4698c ("vhost: realloc device and queues to same numa node as vring desc")
Cc: stable@dpdk.org
Reported-by: Yinan Wang <yinan.wang@intel.com>
Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
---
lib/librte_vhost/vhost_user.c | 3 +++
1 file changed, 3 insertions(+)
Comments
On 8/19/19 1:34 PM, Tiwei Bie wrote:
> When the device has been started, don't do the reallocation anymore.
> Otherwise the pointers used in application threads can be invalidated
> without proper protection. Instead of introducing a global lock to
> protect the change of device pointers which will hurt the performance,
> let's just do the reallocation during setup.
>
> Fixes: af295ad4698c ("vhost: realloc device and queues to same numa node as vring desc")
> Cc: stable@dpdk.org
>
> Reported-by: Yinan Wang <yinan.wang@intel.com>
> Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
> ---
> lib/librte_vhost/vhost_user.c | 3 +++
> 1 file changed, 3 insertions(+)
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Thanks,
Maxime
@@ -410,6 +410,9 @@ numa_realloc(struct virtio_net *dev, int index)
struct batch_copy_elem *new_batch_copy_elems;
int ret;
+ if (dev->flags & VIRTIO_DEV_RUNNING)
+ return dev;
+
old_dev = dev;
vq = old_vq = dev->virtqueue[index];