| 850 | } |
| 851 | |
| 852 | static int ena_close(struct rte_eth_dev *dev) |
| 853 | { |
| 854 | struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev); |
| 855 | struct rte_intr_handle *intr_handle = pci_dev->intr_handle; |
| 856 | struct ena_adapter *adapter = dev->data->dev_private; |
| 857 | int ret = 0; |
| 858 | |
| 859 | if (rte_eal_process_type() != RTE_PROC_PRIMARY) |
| 860 | return 0; |
| 861 | |
| 862 | if (adapter->state == ENA_ADAPTER_STATE_RUNNING) |
| 863 | ret = ena_stop(dev); |
| 864 | adapter->state = ENA_ADAPTER_STATE_CLOSED; |
| 865 | |
| 866 | ena_rx_queue_release_all(dev); |
| 867 | ena_tx_queue_release_all(dev); |
| 868 | |
| 869 | rte_free(adapter->drv_stats); |
| 870 | adapter->drv_stats = NULL; |
| 871 | |
| 872 | rte_intr_disable(intr_handle); |
| 873 | rte_intr_callback_unregister(intr_handle, |
| 874 | ena_interrupt_handler_rte, |
| 875 | dev); |
| 876 | |
| 877 | /* |
| 878 | * MAC is not allocated dynamically. Setting NULL should prevent from |
| 879 | * release of the resource in the rte_eth_dev_release_port(). |
| 880 | */ |
| 881 | dev->data->mac_addrs = NULL; |
| 882 | |
| 883 | return ret; |
| 884 | } |
| 885 | |
| 886 | static int |
| 887 | ena_dev_reset(struct rte_eth_dev *dev) |
no test coverage detected