[dpdk-dev] [PATCH 1/4] app/test: enhance test_port_ring_writer
Hi Robert, Sorry for my delay, I am traveling this week, I will reply as soon as I find a slot to focus on this, hopefully in the next couple of days, thanks for your patience. Regards, Cristian > -Original Message- > From: Sanford, Robert [mailto:rsanford at akamai.com] > Sent: Friday, April 1, 2016 12:43 PM > To: dev at dpdk.org; Dumitrescu, Cristian > Subject: Re: [dpdk-dev] [PATCH 1/4] app/test: enhance > test_port_ring_writer > > We don't need to change this line, because we never access more than > RTE_PORT_IN_BURST_SIZE_MAX (64) elements in this array: > > - struct rte_mbuf *mbuf[RTE_PORT_IN_BURST_SIZE_MAX]; > + struct rte_mbuf *mbuf[2 * RTE_PORT_IN_BURST_SIZE_MAX]; > > > -- > Robert > > >Add code to send two 60-packet bursts to a ring port_out. > >This tests a ring writer buffer overflow problem and fix > >(in patch 2/4). > > > >Signed-off-by: Robert Sanford > >--- > > app/test/test_table_ports.c | 27 +-- > > 1 files changed, 25 insertions(+), 2 deletions(-) > > > >diff --git a/app/test/test_table_ports.c b/app/test/test_table_ports.c > >index 2532367..0c0ec0a 100644 > >--- a/app/test/test_table_ports.c > >+++ b/app/test/test_table_ports.c > >@@ -149,8 +149,8 @@ test_port_ring_writer(void) > > > > /* -- Traffic TX -- */ > > int expected_pkts, received_pkts; > >-struct rte_mbuf *mbuf[RTE_PORT_IN_BURST_SIZE_MAX]; > >-struct rte_mbuf *res_mbuf[RTE_PORT_IN_BURST_SIZE_MAX]; > >+struct rte_mbuf *mbuf[2 * RTE_PORT_IN_BURST_SIZE_MAX]; > >+struct rte_mbuf *res_mbuf[2 * RTE_PORT_IN_BURST_SIZE_MAX]; > > > > port_ring_writer_params.ring = RING_TX; > > port_ring_writer_params.tx_burst_sz = > RTE_PORT_IN_BURST_SIZE_MAX; > >@@ -216,5 +216,28 @@ test_port_ring_writer(void) > > for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++) > > rte_pktmbuf_free(res_mbuf[i]); > > > >+/* TX Bulk - send two 60-packet bursts */ > >+uint64_t pkt_mask = 0xfff0ULL; > >+ > >+for (i = 0; i < 4; i++) > >+mbuf[i] = NULL; > >+for (i = 4; i < 64; i++) > >+mbuf[i] = rte_pktmbuf_alloc(pool); > >+rte_port_ring_writer_ops.f_tx_bulk(port, mbuf, pkt_mask); > >+for (i = 4; i < 64; i++) > >+mbuf[i] = rte_pktmbuf_alloc(pool); > >+rte_port_ring_writer_ops.f_tx_bulk(port, mbuf, pkt_mask); > >+rte_port_ring_writer_ops.f_flush(port); > >+ > >+expected_pkts = 2 * 60; > >+received_pkts = > rte_ring_sc_dequeue_burst(port_ring_writer_params.ring, > >+(void **)res_mbuf, 2 * RTE_PORT_IN_BURST_SIZE_MAX); > >+ > >+if (received_pkts != expected_pkts) > >+return -10; > >+ > >+for (i = 0; i < received_pkts; i++) > >+rte_pktmbuf_free(res_mbuf[i]); > >+ > > return 0; > > } > >-- > >1.7.1 > >
[dpdk-dev] [PATCH 1/4] app/test: enhance test_port_ring_writer
We don't need to change this line, because we never access more than RTE_PORT_IN_BURST_SIZE_MAX (64) elements in this array: - struct rte_mbuf *mbuf[RTE_PORT_IN_BURST_SIZE_MAX]; + struct rte_mbuf *mbuf[2 * RTE_PORT_IN_BURST_SIZE_MAX]; -- Robert >Add code to send two 60-packet bursts to a ring port_out. >This tests a ring writer buffer overflow problem and fix >(in patch 2/4). > >Signed-off-by: Robert Sanford >--- > app/test/test_table_ports.c | 27 +-- > 1 files changed, 25 insertions(+), 2 deletions(-) > >diff --git a/app/test/test_table_ports.c b/app/test/test_table_ports.c >index 2532367..0c0ec0a 100644 >--- a/app/test/test_table_ports.c >+++ b/app/test/test_table_ports.c >@@ -149,8 +149,8 @@ test_port_ring_writer(void) > > /* -- Traffic TX -- */ > int expected_pkts, received_pkts; >- struct rte_mbuf *mbuf[RTE_PORT_IN_BURST_SIZE_MAX]; >- struct rte_mbuf *res_mbuf[RTE_PORT_IN_BURST_SIZE_MAX]; >+ struct rte_mbuf *mbuf[2 * RTE_PORT_IN_BURST_SIZE_MAX]; >+ struct rte_mbuf *res_mbuf[2 * RTE_PORT_IN_BURST_SIZE_MAX]; > > port_ring_writer_params.ring = RING_TX; > port_ring_writer_params.tx_burst_sz = RTE_PORT_IN_BURST_SIZE_MAX; >@@ -216,5 +216,28 @@ test_port_ring_writer(void) > for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++) > rte_pktmbuf_free(res_mbuf[i]); > >+ /* TX Bulk - send two 60-packet bursts */ >+ uint64_t pkt_mask = 0xfff0ULL; >+ >+ for (i = 0; i < 4; i++) >+ mbuf[i] = NULL; >+ for (i = 4; i < 64; i++) >+ mbuf[i] = rte_pktmbuf_alloc(pool); >+ rte_port_ring_writer_ops.f_tx_bulk(port, mbuf, pkt_mask); >+ for (i = 4; i < 64; i++) >+ mbuf[i] = rte_pktmbuf_alloc(pool); >+ rte_port_ring_writer_ops.f_tx_bulk(port, mbuf, pkt_mask); >+ rte_port_ring_writer_ops.f_flush(port); >+ >+ expected_pkts = 2 * 60; >+ received_pkts = rte_ring_sc_dequeue_burst(port_ring_writer_params.ring, >+ (void **)res_mbuf, 2 * RTE_PORT_IN_BURST_SIZE_MAX); >+ >+ if (received_pkts != expected_pkts) >+ return -10; >+ >+ for (i = 0; i < received_pkts; i++) >+ rte_pktmbuf_free(res_mbuf[i]); >+ > return 0; > } >-- >1.7.1
[dpdk-dev] [PATCH 1/4] app/test: enhance test_port_ring_writer
Add code to send two 60-packet bursts to a ring port_out. This tests a ring writer buffer overflow problem and fix (in patch 2/4). Signed-off-by: Robert Sanford --- app/test/test_table_ports.c | 27 +-- 1 files changed, 25 insertions(+), 2 deletions(-) diff --git a/app/test/test_table_ports.c b/app/test/test_table_ports.c index 2532367..0c0ec0a 100644 --- a/app/test/test_table_ports.c +++ b/app/test/test_table_ports.c @@ -149,8 +149,8 @@ test_port_ring_writer(void) /* -- Traffic TX -- */ int expected_pkts, received_pkts; - struct rte_mbuf *mbuf[RTE_PORT_IN_BURST_SIZE_MAX]; - struct rte_mbuf *res_mbuf[RTE_PORT_IN_BURST_SIZE_MAX]; + struct rte_mbuf *mbuf[2 * RTE_PORT_IN_BURST_SIZE_MAX]; + struct rte_mbuf *res_mbuf[2 * RTE_PORT_IN_BURST_SIZE_MAX]; port_ring_writer_params.ring = RING_TX; port_ring_writer_params.tx_burst_sz = RTE_PORT_IN_BURST_SIZE_MAX; @@ -216,5 +216,28 @@ test_port_ring_writer(void) for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++) rte_pktmbuf_free(res_mbuf[i]); + /* TX Bulk - send two 60-packet bursts */ + uint64_t pkt_mask = 0xfff0ULL; + + for (i = 0; i < 4; i++) + mbuf[i] = NULL; + for (i = 4; i < 64; i++) + mbuf[i] = rte_pktmbuf_alloc(pool); + rte_port_ring_writer_ops.f_tx_bulk(port, mbuf, pkt_mask); + for (i = 4; i < 64; i++) + mbuf[i] = rte_pktmbuf_alloc(pool); + rte_port_ring_writer_ops.f_tx_bulk(port, mbuf, pkt_mask); + rte_port_ring_writer_ops.f_flush(port); + + expected_pkts = 2 * 60; + received_pkts = rte_ring_sc_dequeue_burst(port_ring_writer_params.ring, + (void **)res_mbuf, 2 * RTE_PORT_IN_BURST_SIZE_MAX); + + if (received_pkts != expected_pkts) + return -10; + + for (i = 0; i < received_pkts; i++) + rte_pktmbuf_free(res_mbuf[i]); + return 0; } -- 1.7.1