> -----Original Message----- > From: Zhang, Qi Z > Sent: Wednesday, March 21, 2018 7:28 AM > To: tho...@monjalon.net; Ananyev, Konstantin <konstantin.anan...@intel.com> > Cc: dev@dpdk.org; Xing, Beilei <beilei.x...@intel.com>; Wu, Jingjing > <jingjing...@intel.com>; Lu, Wenzhuo <wenzhuo...@intel.com>; > Zhang, Qi Z <qi.z.zh...@intel.com> > Subject: [PATCH v3 1/3] ether: support runtime queue setup > > The patch let etherdev driver expose the capability flag through > rte_eth_dev_info_get when it support runtime queue configuraiton, > then base on the flag rte_eth_[rx|tx]_queue_setup could decide > continue to setup the queue or just return fail when device already > started. > > Signed-off-by: Qi Zhang <qi.z.zh...@intel.com> > --- > v3: > - not overload deferred start > - rename deferred setup to runtime setup > > v2: > - enhance comment > > doc/guides/nics/features.rst | 8 ++++++++ > lib/librte_ether/rte_ethdev.c | 30 ++++++++++++++++++------------ > lib/librte_ether/rte_ethdev.h | 7 +++++++ > 3 files changed, 33 insertions(+), 12 deletions(-) > > diff --git a/doc/guides/nics/features.rst b/doc/guides/nics/features.rst > index 1b4fb979f..6983faa4e 100644 > --- a/doc/guides/nics/features.rst > +++ b/doc/guides/nics/features.rst > @@ -892,7 +892,15 @@ Documentation describes performance values. > > See ``dpdk.org/doc/perf/*``. > > +.. _nic_features_queue_runtime_setup_capabilities: > > +Queue runtime setup capabilities > +--------------------------------- > + > +Supports queue setup / release after device started. > + > +* **[provides] rte_eth_dev_info**: > ``runtime_queue_config_capa:DEV_RUNTIME_RX_QUEUE_SETUP,DEV_RUNTIME_TX_QUEUE_SETUP``. > +* **[related] API**: ``rte_eth_dev_info_get()``. > > .. _nic_features_other: > > diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c > index 0590f0c10..343b1a6c0 100644 > --- a/lib/librte_ether/rte_ethdev.c > +++ b/lib/librte_ether/rte_ethdev.c > @@ -1425,12 +1425,6 @@ rte_eth_rx_queue_setup(uint16_t port_id, uint16_t > rx_queue_id, > return -EINVAL; > } > > - if (dev->data->dev_started) { > - RTE_PMD_DEBUG_TRACE( > - "port %d must be stopped to allow configuration\n", > port_id); > - return -EBUSY; > - } > - > RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_infos_get, -ENOTSUP); > RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rx_queue_setup, -ENOTSUP); > > @@ -1474,6 +1468,15 @@ rte_eth_rx_queue_setup(uint16_t port_id, uint16_t > rx_queue_id, > return -EINVAL; > } > > + if (dev->data->dev_started && > + !(dev_info.runtime_queue_setup_capa & > + DEV_RUNTIME_RX_QUEUE_SETUP)) > + return -EBUSY; > + > + if (dev->data->rx_queue_state[rx_queue_id] != > + RTE_ETH_QUEUE_STATE_STOPPED) > + return -EBUSY; > + > rxq = dev->data->rx_queues; > if (rxq[rx_queue_id]) { > RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rx_queue_release, > @@ -1573,12 +1576,6 @@ rte_eth_tx_queue_setup(uint16_t port_id, uint16_t > tx_queue_id, > return -EINVAL; > } > > - if (dev->data->dev_started) { > - RTE_PMD_DEBUG_TRACE( > - "port %d must be stopped to allow configuration\n", > port_id); > - return -EBUSY; > - } > - > RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_infos_get, -ENOTSUP); > RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->tx_queue_setup, -ENOTSUP); > > @@ -1596,6 +1593,15 @@ rte_eth_tx_queue_setup(uint16_t port_id, uint16_t > tx_queue_id, > return -EINVAL; > } > > + if (dev->data->dev_started && > + !(dev_info.runtime_queue_setup_capa & > + DEV_RUNTIME_TX_QUEUE_SETUP)) > + return -EBUSY; > + > + if (dev->data->rx_queue_state[tx_queue_id] != > + RTE_ETH_QUEUE_STATE_STOPPED) > + return -EBUSY; > + > txq = dev->data->tx_queues; > if (txq[tx_queue_id]) { > RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->tx_queue_release, > diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h > index 036153306..4e2088458 100644 > --- a/lib/librte_ether/rte_ethdev.h > +++ b/lib/librte_ether/rte_ethdev.h > @@ -981,6 +981,11 @@ struct rte_eth_conf { > */ > #define DEV_TX_OFFLOAD_SECURITY 0x00020000 > > +#define DEV_RUNTIME_RX_QUEUE_SETUP 0x00000001 > +/**< Deferred setup rx queue */ > +#define DEV_RUNTIME_TX_QUEUE_SETUP 0x00000002 > +/**< Deferred setup tx queue */ > + > /* > * If new Tx offload capabilities are defined, they also must be > * mentioned in rte_tx_offload_names in rte_ethdev.c file. > @@ -1029,6 +1034,8 @@ struct rte_eth_dev_info { > /** Configured number of rx/tx queues */ > uint16_t nb_rx_queues; /**< Number of RX queues. */ > uint16_t nb_tx_queues; /**< Number of TX queues. */ > + uint64_t runtime_queue_setup_capa; > + /**< queues can be setup after dev_start (DEV_DEFERRED_). */ > }; > > /** > --
Acked-by: Konstantin Ananyev <konstantin.anan...@intel.com> > 2.13.6