mbox series

[v3,00/29] cleanup ethdev close operation

Message ID 20200928231437.414489-1-thomas@monjalon.net (mailing list archive)
Headers
Series cleanup ethdev close operation |

Message

Thomas Monjalon Sept. 28, 2020, 11:14 p.m. UTC
  This is the end of a process started two years ago,
to have a close which reliably releases an ethdev port
without the need of removing the device (which can have more ports).

Unfortunately, some drivers might be broken because did not follow
the migration recommendations. We cannot wait more,
this should be merged before the 20.11-rc1 release.


v3:
  - integrate NXP patches for dpaa, dpaa2, enetc and pfe
  - fix crash in rte_eth_dev_release_port() because of early memset 0

v2 (big thanks to Ferruh for the reviews):
  - rebase on top of cxgbe updates
  - integrate updated patches for tap, bnx2x, qede
  - return 0 in atlantic PMD
  - fix failsafe mutex free
  - remove useless check in pcap
  - fix testpmd port state transition
  - add primary process check
  - reset more pointers in rte_eth_dev_release_port()
  - remove dev_started reset in rte_eth_dev_close()
  - return int from rte_eth_dev_close()

Note for future: fix old memory leak when releasing port,
i.e. free callbacks link_intr_cbs, post_rx_burst_cbs, pre_tx_burst_cbs.

The last 3 patches are optional changes to ethdev close/release
which were requested by Ferruh but may take longer to be accepted:
  - memset 0
  - keep start state
  - int return


Rasesh Mody (2):
  net/bnx2x: release port upon close
  net/qede: release port upon close

Sachin Saxena (4):
  net/dpaa: release port upon close
  net/dpaa2: release port upon close
  net/enetc: release port upon close
  net/pfe: release port upon close

Thomas Monjalon (22):
  ethdev: reset device and interrupt pointers on release
  ethdev: allow drivers to return error on close
  net/af_packet: release port upon close
  net/atlantic: release port upon close
  net/axgbe: release port upon close
  net/bonding: release port upon close
  net/failsafe: release port upon close
  net/mlx4: release port upon close
  net/null: release port upon close
  net/octeontx: release port upon close
  net/pcap: release port upon close
  net/ring: release port upon close
  net/softnic: release port upon close
  ethdev: remove old close behaviour
  drivers/net: accept removing device without any port
  drivers/net: check process type in close operation
  drivers/net: remove redundant MAC addresses freeing
  app/testpmd: reset port status on close notification
  app/testpmd: align behaviour of multi-port detach
  ethdev: remove forcing stopped state upon close
  ethdev: reset all when releasing a port
  ethdev: allow close function to return an error

