[v2,00/13] ethdev: change promiscuous mode functions to return status
mbox series

Message ID 1568030331-16526-1-git-send-email-arybchenko@solarflare.com
Headers show
Series
  • ethdev: change promiscuous mode functions to return status
Related show

Message

Andrew Rybchenko Sept. 9, 2019, 11:58 a.m. UTC
It is the second patch series to get rid of void returning functions
in ethdev in accordance with deprecation notice [1].

It should be applied on top of the first one [2].
It could be applied separately, but few simple conflicts should
be resolved.

Functions which return void are bad since they do not provide explicit
information to the caller if everything is OK or not.
It is especially painful in the case of promiscuous mode since it is
not always supported, there are real cases when it fails to apply and
it affects traffic which is received by the port.

Driver maintainrs are encouraged to review the patch which changes
driver callbacks prototype. Changes are not always trivial when I tried
to provide real status of the operation. I used -EAGAIN when I failed
to choose better error code.

The following two drivers ignore status of internal functions and
definitely could be improved:

net/bnx2x: bnx2x_set_rx_mode() can report failure, but it is used in
other places and should be updated carefully.

net/igbvf: e1000_promisc_set_vf() provides return status, but it is
unclear how handle it properly.

[1] https://patches.dpdk.org/patch/56969/
[2] https://patches.dpdk.org/project/dpdk/list/?series=6279

v2:
 - minor style fix in app/testpmd
 - use fs_err() in net/failsafe in accordance with review from Gaetan
 - fix net/mvpp2 build
 - use eth_err() in ethdev

Andrew Rybchenko (2):
  ethdev: change promiscuous callbacks to return status
  ethdev: do nothing if promiscuous mode is applied again

