On 5/1/2024 8:43 AM, Morten Brørup wrote: >> From: Alan Elder [mailto:alan.el...@microsoft.com] >> Sent: Monday, 15 April 2024 16.41 >> >> The previous code allowed the number of Tx queues to be set higher than the >> number of Rx queues. If a packet was sent on a Tx queue with index >>> = number Rx queues there was a segfault due to accessing beyond the end of >> the dev->data->rx_queues[] array. >> >> #0 rte_spinlock_trylock (sl = invalid address) at /include/rte_spinlock.h L63 >> #1 hn_process_events at /drivers/net/netvsc/hn_rxtx.c L 1129 >> #2 hn_xmit_pkts at /drivers/net/netvsc/hn_rxtx.c L1553 >> >> This commit fixes the issue by creating an Rx queue for every Tx queue >> meaning >> that an event buffer is allocated to handle receiving Tx completion messages. >> >> mbuf pool and Rx ring are not allocated for these additional Rx queues and >> RSS >> configuration ensures that no packets are received on them. >> >> Fixes: 4e9c73e96e83 ("net/netvsc: add Hyper-V network device") >> Cc: sthem...@microsoft.com >> Cc: sta...@dpdk.org >> >> Signed-off-by: Alan Elder <alan.el...@microsoft.com> >> --- > > Is there any requirements to the order the application must call > rte_eth_rx_queue_setup() and rte_eth_tx_queue_setup()? > > I.e. does it work if rte_eth_tx_queue_setup() is called before > rte_eth_rx_queue_setup(), and in the opposite order? > > > Although the ethdev documentation says: > > "The functions exported by the application Ethernet API to setup a device > designated by its port identifier must be invoked in the following order: > > rte_eth_dev_configure() > rte_eth_tx_queue_setup() > rte_eth_rx_queue_setup() > rte_eth_dev_start()", > > I would assume the order of calling rte_eth_tx_queue_setup() and > rte_eth_rx_queue_setup() doesn't matter. >
Same, I am not aware of any strict ordering requirement for Rx and Tx queues setup. > > And the rte_eth_dev_reset() function documentation has rx/tx queue setup in > the opposite order: > > "After calling rte_eth_dev_reset(), the application should use > rte_eth_dev_configure(), rte_eth_rx_queue_setup(), rte_eth_tx_queue_setup(), > and rte_eth_dev_start() to reconfigure the device as appropriate." >