Yunjian Wang (1):
  net/tap: release port upon close

 MAINTAINERS                               |   6 +-
 app/test-pmd/config.c                     |   7 +-
 app/test-pmd/testpmd.c                    |  53 +++------
 app/test/virtual_pmd.c                    |   6 +-
 doc/guides/rel_notes/deprecation.rst      |   7 --
 doc/guides/rel_notes/release_20_11.rst    |   4 +-
 drivers/net/af_packet/rte_eth_af_packet.c |  58 +++++-----
 drivers/net/af_xdp/rte_eth_af_xdp.c       |   9 +-
 drivers/net/ark/ark_ethdev.c              |  17 ++-
 drivers/net/atlantic/atl_ethdev.c         |  62 ++++-------
 drivers/net/avp/avp_ethdev.c              |  10 +-
 drivers/net/axgbe/axgbe_ethdev.c          |  17 +--
 drivers/net/bnx2x/bnx2x_ethdev.c          |  16 ++-
 drivers/net/bnxt/bnxt_ethdev.c            |  16 ++-
 drivers/net/bnxt/bnxt_reps.c              |  11 +-
 drivers/net/bnxt/bnxt_reps.h              |   2 +-
 drivers/net/bonding/eth_bond_private.h    |   2 +-
 drivers/net/bonding/rte_eth_bond_pmd.c    |  33 +++---
 drivers/net/cxgbe/cxgbe_ethdev.c          |  18 ++--
 drivers/net/cxgbe/cxgbe_main.c            |   2 -
 drivers/net/cxgbe/cxgbe_pfvf.h            |   2 +-
 drivers/net/cxgbe/cxgbevf_ethdev.c        |   5 +-
 drivers/net/cxgbe/cxgbevf_main.c          |   2 -
 drivers/net/dpaa/dpaa_ethdev.c            | 124 ++++++++++------------
 drivers/net/dpaa2/dpaa2_ethdev.c          |  96 +++++++----------
 drivers/net/e1000/em_ethdev.c             |  18 ++--
 drivers/net/e1000/igb_ethdev.c            |  36 +++----
 drivers/net/ena/ena_ethdev.c              |  20 ++--
 drivers/net/enetc/enetc_ethdev.c          |  17 +--
 drivers/net/enic/enic_ethdev.c            |   9 +-
 drivers/net/enic/enic_vf_representor.c    |   8 +-
 drivers/net/failsafe/failsafe.c           |  24 +----
 drivers/net/failsafe/failsafe_ether.c     |   6 +-
 drivers/net/failsafe/failsafe_ops.c       |  67 ++++++++----
 drivers/net/failsafe/failsafe_private.h   |   1 +
 drivers/net/fm10k/fm10k_ethdev.c          |  22 +---
 drivers/net/hinic/hinic_pmd_ethdev.c      |  22 ++--
 drivers/net/hns3/hns3_ethdev.c            |  15 +--
 drivers/net/hns3/hns3_ethdev_vf.c         |  16 +--
 drivers/net/i40e/i40e_ethdev.c            |  16 +--
 drivers/net/i40e/i40e_ethdev_vf.c         |  17 ++-
 drivers/net/iavf/iavf_ethdev.c            |  18 ++--
 drivers/net/ice/ice_dcf_ethdev.c          |  12 +--
 drivers/net/ice/ice_ethdev.c              |  21 ++--
 drivers/net/igc/igc_ethdev.c              |  17 ++-
 drivers/net/ionic/ionic_ethdev.c          |  17 ++-
 drivers/net/ipn3ke/ipn3ke_ethdev.c        |   6 +-
 drivers/net/ipn3ke/ipn3ke_representor.c   |   7 +-
 drivers/net/ixgbe/ixgbe_ethdev.c          |  33 ++----
 drivers/net/kni/rte_eth_kni.c             |  25 ++---
 drivers/net/liquidio/lio_ethdev.c         |  11 +-
 drivers/net/memif/rte_eth_memif.c         |  11 +-
 drivers/net/mlx4/mlx4.c                   |   7 +-
 drivers/net/mlx5/linux/mlx5_os.c          |   2 -
 drivers/net/mlx5/mlx5.c                   |  16 +--
 drivers/net/mlx5/mlx5.h                   |   2 +-
 drivers/net/mvneta/mvneta_ethdev.c        |  15 +--
 drivers/net/mvpp2/mrvl_ethdev.c           |  15 +--
 drivers/net/netvsc/hn_ethdev.c            |  19 ++--
 drivers/net/netvsc/hn_var.h               |   2 +-
 drivers/net/netvsc/hn_vf.c                |   7 +-
 drivers/net/nfb/nfb_ethdev.c              |  11 +-
 drivers/net/nfp/nfp_net.c                 |  11 +-
 drivers/net/null/rte_eth_null.c           |  26 +++--
 drivers/net/octeontx/octeontx_ethdev.c    |  17 ++-
 drivers/net/octeontx2/otx2_ethdev.c       |   8 +-
 drivers/net/pcap/rte_eth_pcap.c           |  31 +++---
 drivers/net/pfe/pfe_ethdev.c              |  51 ++++-----
 drivers/net/qede/qede_ethdev.c            |  20 ++--
 drivers/net/ring/rte_eth_ring.c           |  53 +++++----
 drivers/net/sfc/sfc_ethdev.c              |  35 +++---
 drivers/net/softnic/rte_eth_softnic.c     |  67 ++++++------
 drivers/net/szedata2/rte_eth_szedata2.c   |  23 ++--
 drivers/net/tap/rte_eth_tap.c             |  52 +++++----
 drivers/net/thunderx/nicvf_ethdev.c       |  11 +-
 drivers/net/vhost/rte_eth_vhost.c         |  15 +--
 drivers/net/virtio/virtio_ethdev.c        |  17 ++-
 drivers/net/virtio/virtio_user_ethdev.c   |   4 +-
 drivers/net/vmxnet3/vmxnet3_ethdev.c      |  16 ++-
 lib/librte_ethdev/rte_ethdev.c            |  32 ++----
 lib/librte_ethdev/rte_ethdev.h            |  13 +--
 lib/librte_ethdev/rte_ethdev_driver.h     |   2 +-
 lib/librte_ethdev/rte_ethdev_pci.h        |  14 +--
 83 files changed, 763 insertions(+), 928 deletions(-)
  

