Device reset may have the dependency, for example, a VF reset expects PF ready, or a NIC function as a part of a SOC need to wait for other parts of the system be ready, these are time-consuming tasks and will block current thread.
So we claimed rte_eth_dev_reset as an async API, that makes things easy for an application that what to reset the device from the interrupt thread since typically a RTE_ETH_EVENT_INTR_RESET handler is invoked in interrupt thread. PMD is responsrible to implement ops->dev_reset in an async way, it can offload the whole task into a separate thread, or maybe just pending on hardware interrupt as reset dependency ready or start a timely alarm to poll register status as a background daemon. PMD is also responsible to raise the RTE_ETH_EVENT_RESET_COMPLETE event to notify the application when reset is complete. Application should not assume device reset is finished after rte_eth_dev_reset return, it should always wait for a RTE_ETH_EVENT_RESET_COMPLETE event and check the reset result. Qi Zhang (4): ethdev: claim device reset as async net/i40e: enable async device reset net/ixgbe: enable async device reset testpmd: enable async device reset app/test-pmd/testpmd.c | 55 +++++++++++++++++++++++++++++++++++++++- drivers/net/i40e/i40e_ethdev.c | 28 ++++++++++++++++---- drivers/net/ixgbe/ixgbe_ethdev.c | 26 ++++++++++++++----- lib/librte_ethdev/rte_ethdev.h | 33 ++++++++++++------------ 4 files changed, 114 insertions(+), 28 deletions(-) -- 2.13.6