From: Yuanhan Liu <yliu@fridaylinux.org>
To: Junjie Chen <junjie.j.chen@intel.com>
Cc: Jens Freimann <jfreimann@redhat.com>,
Jianfeng Tan <jianfeng.tan@intel.com>,
Maxime Coquelin <maxime.coquelin@redhat.com>,
dpdk stable <stable@dpdk.org>
Subject: [dpdk-stable] patch 'net/vhost: fix invalid state' has been queued to LTS release 17.11.2
Date: Sun, 22 Apr 2018 23:09:48 +0800 [thread overview]
Message-ID: <20180422150949.17523-58-yliu@fridaylinux.org> (raw)
In-Reply-To: <20180422150949.17523-1-yliu@fridaylinux.org>
Hi,
FYI, your patch has been queued to LTS release 17.11.2
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 04/29/18. So please
shout if anyone has objections.
Thanks.
--yliu
---
>From a8d0841a426b59b29218bf5498eab7aaab19361a Mon Sep 17 00:00:00 2001
From: Junjie Chen <junjie.j.chen@intel.com>
Date: Wed, 11 Apr 2018 13:02:32 -0400
Subject: [PATCH] net/vhost: fix invalid state
[ upstream commit e6722dee533cda3756fbc5c9ea4ddfbf30276f1b ]
dev_start sets *dev_attached* after setup queues, this sets device to
invalid state since no frontend is attached. Also destroy_device set
*started* to zero which makes *allow_queuing* always zero until dev_start
get called again. Actually, we should not determine queues existence by
*dev_attached* but by queues pointers or other separated variable(s).
Fixes: 30a701a53737 ("net/vhost: fix crash when creating vdev dynamically")
Signed-off-by: Junjie Chen <junjie.j.chen@intel.com>
Tested-by: Jens Freimann <jfreimann@redhat.com>
Reviewed-by: Jianfeng Tan <jianfeng.tan@intel.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
---
drivers/net/vhost/rte_eth_vhost.c | 59 +++++++++++++++++++--------------------
1 file changed, 29 insertions(+), 30 deletions(-)
diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c
index 2299ce877..caf9fce0a 100644
--- a/drivers/net/vhost/rte_eth_vhost.c
+++ b/drivers/net/vhost/rte_eth_vhost.c
@@ -528,10 +528,11 @@ update_queuing_status(struct rte_eth_dev *dev)
unsigned int i;
int allow_queuing = 1;
- if (rte_atomic32_read(&internal->dev_attached) == 0)
+ if (!dev->data->rx_queues || !dev->data->tx_queues)
return;
- if (rte_atomic32_read(&internal->started) == 0)
+ if (rte_atomic32_read(&internal->started) == 0 ||
+ rte_atomic32_read(&internal->dev_attached) == 0)
allow_queuing = 0;
/* Wait until rx/tx_pkt_burst stops accessing vhost device */
@@ -607,13 +608,10 @@ new_device(int vid)
#endif
internal->vid = vid;
- if (eth_dev->data->rx_queues && eth_dev->data->tx_queues) {
+ if (rte_atomic32_read(&internal->started) == 1)
queue_setup(eth_dev, internal);
- rte_atomic32_set(&internal->dev_attached, 1);
- } else {
- RTE_LOG(INFO, PMD, "RX/TX queues have not setup yet\n");
- rte_atomic32_set(&internal->dev_attached, 0);
- }
+ else
+ RTE_LOG(INFO, PMD, "RX/TX queues not exist yet\n");
for (i = 0; i < rte_vhost_get_vring_num(vid); i++)
rte_vhost_enable_guest_notification(vid, i, 0);
@@ -622,6 +620,7 @@ new_device(int vid)
eth_dev->data->dev_link.link_status = ETH_LINK_UP;
+ rte_atomic32_set(&internal->dev_attached, 1);
update_queuing_status(eth_dev);
RTE_LOG(INFO, PMD, "New connection established\n");
@@ -652,23 +651,24 @@ destroy_device(int vid)
eth_dev = list->eth_dev;
internal = eth_dev->data->dev_private;
- rte_atomic32_set(&internal->started, 0);
- update_queuing_status(eth_dev);
rte_atomic32_set(&internal->dev_attached, 0);
+ update_queuing_status(eth_dev);
eth_dev->data->dev_link.link_status = ETH_LINK_DOWN;
- for (i = 0; i < eth_dev->data->nb_rx_queues; i++) {
- vq = eth_dev->data->rx_queues[i];
- if (vq == NULL)
- continue;
- vq->vid = -1;
- }
- for (i = 0; i < eth_dev->data->nb_tx_queues; i++) {
- vq = eth_dev->data->tx_queues[i];
- if (vq == NULL)
- continue;
- vq->vid = -1;
+ if (eth_dev->data->rx_queues && eth_dev->data->tx_queues) {
+ for (i = 0; i < eth_dev->data->nb_rx_queues; i++) {
+ vq = eth_dev->data->rx_queues[i];
+ if (!vq)
+ continue;
+ vq->vid = -1;
+ }
+ for (i = 0; i < eth_dev->data->nb_tx_queues; i++) {
+ vq = eth_dev->data->tx_queues[i];
+ if (!vq)
+ continue;
+ vq->vid = -1;
+ }
}
state = vring_states[eth_dev->data->port_id];
@@ -795,11 +795,7 @@ eth_dev_start(struct rte_eth_dev *eth_dev)
{
struct pmd_internal *internal = eth_dev->data->dev_private;
- if (unlikely(rte_atomic32_read(&internal->dev_attached) == 0)) {
- queue_setup(eth_dev, internal);
- rte_atomic32_set(&internal->dev_attached, 1);
- }
-
+ queue_setup(eth_dev, internal);
rte_atomic32_set(&internal->started, 1);
update_queuing_status(eth_dev);
@@ -839,10 +835,13 @@ eth_dev_close(struct rte_eth_dev *dev)
pthread_mutex_unlock(&internal_list_lock);
rte_free(list);
- for (i = 0; i < dev->data->nb_rx_queues; i++)
- rte_free(dev->data->rx_queues[i]);
- for (i = 0; i < dev->data->nb_tx_queues; i++)
- rte_free(dev->data->tx_queues[i]);
+ if (dev->data->rx_queues)
+ for (i = 0; i < dev->data->nb_rx_queues; i++)
+ rte_free(dev->data->rx_queues[i]);
+
+ if (dev->data->tx_queues)
+ for (i = 0; i < dev->data->nb_tx_queues; i++)
+ rte_free(dev->data->tx_queues[i]);
rte_free(dev->data->mac_addrs);
free(internal->dev_name);
--
2.11.0
next prev parent reply other threads:[~2018-04-22 15:12 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-22 15:08 [dpdk-stable] patch 'eal/ppc: remove braces in SMP memory barrier macro' " Yuanhan Liu
2018-04-22 15:08 ` [dpdk-stable] patch 'pci: remove duplicated symbol from map file' " Yuanhan Liu
2018-04-22 15:08 ` [dpdk-stable] patch 'kni: fix build on RHEL 7.5' " Yuanhan Liu
2018-04-22 15:08 ` [dpdk-stable] patch 'bus/vdev: fix finding device by name' " Yuanhan Liu
2018-04-22 15:08 ` [dpdk-stable] patch 'app/procinfo: fix strncpy usage in args parsing' " Yuanhan Liu
2018-04-22 15:08 ` [dpdk-stable] patch 'examples/exception_path: limit core count to 64' " Yuanhan Liu
2018-04-22 15:08 ` [dpdk-stable] patch 'net/mlx5: fix flow creation with a single target queue' " Yuanhan Liu
2018-04-22 15:08 ` [dpdk-stable] patch 'vhost: fix message payload union in setting ring address' " Yuanhan Liu
2018-04-22 15:08 ` [dpdk-stable] patch 'vhost: fix offset while mmaping log base " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'vhost: check cmsg not null' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'vhost: fix device cleanup at stop' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'vhost: fix realloc failure' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'vhost: fix ring index returned to master on stop' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/sfc: add missing defines for SAL annotation' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/bonding: fix primary slave port id storage type' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/octeontx: fix null pointer dereference' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/octeontx: fix uninitialized variable in port open' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/nfp: fix assigning port id in mbuf' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/nfp: fix barrier location' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/nfp: fix link speed capabilities' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'doc: fix NFP NIC guide grammar' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/qede: fix alloc from socket 0' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/enic: allocate stats DMA buffer upfront during probe' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/i40e: fix link update no wait' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/vmxnet3: set the queue shared buffer at start' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/mrvl: fix crash when port is closed without starting' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/mrvl: fix Rx descriptors number' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/mlx5: fix existing file removal' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/bnxt: fix LRO disable' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/sfc: fix mbuf data alignment calculation' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'ethdev: fix queue start' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/sfc: fix type of opaque pointer in perf profile handler' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/i40e: fix intr callback unregister by adding retry' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/ixgbe: " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'ethdev: fix port accessing after release' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'vhost: avoid concurrency when logging dirty pages' " Yuanhan Liu
2018-04-23 9:03 ` Maxime Coquelin
2018-05-06 3:51 ` Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/vhost: fix crash when creating vdev dynamically' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'bus/fslmc: fix find device start condition' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'hash: fix missing spinlock unlock in add key' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'app/crypto-perf: fix IOVA translation' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'mem: do not use physical addresses in IOVA as VA mode' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'vfio: do not needlessly check for IOVA " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/dpaa: fix oob access' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'bus/dpaa: fix resource leak' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/dpaa2: fix xstats' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'ip_frag: fix double free of chained mbufs' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/octeontx: fix uninitialized speed variable' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/bonding: fix setting VLAN ID on slave ports' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/bonding: clear started state if start fails' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/szedata2: fix total stats' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/szedata2: fix format string for PCI address' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/enic: fix crash on MTU update with non-setup queues' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/ixgbe: fix busy wait during checking link status' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'doc: add timestamp offload to mlx5 features' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/bnxt: fix Rx drop setting' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/sfc/base: fix comparison always true warning' " Yuanhan Liu
2018-04-22 15:09 ` [dpdk-stable] patch 'net/i40e: fix DDP profile DEL operation' " Yuanhan Liu
2018-04-22 15:09 ` Yuanhan Liu [this message]
2018-04-22 15:09 ` [dpdk-stable] patch 'net/bonding: free mempool used in mode 6' " Yuanhan Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180422150949.17523-58-yliu@fridaylinux.org \
--to=yliu@fridaylinux.org \
--cc=jfreimann@redhat.com \
--cc=jianfeng.tan@intel.com \
--cc=junjie.j.chen@intel.com \
--cc=maxime.coquelin@redhat.com \
--cc=stable@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).