Ivan Ilchenko (11):
  ethdev: change promiscuous mode controllers to return errors
  net/failsafe: check code of promiscuous mode switch
  net/bonding: check code of promiscuous mode switch
  app/pipeline: check code of promiscuous mode switch
  app/testpmd: check code of promiscuous mode switch
  app/eventdev: check code of promiscuous mode switch
  app/pdump: check code of promiscuous mode switch
  app/test: check code of promiscuous mode switch
  kni: check code of promiscuous mode switch
  test/bonding: check code of promiscuous mode switch
  examples: take promiscuous mode switch result into account

 app/pdump/main.c                              |  8 +-
 app/test-eventdev/test_perf_common.c          |  7 +-
 app/test-eventdev/test_pipeline_common.c      |  7 +-
 app/test-pipeline/init.c                      |  5 +-
 app/test-pmd/cmdline.c                        | 23 +++---
 app/test-pmd/testpmd.c                        | 14 +++-
 app/test-pmd/testpmd.h                        |  1 +
 app/test-pmd/util.c                           | 16 ++++
 app/test/test_event_eth_rx_adapter.c          |  4 +-
 app/test/test_event_eth_tx_adapter.c          |  4 +-
 app/test/test_kni.c                           |  7 +-
 app/test/test_link_bonding.c                  | 55 +++++++++++---
 app/test/test_link_bonding_mode4.c            | 16 +++-
 app/test/test_pmd_perf.c                      |  6 +-
 app/test/virtual_pmd.c                        | 12 ++-
 doc/guides/rel_notes/deprecation.rst          |  1 -
 doc/guides/rel_notes/release_19_11.rst        |  4 +
 doc/guides/sample_app_ug/flow_classify.rst    |  6 +-
 doc/guides/sample_app_ug/flow_filtering.rst   | 15 +++-
 doc/guides/sample_app_ug/rxtx_callbacks.rst   |  5 +-
 doc/guides/sample_app_ug/skeleton.rst         |  6 +-
 drivers/net/af_packet/rte_eth_af_packet.c     | 22 ++++--
 drivers/net/af_xdp/rte_eth_af_xdp.c           | 20 +++--
 drivers/net/atlantic/atl_ethdev.c             | 12 ++-
 drivers/net/avp/avp_ethdev.c                  | 12 ++-
 drivers/net/axgbe/axgbe_ethdev.c              | 12 ++-
 drivers/net/bnx2x/bnx2x_ethdev.c              |  8 +-
 drivers/net/bnxt/bnxt_ethdev.c                | 26 +++++--
 drivers/net/bonding/rte_eth_bond_8023ad.c     | 17 ++++-
 drivers/net/bonding/rte_eth_bond_pmd.c        | 74 +++++++++++++++---
 drivers/net/cxgbe/cxgbe_ethdev.c              | 12 +--
 drivers/net/cxgbe/cxgbe_pfvf.h                |  4 +-
 drivers/net/dpaa/dpaa_ethdev.c                |  8 +-
 drivers/net/dpaa2/dpaa2_ethdev.c              | 12 ++-
 drivers/net/e1000/em_ethdev.c                 | 12 ++-
 drivers/net/e1000/igb_ethdev.c                | 24 ++++--
 drivers/net/enetc/enetc_ethdev.c              |  8 +-
 drivers/net/enic/enic.h                       |  2 +-
 drivers/net/enic/enic_ethdev.c                | 22 ++++--
 drivers/net/enic/enic_main.c                  |  4 +-
 drivers/net/failsafe/failsafe_ether.c         |  8 +-
 drivers/net/failsafe/failsafe_ops.c           | 52 +++++++++++--
 drivers/net/fm10k/fm10k_ethdev.c              | 24 ++++--
 drivers/net/hinic/hinic_pmd_ethdev.c          | 16 +++-
 drivers/net/i40e/i40e_ethdev.c                | 35 ++++++---
 drivers/net/i40e/i40e_ethdev_vf.c             | 20 +++--
 drivers/net/i40e/i40e_vf_representor.c        |  8 +-
 drivers/net/iavf/iavf_ethdev.c                | 20 +++--
 drivers/net/ice/ice_ethdev.c                  | 27 +++++--
 drivers/net/ipn3ke/ipn3ke_ethdev.h            |  4 +-
 drivers/net/ipn3ke/ipn3ke_representor.c       |  8 +-
 drivers/net/ixgbe/ixgbe_ethdev.c              | 50 +++++++++---
 drivers/net/liquidio/lio_ethdev.c             | 30 +++++---
 drivers/net/mlx4/mlx4.h                       |  4 +-
 drivers/net/mlx4/mlx4_ethdev.c                | 24 ++++--
 drivers/net/mlx5/mlx5.h                       |  4 +-
 drivers/net/mlx5/mlx5_rxmode.c                | 40 ++++++++--
 drivers/net/mvneta/mvneta_ethdev.c            | 22 ++++--
 drivers/net/mvpp2/mrvl_ethdev.c               | 28 +++++--
 drivers/net/netvsc/hn_ethdev.c                |  8 +-
 drivers/net/netvsc/hn_var.h                   |  4 +-
 drivers/net/netvsc/hn_vf.c                    | 22 +++++-
 drivers/net/nfb/nfb_rxmode.c                  | 10 ++-
 drivers/net/nfb/nfb_rxmode.h                  |  8 +-
 drivers/net/nfp/nfp_net.c                     | 30 +++++---
 drivers/net/octeontx/octeontx_ethdev.c        | 16 ++--
 drivers/net/octeontx2/otx2_ethdev.h           |  4 +-
 drivers/net/octeontx2/otx2_ethdev_ops.c       |  8 +-
 drivers/net/qede/qede_ethdev.c                | 16 ++--
 drivers/net/sfc/sfc_ethdev.c                  | 14 ++--
 drivers/net/szedata2/rte_eth_szedata2.c       |  6 +-
 drivers/net/tap/rte_eth_tap.c                 | 52 ++++++++++---
 drivers/net/thunderx/nicvf_ethdev.c           |  3 +-
 drivers/net/virtio/virtio_ethdev.c            | 24 ++++--
 drivers/net/vmxnet3/vmxnet3_ethdev.c          | 12 ++-
 examples/bbdev_app/main.c                     |  7 +-
 examples/bond/main.c                          |  8 +-
 examples/distributor/main.c                   |  4 +-
 examples/eventdev_pipeline/main.c             |  4 +-
 examples/exception_path/main.c                |  5 +-
 examples/flow_classify/flow_classify.c        |  4 +-
 examples/flow_filtering/main.c                |  7 +-
 examples/ip_fragmentation/main.c              |  6 +-
 examples/ip_pipeline/link.c                   |  7 +-
 examples/ip_reassembly/main.c                 |  6 +-
 examples/ipsec-secgw/ipsec-secgw.c            |  9 ++-
 examples/kni/main.c                           |  9 ++-
 examples/l2fwd-cat/l2fwd-cat.c                |  4 +-
 examples/l2fwd-crypto/main.c                  |  7 +-
 examples/l2fwd-jobstats/main.c                |  9 ++-
 examples/l2fwd-keepalive/main.c               |  6 +-
 examples/l2fwd/main.c                         |  6 +-
 examples/l3fwd-acl/main.c                     |  9 ++-
 examples/l3fwd-power/main.c                   |  9 ++-
 examples/l3fwd/main.c                         |  9 ++-
 examples/link_status_interrupt/main.c         |  6 +-
 examples/load_balancer/init.c                 |  6 +-
 .../client_server_mp/mp_server/init.c         |  4 +-
 examples/multi_process/symmetric_mp/main.c    |  4 +-
 examples/netmap_compat/bridge/bridge.c        |  6 +-
 examples/packet_ordering/main.c               |  4 +-
 .../performance-thread/l3fwd-thread/main.c    |  9 ++-
 examples/ptpclient/ptpclient.c                |  7 +-
 examples/qos_meter/main.c                     | 12 ++-
 examples/qos_sched/init.c                     |  6 +-
 examples/quota_watermark/qw/init.c            |  6 +-
 examples/rxtx_callbacks/main.c                |  5 +-
 examples/server_node_efd/server/init.c        |  4 +-
 examples/skeleton/basicfwd.c                  |  4 +-
 examples/vhost/main.c                         | 11 ++-
 examples/vm_power_manager/main.c              |  4 +-
 lib/librte_ethdev/rte_ethdev.c                | 76 +++++++++++++++----
 lib/librte_ethdev/rte_ethdev.h                | 14 +++-
 lib/librte_ethdev/rte_ethdev_core.h           |  4 +-
 lib/librte_kni/rte_kni.c                      | 14 +++-
 115 files changed, 1155 insertions(+), 380 deletions(-)

