This patch aims to enable hotplug detection in i40e PMD. First, it sets the “RTE_PCI_DRV_INTR_RMV” flag in drv_flags to announce the ability of hotplug processing. Then, it calls the “rte_eth_dev_event_handler_install” API to install the device event handler for ethdev. When the eal device event be detected, it calls the ethdev callback to process it. If the event is the hotplug-out event, it will trigger the “RTE_ETH_EVENT_INTR_RMV” event into the ethdev callback to allow the application's callback to process hotplug for this ethdev.
Signed-off-by: Jeff Guo <jia....@intel.com> Acked-by: Qi Zhang <qi.z.zh...@intel.com> --- v6->v5: refine commit log --- drivers/net/i40e/i40e_ethdev.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c index 85a6a86..bd9b3ce 100644 --- a/drivers/net/i40e/i40e_ethdev.c +++ b/drivers/net/i40e/i40e_ethdev.c @@ -697,7 +697,7 @@ static int eth_i40e_pci_remove(struct rte_pci_device *pci_dev) static struct rte_pci_driver rte_i40e_pmd = { .id_table = pci_id_i40e_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC | - RTE_PCI_DRV_IOVA_AS_VA, + RTE_PCI_DRV_IOVA_AS_VA | RTE_PCI_DRV_INTR_RMV, .probe = eth_i40e_pci_probe, .remove = eth_i40e_pci_remove, }; @@ -1466,6 +1466,9 @@ eth_i40e_dev_init(struct rte_eth_dev *dev, void *init_params __rte_unused) rte_intr_callback_register(intr_handle, i40e_dev_interrupt_handler, dev); + /* install the dev event handler for ethdev. */ + rte_eth_dev_event_handler_install(dev); + /* configure and enable device interrupt */ i40e_pf_config_irq0(hw, TRUE); i40e_pf_enable_irq0(hw); @@ -1697,6 +1700,9 @@ eth_i40e_dev_uninit(struct rte_eth_dev *dev) /* Remove all Traffic Manager configuration */ i40e_tm_conf_uninit(dev); + /* uninstall the dev event handler for ethdev. */ + rte_eth_dev_event_handler_uninstall(dev); + return 0; } -- 2.7.4