Comments

Stephen Hemminger Sept. 28, 2020, 11:33 p.m. UTC | #1
On Tue, 29 Sep 2020 01:14:08 +0200
Thomas Monjalon <thomas@monjalon.net> wrote:

> This is the end of a process started two years ago,
> to have a close which reliably releases an ethdev port
> without the need of removing the device (which can have more ports).
> 
> Unfortunately, some drivers might be broken because did not follow
> the migration recommendations. We cannot wait more,
> this should be merged before the 20.11-rc1 release.
> 
> 
> v3:
>   - integrate NXP patches for dpaa, dpaa2, enetc and pfe
>   - fix crash in rte_eth_dev_release_port() because of early memset 0
> 
> v2 (big thanks to Ferruh for the reviews):
>   - rebase on top of cxgbe updates
>   - integrate updated patches for tap, bnx2x, qede
>   - return 0 in atlantic PMD
>   - fix failsafe mutex free
>   - remove useless check in pcap
>   - fix testpmd port state transition
>   - add primary process check
>   - reset more pointers in rte_eth_dev_release_port()
>   - remove dev_started reset in rte_eth_dev_close()
>   - return int from rte_eth_dev_close()
> 
> Note for future: fix old memory leak when releasing port,
> i.e. free callbacks link_intr_cbs, post_rx_burst_cbs, pre_tx_burst_cbs.
> 
> The last 3 patches are optional changes to ethdev close/release
> which were requested by Ferruh but may take longer to be accepted:
>   - memset 0
>   - keep start state
>   - int return
> 
> 
> Rasesh Mody (2):
>   net/bnx2x: release port upon close
>   net/qede: release port upon close
> 
> Sachin Saxena (4):
>   net/dpaa: release port upon close
>   net/dpaa2: release port upon close
>   net/enetc: release port upon close
>   net/pfe: release port upon close
> 
> Thomas Monjalon (22):
>   ethdev: reset device and interrupt pointers on release
>   ethdev: allow drivers to return error on close
>   net/af_packet: release port upon close
>   net/atlantic: release port upon close
>   net/axgbe: release port upon close
>   net/bonding: release port upon close
>   net/failsafe: release port upon close
>   net/mlx4: release port upon close
>   net/null: release port upon close
>   net/octeontx: release port upon close
>   net/pcap: release port upon close
>   net/ring: release port upon close
>   net/softnic: release port upon close
>   ethdev: remove old close behaviour
>   drivers/net: accept removing device without any port
>   drivers/net: check process type in close operation
>   drivers/net: remove redundant MAC addresses freeing
>   app/testpmd: reset port status on close notification
>   app/testpmd: align behaviour of multi-port detach
>   ethdev: remove forcing stopped state upon close
>   ethdev: reset all when releasing a port
>   ethdev: allow close function to return an error
> 
> Yunjian Wang (1):
>   net/tap: release port upon close
> 
>  MAINTAINERS                               |   6 +-
>  app/test-pmd/config.c                     |   7 +-
>  app/test-pmd/testpmd.c                    |  53 +++------
>  app/test/virtual_pmd.c                    |   6 +-
>  doc/guides/rel_notes/deprecation.rst      |   7 --
>  doc/guides/rel_notes/release_20_11.rst    |   4 +-
>  drivers/net/af_packet/rte_eth_af_packet.c |  58 +++++-----
>  drivers/net/af_xdp/rte_eth_af_xdp.c       |   9 +-
>  drivers/net/ark/ark_ethdev.c              |  17 ++-
>  drivers/net/atlantic/atl_ethdev.c         |  62 ++++-------
>  drivers/net/avp/avp_ethdev.c              |  10 +-
>  drivers/net/axgbe/axgbe_ethdev.c          |  17 +--
>  drivers/net/bnx2x/bnx2x_ethdev.c          |  16 ++-
>  drivers/net/bnxt/bnxt_ethdev.c            |  16 ++-
>  drivers/net/bnxt/bnxt_reps.c              |  11 +-
>  drivers/net/bnxt/bnxt_reps.h              |   2 +-
>  drivers/net/bonding/eth_bond_private.h    |   2 +-
>  drivers/net/bonding/rte_eth_bond_pmd.c    |  33 +++---
>  drivers/net/cxgbe/cxgbe_ethdev.c          |  18 ++--
>  drivers/net/cxgbe/cxgbe_main.c            |   2 -
>  drivers/net/cxgbe/cxgbe_pfvf.h            |   2 +-
>  drivers/net/cxgbe/cxgbevf_ethdev.c        |   5 +-
>  drivers/net/cxgbe/cxgbevf_main.c          |   2 -
>  drivers/net/dpaa/dpaa_ethdev.c            | 124 ++++++++++------------
>  drivers/net/dpaa2/dpaa2_ethdev.c          |  96 +++++++----------
>  drivers/net/e1000/em_ethdev.c             |  18 ++--
>  drivers/net/e1000/igb_ethdev.c            |  36 +++----
>  drivers/net/ena/ena_ethdev.c              |  20 ++--
>  drivers/net/enetc/enetc_ethdev.c          |  17 +--
>  drivers/net/enic/enic_ethdev.c            |   9 +-
>  drivers/net/enic/enic_vf_representor.c    |   8 +-
>  drivers/net/failsafe/failsafe.c           |  24 +----
>  drivers/net/failsafe/failsafe_ether.c     |   6 +-
>  drivers/net/failsafe/failsafe_ops.c       |  67 ++++++++----
>  drivers/net/failsafe/failsafe_private.h   |   1 +
>  drivers/net/fm10k/fm10k_ethdev.c          |  22 +---
>  drivers/net/hinic/hinic_pmd_ethdev.c      |  22 ++--
>  drivers/net/hns3/hns3_ethdev.c            |  15 +--
>  drivers/net/hns3/hns3_ethdev_vf.c         |  16 +--
>  drivers/net/i40e/i40e_ethdev.c            |  16 +--
>  drivers/net/i40e/i40e_ethdev_vf.c         |  17 ++-
>  drivers/net/iavf/iavf_ethdev.c            |  18 ++--
>  drivers/net/ice/ice_dcf_ethdev.c          |  12 +--
>  drivers/net/ice/ice_ethdev.c              |  21 ++--
>  drivers/net/igc/igc_ethdev.c              |  17 ++-
>  drivers/net/ionic/ionic_ethdev.c          |  17 ++-
>  drivers/net/ipn3ke/ipn3ke_ethdev.c        |   6 +-
>  drivers/net/ipn3ke/ipn3ke_representor.c   |   7 +-
>  drivers/net/ixgbe/ixgbe_ethdev.c          |  33 ++----
>  drivers/net/kni/rte_eth_kni.c             |  25 ++---
>  drivers/net/liquidio/lio_ethdev.c         |  11 +-
>  drivers/net/memif/rte_eth_memif.c         |  11 +-
>  drivers/net/mlx4/mlx4.c                   |   7 +-
>  drivers/net/mlx5/linux/mlx5_os.c          |   2 -
>  drivers/net/mlx5/mlx5.c                   |  16 +--
>  drivers/net/mlx5/mlx5.h                   |   2 +-
>  drivers/net/mvneta/mvneta_ethdev.c        |  15 +--
>  drivers/net/mvpp2/mrvl_ethdev.c           |  15 +--
>  drivers/net/netvsc/hn_ethdev.c            |  19 ++--
>  drivers/net/netvsc/hn_var.h               |   2 +-
>  drivers/net/netvsc/hn_vf.c                |   7 +-
>  drivers/net/nfb/nfb_ethdev.c              |  11 +-
>  drivers/net/nfp/nfp_net.c                 |  11 +-
>  drivers/net/null/rte_eth_null.c           |  26 +++--
>  drivers/net/octeontx/octeontx_ethdev.c    |  17 ++-
>  drivers/net/octeontx2/otx2_ethdev.c       |   8 +-
>  drivers/net/pcap/rte_eth_pcap.c           |  31 +++---
>  drivers/net/pfe/pfe_ethdev.c              |  51 ++++-----
>  drivers/net/qede/qede_ethdev.c            |  20 ++--
>  drivers/net/ring/rte_eth_ring.c           |  53 +++++----
>  drivers/net/sfc/sfc_ethdev.c              |  35 +++---
>  drivers/net/softnic/rte_eth_softnic.c     |  67 ++++++------
>  drivers/net/szedata2/rte_eth_szedata2.c   |  23 ++--
>  drivers/net/tap/rte_eth_tap.c             |  52 +++++----
>  drivers/net/thunderx/nicvf_ethdev.c       |  11 +-
>  drivers/net/vhost/rte_eth_vhost.c         |  15 +--
>  drivers/net/virtio/virtio_ethdev.c        |  17 ++-
>  drivers/net/virtio/virtio_user_ethdev.c   |   4 +-
>  drivers/net/vmxnet3/vmxnet3_ethdev.c      |  16 ++-
>  lib/librte_ethdev/rte_ethdev.c            |  32 ++----
>  lib/librte_ethdev/rte_ethdev.h            |  13 +--
>  lib/librte_ethdev/rte_ethdev_driver.h     |   2 +-
>  lib/librte_ethdev/rte_ethdev_pci.h        |  14 +--
>  83 files changed, 763 insertions(+), 928 deletions(-)
> 

