Re: [dpdk-stable] [PATCH v2] net/i40e: fix compile error
From: Zhang, Qi Z <hidden>
Date: 2017-02-21 01:02:39
Hi Ferruh:
-----Original Message----- From: Yigit, Ferruh Sent: Monday, February 20, 2017 7:44 PM To: Zhang, Qi Z <redacted>; Wu, Jingjing <redacted>; Zhang, Helin [off-list ref] Cc: dev@dpdk.org; stable@dpdk.org Subject: Re: [dpdk-stable] [PATCH v2] net/i40e: fix compile error On 2/20/2017 12:08 AM, Qi Zhang wrote:quoted
This patch fix the compile error when RTE_LIBRTE_I40E_RX_ALLOW_BULK_ALLOC is disabled.Compile error: CC i40e_rxtx_vec_sse.o .../drivers/net/i40e/i40e_rxtx_vec_sse.c:72:26: error: no member named 'fake_mbuf' in 'struct i40e_rx_queue' rxep[i].mbuf = &rxq->fake_mbuf; ~~~ ^quoted
Fixes: 9ed94e5bb04e ("i40e: add vector Rx") Cc: stable@dpdk.org Signed-off-by: Qi Zhang <redacted> --- drivers/net/i40e/i40e_rxtx.c | 2 +- drivers/net/i40e/i40e_rxtx.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)diff --git a/drivers/net/i40e/i40e_rxtx.cb/drivers/net/i40e/i40e_rxtx.c index 48429cc..40f4a45 100644--- a/drivers/net/i40e/i40e_rxtx.c +++ b/drivers/net/i40e/i40e_rxtx.c@@ -2209,11 +2209,11 @@ i40e_reset_rx_queue(struct i40e_rx_queue*rxq)quoted
for (i = 0; i < len * sizeof(union i40e_rx_desc); i++) ((volatile char *)rxq->rx_ring)[i] = 0; -#ifdef RTE_LIBRTE_I40E_RX_ALLOW_BULK_ALLOC memset(&rxq->fake_mbuf, 0x0, sizeof(rxq->fake_mbuf)); for (i = 0; i < RTE_PMD_I40E_RX_MAX_BURST; ++i) rxq->sw_ring[rxq->nb_rx_desc + i].mbuf = &rxq->fake_mbuf; +#ifdef RTE_LIBRTE_I40E_RX_ALLOW_BULK_ALLOCHi Qi, Just to double check, below update in i40e_rxtx.h is enough to fix the build error. Can you please confirm assigning fake_mbuf to sw_ring[] is required step, independent from RTE_LIBRTE_I40E_RX_ALLOW_BULK_ALLOC enabled or not?
I think it's necessary to assign fake_mbuf for couple additional entries in sw_ring Because there is no place to initialize these entries (i40e_rxq_rearm only cover entries round in nb_rx_desc) while _recv_raw_pkts_vec require these entries in some situation.(though only RTE_I40E_DESCS_PER_LOOP-1 entries are required, but we can reuse the code)
And it can be good to document this in commit log.
OK, I will add it in v3
Thanks, ferruhquoted
rxq->rx_nb_avail = 0; rxq->rx_next_avail = 0; rxq->rx_free_trigger = (uint16_t)(rxq->rx_free_thresh - 1); diff --git a/drivers/net/i40e/i40e_rxtx.h b/drivers/net/i40e/i40e_rxtx.h index 9df8a56..4f7f319 100644--- a/drivers/net/i40e/i40e_rxtx.h +++ b/drivers/net/i40e/i40e_rxtx.h@@ -119,11 +119,11 @@ struct i40e_rx_queue { uint16_t nb_rx_hold; /**< number of held free RX desc */ struct rte_mbuf *pkt_first_seg; /**< first segment of current packet */ struct rte_mbuf *pkt_last_seg; /**< last segment of current packet*/ + struct rte_mbuf fake_mbuf; /**< dummy mbuf */ #ifdef RTE_LIBRTE_I40E_RX_ALLOW_BULK_ALLOC uint16_t rx_nb_avail; /**< number of staged packets ready */ uint16_t rx_next_avail; /**< index of next staged packets */ uint16_t rx_free_trigger; /**< triggers rx buffer allocation */ - struct rte_mbuf fake_mbuf; /**< dummy mbuf */ struct rte_mbuf *rx_stage[RTE_PMD_I40E_RX_MAX_BURST * 2]; #endif