Comments

Ferruh Yigit Sept. 13, 2019, 4:37 p.m. UTC | #1
On 9/9/2019 12:58 PM, Andrew Rybchenko wrote:
> It is the second patch series to get rid of void returning functions
> in ethdev in accordance with deprecation notice [1].
> 
> It should be applied on top of the first one [2].
> It could be applied separately, but few simple conflicts should
> be resolved.
> 
> Functions which return void are bad since they do not provide explicit
> information to the caller if everything is OK or not.
> It is especially painful in the case of promiscuous mode since it is
> not always supported, there are real cases when it fails to apply and
> it affects traffic which is received by the port.
> 
> Driver maintainrs are encouraged to review the patch which changes
> driver callbacks prototype. Changes are not always trivial when I tried
> to provide real status of the operation. I used -EAGAIN when I failed
> to choose better error code.
> 
> The following two drivers ignore status of internal functions and
> definitely could be improved:
> 
> net/bnx2x: bnx2x_set_rx_mode() can report failure, but it is used in
> other places and should be updated carefully.
> 
> net/igbvf: e1000_promisc_set_vf() provides return status, but it is
> unclear how handle it properly.
> 
> [1] https://patches.dpdk.org/patch/56969/
> [2] https://patches.dpdk.org/project/dpdk/list/?series=6279
> 
> v2:
>  - minor style fix in app/testpmd
>  - use fs_err() in net/failsafe in accordance with review from Gaetan
>  - fix net/mvpp2 build
>  - use eth_err() in ethdev
> 
> Andrew Rybchenko (2):
>   ethdev: change promiscuous callbacks to return status
>   ethdev: do nothing if promiscuous mode is applied again
> 
> Ivan Ilchenko (11):
>   ethdev: change promiscuous mode controllers to return errors
>   net/failsafe: check code of promiscuous mode switch
>   net/bonding: check code of promiscuous mode switch
>   app/pipeline: check code of promiscuous mode switch
>   app/testpmd: check code of promiscuous mode switch
>   app/eventdev: check code of promiscuous mode switch
>   app/pdump: check code of promiscuous mode switch
>   app/test: check code of promiscuous mode switch
>   kni: check code of promiscuous mode switch
>   test/bonding: check code of promiscuous mode switch
>   examples: take promiscuous mode switch result into account

I would like to get these API changes as early as possible, way before rc1 so
that there can be time to fix trivial issues, also before other driver patches
to prevent conflicts and new versions in these big patches.

Please help on reviewing your bits in these sets [1] so we can close them early.


[1]
* ethdev: change promiscuous mode functions to return status [This set]
  https://patches.dpdk.org/project/dpdk/list/?series=6334

* ethdev: change allmulticast controls to return status
  https://patches.dpdk.org/project/dpdk/list/?series=6335

* ethdev: change xstats reset function return value to int
  https://patches.dpdk.org/project/dpdk/list/?series=6308

* ethdev: change link status get functions return value to int
  https://patches.dpdk.org/project/dpdk/list/?series=6350

* ethdev: change MAC addr get function return value to int
  https://patches.dpdk.org/project/dpdk/list/?series=6355