Looks good, thanks for cleaning up the drivers. It is great to make sure all
the devices work right.

Acked-by: Stephen Hemminger <stephen@networkplumber.org>
  
Ferruh Yigit Sept. 30, 2020, 12:22 p.m. UTC | #2
On 9/29/2020 12:14 AM, Thomas Monjalon wrote:
> This is the end of a process started two years ago,
> to have a close which reliably releases an ethdev port
> without the need of removing the device (which can have more ports).
> 
> Unfortunately, some drivers might be broken because did not follow
> the migration recommendations. We cannot wait more,
> this should be merged before the 20.11-rc1 release.
> 
> 
> v3:
>    - integrate NXP patches for dpaa, dpaa2, enetc and pfe
>    - fix crash in rte_eth_dev_release_port() because of early memset 0
> 
> v2 (big thanks to Ferruh for the reviews):
>    - rebase on top of cxgbe updates
>    - integrate updated patches for tap, bnx2x, qede
>    - return 0 in atlantic PMD
>    - fix failsafe mutex free
>    - remove useless check in pcap
>    - fix testpmd port state transition
>    - add primary process check
>    - reset more pointers in rte_eth_dev_release_port()
>    - remove dev_started reset in rte_eth_dev_close()
>    - return int from rte_eth_dev_close()
> 
> Note for future: fix old memory leak when releasing port,
> i.e. free callbacks link_intr_cbs, post_rx_burst_cbs, pre_tx_burst_cbs.
> 
> The last 3 patches are optional changes to ethdev close/release
> which were requested by Ferruh but may take longer to be accepted:
>    - memset 0
>    - keep start state
>    - int return
> 
> 
> Rasesh Mody (2):
>    net/bnx2x: release port upon close
>    net/qede: release port upon close
> 
> Sachin Saxena (4):
>    net/dpaa: release port upon close
>    net/dpaa2: release port upon close
>    net/enetc: release port upon close
>    net/pfe: release port upon close
> 
> Thomas Monjalon (22):
>    ethdev: reset device and interrupt pointers on release
>    ethdev: allow drivers to return error on close
>    net/af_packet: release port upon close
>    net/atlantic: release port upon close
>    net/axgbe: release port upon close
>    net/bonding: release port upon close
>    net/failsafe: release port upon close
>    net/mlx4: release port upon close
>    net/null: release port upon close
>    net/octeontx: release port upon close
>    net/pcap: release port upon close
>    net/ring: release port upon close
>    net/softnic: release port upon close
>    ethdev: remove old close behaviour
>    drivers/net: accept removing device without any port
>    drivers/net: check process type in close operation
>    drivers/net: remove redundant MAC addresses freeing
>    app/testpmd: reset port status on close notification
>    app/testpmd: align behaviour of multi-port detach
>    ethdev: remove forcing stopped state upon close
>    ethdev: reset all when releasing a port
>    ethdev: allow close function to return an error
> 
> Yunjian Wang (1):
>    net/tap: release port upon close
> 


Since some discussions going on them last three patches not merged, they can be 
sent separately.

Except from last three patches, 27/29, 28/29, 29/29,
Series applied to dpdk-next-net/main, thanks.