| 1828 | } |
| 1829 | |
| 1830 | void |
| 1831 | iavf_flow_uninit(struct iavf_adapter *ad) |
| 1832 | { |
| 1833 | struct iavf_info *vf = IAVF_DEV_PRIVATE_TO_VF(ad); |
| 1834 | struct iavf_flow_engine *engine; |
| 1835 | struct rte_flow *p_flow; |
| 1836 | struct iavf_flow_parser_node *p_parser; |
| 1837 | void *temp; |
| 1838 | |
| 1839 | RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { |
| 1840 | if (engine->uninit) |
| 1841 | engine->uninit(ad); |
| 1842 | } |
| 1843 | |
| 1844 | /* Remove all flows */ |
| 1845 | while ((p_flow = TAILQ_FIRST(&vf->flow_list))) { |
| 1846 | TAILQ_REMOVE(&vf->flow_list, p_flow, node); |
| 1847 | if (p_flow->engine->free) |
| 1848 | p_flow->engine->free(p_flow); |
| 1849 | rte_free(p_flow); |
| 1850 | } |
| 1851 | |
| 1852 | /* Cleanup parser list */ |
| 1853 | while ((p_parser = TAILQ_FIRST(&vf->rss_parser_list))) { |
| 1854 | TAILQ_REMOVE(&vf->rss_parser_list, p_parser, node); |
| 1855 | rte_free(p_parser); |
| 1856 | } |
| 1857 | |
| 1858 | while ((p_parser = TAILQ_FIRST(&vf->dist_parser_list))) { |
| 1859 | TAILQ_REMOVE(&vf->dist_parser_list, p_parser, node); |
| 1860 | rte_free(p_parser); |
| 1861 | } |
| 1862 | } |
| 1863 | |
| 1864 | int |
| 1865 | iavf_register_parser(struct iavf_flow_parser *parser, |
no test coverage detected