[dpdk-dev] [PATCH v3 0/6] get status of Rx and Tx descriptors

Olivier Matz olivier.matz at 6wind.com
Wed Mar 29 10:36:27 CEST 2017


This patchset introduces a new ethdev API:
- rte_eth_rx_descriptor_status()
- rte_eth_tx_descriptor_status()

The Rx API is aims to replace rte_eth_rx_descriptor_done() which
does almost the same, but does not differentiate the case of a
descriptor used by the driver (not returned to the hw).

The usage of these functions can be:
- on Rx, anticipate that the cpu is not fast enough to process
  all incoming packets, and take dispositions to solve the
  problem (add more cpus, drop specific packets, ...)
- on Tx, detect that the link is overloaded, and take dispositions
  to solve the problem (notify flow control, drop specific
  packets)

The patchset updates ixgbe, i40e, e1000, mlx5.
The other drivers that implement the descriptor_done() API are
fm10k, sfc, virtio. They are not updated.
If the new API is accepted, the descriptor_done() can be deprecated,
and examples/l3fwd-power will be updated to.

v2->v3:
- add an entry in the release note
- rebase on top of net-next/master

v1->v2:
- replace RTE_ETH_RX_DESC_USED by RTE_ETH_RX_DESC_UNAVAIL: it can be used when
  the descriptor is hold by driver or reserved by the hardware.
- add RTE_ETH_TX_DESC_UNAVAIL (same for Tx)
- change the ethdev callback api to use a queue pointer instead of port_id
  and queue_id
- like rx_burst/tx_burst, do not check the validity of port_id and queue_id
  except in debug mode
- better document the calling context, error status, possible performance
  impact
- add the feature in NIC documentation
- fix overflow of descriptor value in tx functions (ixgbe, igb, em)
- fix tx function to only check descs that have the rs bit (i40e)
- mlx: remove empty line

RFC->v1:
- instead of optimizing an API that returns the number of used
  descriptors like rx_queue_count(), use a more simple API that
  returns the status of a descriptor, like rx_descriptor_done().
- remove ethdev api rework (first 2 patches), they have been
  sent separately


Olivier Matz (6):
  ethdev: add descriptor status API
  net/ixgbe: implement descriptor status API
  net/e1000: implement descriptor status API (igb)
  net/e1000: implement descriptor status API (em)
  net/mlx5: implement descriptor status API
  net/i40e: implement descriptor status API

 doc/guides/nics/features/default.ini      |   2 +
 doc/guides/nics/features/e1000.ini        |   2 +
 doc/guides/nics/features/i40e.ini         |   2 +
 doc/guides/nics/features/i40e_vec.ini     |   2 +
 doc/guides/nics/features/i40e_vf.ini      |   2 +
 doc/guides/nics/features/i40e_vf_vec.ini  |   2 +
 doc/guides/nics/features/igb.ini          |   2 +
 doc/guides/nics/features/igb_vf.ini       |   2 +
 doc/guides/nics/features/ixgbe.ini        |   2 +
 doc/guides/nics/features/ixgbe_vec.ini    |   2 +
 doc/guides/nics/features/ixgbe_vf.ini     |   2 +
 doc/guides/nics/features/ixgbe_vf_vec.ini |   2 +
 doc/guides/nics/features/mlx5.ini         |   2 +
 doc/guides/rel_notes/release_17_02.rst    |   8 ++
 drivers/net/e1000/e1000_ethdev.h          |   6 ++
 drivers/net/e1000/em_ethdev.c             |   2 +
 drivers/net/e1000/em_rxtx.c               |  51 ++++++++++++
 drivers/net/e1000/igb_ethdev.c            |   2 +
 drivers/net/e1000/igb_rxtx.c              |  45 +++++++++++
 drivers/net/i40e/i40e_ethdev.c            |   2 +
 drivers/net/i40e/i40e_ethdev_vf.c         |   2 +
 drivers/net/i40e/i40e_rxtx.c              |  58 ++++++++++++++
 drivers/net/i40e/i40e_rxtx.h              |   2 +
 drivers/net/ixgbe/ixgbe_ethdev.c          |   4 +
 drivers/net/ixgbe/ixgbe_ethdev.h          |   3 +
 drivers/net/ixgbe/ixgbe_rxtx.c            |  57 ++++++++++++++
 drivers/net/mlx5/mlx5.c                   |   2 +
 drivers/net/mlx5/mlx5_rxtx.c              |  76 ++++++++++++++++++
 drivers/net/mlx5/mlx5_rxtx.h              |   2 +
 lib/librte_ether/rte_ethdev.h             | 125 ++++++++++++++++++++++++++++++
 30 files changed, 473 insertions(+)

-- 
2.11.0



More information about the dev mailing list