Bug 343
Summary: | Couldn't receive LACP PDU when enable dedicated queue | ||
---|---|---|---|
Product: | DPDK | Reporter: | chen tom (abcht2005) |
Component: | ethdev | Assignee: | Chas Williams (3chas3) |
Status: | UNCONFIRMED --- | ||
Severity: | normal | CC: | 980965867, abcht2005, ajit.khaparde |
Priority: | Normal | ||
Version: | 17.11 | ||
Target Milestone: | --- | ||
Hardware: | All | ||
OS: | All |
Description
chen tom
2019-09-04 14:29:53 CEST
I have tracking the ixgbe pmd code, the function _recv_raw_pkts_vec in the ixgbe_rxtx_vec_sse.c, before read mbuf from queue, use RTE_ALIGN_FLOOR to change the nb_pkts, that will align it with 4. but when LACP dedicated queue enabled, it will receive mbuf with one packet per time, so it will be align to ZERo, and make it do nothing in _recv_raw_pkts_vec. that's why LACP PDU is not received. Changes I made: - struct rte_mbuf *lacp_pkt = NULL; + struct rte_mbuf *lacp_pkt[32] = { NULL }; uint8_t i, slave_id; @@ -891,20 +891,24 @@ bond_mode_8023ad_periodic_cb(void *arg) * it is done in function that queued packet */ int retval = rte_ring_dequeue(port->rx_ring, - (void **)&lacp_pkt); + (void **)&lacp_pkt[0]); if (retval != 0) - lacp_pkt = NULL; + lacp_pkt[0] = NULL; - rx_machine_update(internals, slave_id, lacp_pkt); + rx_machine_update(internals, slave_id, lacp_pkt[0]); } else { uint16_t rx_count = rte_eth_rx_burst(slave_id, internals->mode4.dedicated_queues.rx_qid, - &lacp_pkt, 1); - - if (rx_count == 1) - bond_mode_8023ad_handle_slow_pkt(internals, - slave_id, lacp_pkt); + &lacp_pkt[0], 32); + + if (rx_count == 1) { + uint16_t j = 0; + for (j = 0; j < rx_count; j++) { + bond_mode_8023ad_handle_slow_pkt(internals, + slave_id, lacp_pkt[j]); + } + } else rx_machine_update(internals, slave_id, NULL); } Can you please take a look? Thanks Hi,Is this bug handled by anyone? I encountered the same problem. This patch is also effective. Why has no reply for a long time? Is there any other reason? |