05/05/2020 13:19, Renata Saiakhova: > Hi Thomas, > > In our application dpdk port can be connected and disconnected: > > Connect: > new_port_id = netdev_dpdk_get_port_by_devargs(dpdk_port->pci_addr_str); > > if (!rte_eth_dev_is_valid_port(new_port_id)) { > /* Device not found in DPDK, attempt to attach it */ > if (rte_dev_probe(dpdk_port->pci_addr_str)) { > new_port_id = DPDK_ETH_PORT_ID_INVALID; > } else { > new_port_id = > netdev_dpdk_get_port_by_devargs(dpdk_port->pci_addr_str); > if (rte_eth_dev_is_valid_port(new_port_id)) { > LO_TRACE("Device '%s' attached to DPDK", dpdk_port->pci_addr_str); > } else { > /* Attach unsuccessful */ > new_port_id = DPDK_ETH_PORT_ID_INVALID; > } > } > } > > Disconnect: > > dp_ConfigureRxQueues(dpdk_port, FALSE); > rte_eth_dev_set_link_down(port_id); > rte_eth_dev_stop(port_id); > rte_eth_dev_close(port_id); > > and yes, exactly, port id is recycled by eth_dev. Next time, switching from > igb port to ixgbe with the same port and using HW rings of bigger size for > ixgbe creates memory corruption.
I see. Reusing the same rings for a new port seems really wrong indeed. Please check if same issue must be fixed in other PMDs.