[dpdk-dev] [PATCH v3 4/4] net/vhost: add NULL pointer checking
Maxime Coquelin
maxime.coquelin at redhat.com
Thu Mar 29 15:19:43 CEST 2018
Hi,
On 03/21/2018 04:03 AM, zhiyong.yang at intel.com wrote:
> When vhost user PMD works in client mode to connect/reconnect virtio-user
> with server mode, new thread sometimes may run to new_device before
> queue_setup has been done, So have to wait until memory allocation is
> done.
>
> Release note is updated in the patch.
>
> Signed-off-by: Zhiyong Yang <zhiyong.yang at intel.com>
> ---
> doc/guides/rel_notes/release_18_05.rst | 7 +++++++
> drivers/net/vhost/rte_eth_vhost.c | 9 +++++++++
> 2 files changed, 16 insertions(+)
>
> diff --git a/doc/guides/rel_notes/release_18_05.rst b/doc/guides/rel_notes/release_18_05.rst
> index 3923dc253..7b301f021 100644
> --- a/doc/guides/rel_notes/release_18_05.rst
> +++ b/doc/guides/rel_notes/release_18_05.rst
> @@ -41,6 +41,13 @@ New Features
> Also, make sure to start the actual text at the margin.
> =========================================================
>
> +* **Added support for virtio-user server mode.**
> +
> + In a container environment if the vhost-user backend restarts, there's no way
> + for it to reconnect to virtio-user. To address this, support for server mode
> + is added. In this mode the socket file is created by virtio-user, which the
> + backend then connects to. This means that if the backend restarts, it can
> + reconnect to virtio-user and continue communications.
I think this shouldn't be part of this patch.
>
> API Changes
> -----------
> diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c
> index 3aae01c39..2490bad0b 100644
> --- a/drivers/net/vhost/rte_eth_vhost.c
> +++ b/drivers/net/vhost/rte_eth_vhost.c
> @@ -580,6 +580,15 @@ new_device(int vid)
> eth_dev->data->numa_node = newnode;
> #endif
>
> + /* The thread may run here before eth_dev->data->rx_queues or
> + * eth_dev->data->tx_queues have gotten valid memory, so have to
> + * wait until memory allocation is done.
> + */
> + while (!eth_dev->data->rx_queues ||
> + !eth_dev->data->tx_queues) {
> + usleep(1);
> + }
> +
> for (i = 0; i < eth_dev->data->nb_rx_queues; i++) {
> vq = eth_dev->data->rx_queues[i];
> if (vq == NULL)
>
I don't like the idea of polling here.
It looks like Junjie is addressing the problem in a different way [0],
do you confirm it would work in your case?
Thanks,
Maxime
[0]: http://dpdk.org/dev/patchwork/patch/36643/
More information about the dev
mailing list