Hi Maxime, > -----Original Message----- > From: Maxime Coquelin <maxime.coque...@redhat.com> > Sent: Tuesday, January 31, 2023 5:29 AM > To: Vargas, Hernan <hernan.var...@intel.com>; dev@dpdk.org; > gak...@marvell.com; Rix, Tom <t...@redhat.com> > Cc: Chautru, Nicolas <nicolas.chau...@intel.com>; Zhang, Qi Z > <qi.z.zh...@intel.com> > Subject: Re: [PATCH v1 08/13] test/bbdev: extend support for large TB > > > > On 1/17/23 17:50, Hernan Vargas wrote: > > Add support for large TB when it cannot fit into a true mbuf. > > > > Signed-off-by: Hernan Vargas <hernan.var...@intel.com> > > --- > > app/test-bbdev/test_bbdev_perf.c | 21 ++++++++++++--------- > > 1 file changed, 12 insertions(+), 9 deletions(-) > > > > diff --git a/app/test-bbdev/test_bbdev_perf.c > > b/app/test-bbdev/test_bbdev_perf.c > > index 69b86cdeb1..fdf7a28ba2 100644 > > --- a/app/test-bbdev/test_bbdev_perf.c > > +++ b/app/test-bbdev/test_bbdev_perf.c > > @@ -1072,8 +1072,6 @@ init_op_data_objs(struct rte_bbdev_op_data > *bufs, > > * Special case when DPDK mbuf cannot handle > > * the required input size > > */ > > - printf("Warning: Larger input size than DPDK mbuf > %d\n", > > - seg->length); > > large_input = true; > > } > > bufs[i].data = m_head; > > @@ -2030,6 +2028,7 @@ validate_op_chain(struct rte_bbdev_op_data > *op, > > struct rte_mbuf *m = op->data; > > uint8_t nb_dst_segments = orig_op->nb_segments; > > uint32_t total_data_size = 0; > > + bool ignore_mbuf = false; /* ignore mbuf limitations */ > > > > TEST_ASSERT(nb_dst_segments == m->nb_segs, > > "Number of segments differ in original (%u) and filled > (%u) op", > > @@ -2042,21 +2041,25 @@ validate_op_chain(struct rte_bbdev_op_data > *op, > > uint16_t data_len = rte_pktmbuf_data_len(m) - offset; > > total_data_size += orig_op->segments[i].length; > > > > - TEST_ASSERT(orig_op->segments[i].length == data_len, > > - "Length of segment differ in original (%u) and > filled (%u) op", > > - orig_op->segments[i].length, data_len); > > + if (orig_op->segments[i].length > > RTE_BBDEV_LDPC_E_MAX_MBUF) > > + ignore_mbuf = true; > > + if (!ignore_mbuf) > > + TEST_ASSERT(orig_op->segments[i].length == > data_len, > > + "Length of segment differ in original > (%u) and filled (%u) op", > > + orig_op->segments[i].length, > data_len); > > TEST_ASSERT_BUFFERS_ARE_EQUAL(orig_op- > >segments[i].addr, > > rte_pktmbuf_mtod_offset(m, uint32_t *, > offset), > > - data_len, > > + orig_op->segments[i].length, > > Isn't it ending up in performing out of bounds access in the mbuf?
No, in the case when ignore_mbuf is set to true, we use a "fake" mbuf allocated in memory with rte_malloc. The size allocated is segments[i].length. Thanks > > "Output buffers (CB=%u) are not equal", i); > > m = m->next; > > } > > > > /* Validate total mbuf pkt length */ > > uint32_t pkt_len = rte_pktmbuf_pkt_len(op->data) - op->offset; > > - TEST_ASSERT(total_data_size == pkt_len, > > - "Length of data differ in original (%u) and filled (%u) > op", > > - total_data_size, pkt_len); > > + if (!ignore_mbuf) > > + TEST_ASSERT(total_data_size == pkt_len, > > + "Length of data differ in original (%u) and > filled (%u) op", > > + total_data_size, pkt_len); > > > > return TEST_SUCCESS; > > }