Hi, > -----Original Message----- > From: Chautru, Nicolas <nicolas.chau...@intel.com> > Sent: Sunday, August 30, 2020 2:01 > To: Xu, Rosen <rosen...@intel.com>; dev@dpdk.org; akhil.go...@nxp.com > Cc: Richardson, Bruce <bruce.richard...@intel.com> > Subject: RE: [dpdk-dev] [PATCH v3 05/11] baseband/acc100: add LDPC > processing functions > > Hi Rosen, > > > From: Xu, Rosen <rosen...@intel.com> > > > > Hi, > > > > > -----Original Message----- > > > From: dev <dev-boun...@dpdk.org> On Behalf Of Nicolas Chautru > > > Sent: Wednesday, August 19, 2020 8:25 > > > To: dev@dpdk.org; akhil.go...@nxp.com > > > Cc: Richardson, Bruce <bruce.richard...@intel.com>; Chautru, Nicolas > > > <nicolas.chau...@intel.com> > > > Subject: [dpdk-dev] [PATCH v3 05/11] baseband/acc100: add LDPC > > > processing functions > > > > > > Adding LDPC decode and encode processing operations > > > > > > Signed-off-by: Nicolas Chautru <nicolas.chau...@intel.com> > > > --- > > > drivers/baseband/acc100/rte_acc100_pmd.c | 1625 > > > +++++++++++++++++++++++++++++- > > > drivers/baseband/acc100/rte_acc100_pmd.h | 3 + > > > 2 files changed, 1626 insertions(+), 2 deletions(-) > > > > > > diff --git a/drivers/baseband/acc100/rte_acc100_pmd.c > > > b/drivers/baseband/acc100/rte_acc100_pmd.c > > > index 7a21c57..5f32813 100644 > > > --- a/drivers/baseband/acc100/rte_acc100_pmd.c > > > +++ b/drivers/baseband/acc100/rte_acc100_pmd.c > > > @@ -15,6 +15,9 @@ > > > #include <rte_hexdump.h> > > > #include <rte_pci.h> > > > #include <rte_bus_pci.h> > > > +#ifdef RTE_BBDEV_OFFLOAD_COST > > > +#include <rte_cycles.h> > > > +#endif > > > > > > #include <rte_bbdev.h> > > > #include <rte_bbdev_pmd.h> > > > @@ -449,7 +452,6 @@ > > > return 0; > > > } > > > > > > - > > > /** > > > * Report a ACC100 queue index which is free > > > * Return 0 to 16k for a valid queue_idx or -1 when no queue is > > > available @@ -634,6 +636,46 @@ > > > struct acc100_device *d = dev->data->dev_private; > > > > > > static const struct rte_bbdev_op_cap bbdev_capabilities[] = { > > > + { > > > + .type = RTE_BBDEV_OP_LDPC_ENC, > > > + .cap.ldpc_enc = { > > > + .capability_flags = > > > + RTE_BBDEV_LDPC_RATE_MATCH | > > > + RTE_BBDEV_LDPC_CRC_24B_ATTACH > > > | > > > + > > > RTE_BBDEV_LDPC_INTERLEAVER_BYPASS, > > > + .num_buffers_src = > > > + > > > RTE_BBDEV_LDPC_MAX_CODE_BLOCKS, > > > + .num_buffers_dst = > > > + > > > RTE_BBDEV_LDPC_MAX_CODE_BLOCKS, > > > + } > > > + }, > > > + { > > > + .type = RTE_BBDEV_OP_LDPC_DEC, > > > + .cap.ldpc_dec = { > > > + .capability_flags = > > > + RTE_BBDEV_LDPC_CRC_TYPE_24B_CHECK | > > > + RTE_BBDEV_LDPC_CRC_TYPE_24B_DROP | > > > + > > > RTE_BBDEV_LDPC_HQ_COMBINE_IN_ENABLE | > > > + > > > RTE_BBDEV_LDPC_HQ_COMBINE_OUT_ENABLE | > > > +#ifdef ACC100_EXT_MEM > > > + > > > RTE_BBDEV_LDPC_INTERNAL_HARQ_MEMORY_IN_ENABLE | > > > + > > > RTE_BBDEV_LDPC_INTERNAL_HARQ_MEMORY_OUT_ENABLE | > > > +#endif > > > + > > > RTE_BBDEV_LDPC_ITERATION_STOP_ENABLE | > > > + RTE_BBDEV_LDPC_DEINTERLEAVER_BYPASS > > > | > > > + RTE_BBDEV_LDPC_DECODE_BYPASS | > > > + RTE_BBDEV_LDPC_DEC_SCATTER_GATHER | > > > + > > > RTE_BBDEV_LDPC_HARQ_6BIT_COMPRESSION | > > > + RTE_BBDEV_LDPC_LLR_COMPRESSION, > > > + .llr_size = 8, > > > + .llr_decimals = 1, > > > + .num_buffers_src = > > > + > > > RTE_BBDEV_LDPC_MAX_CODE_BLOCKS, > > > + .num_buffers_hard_out = > > > + > > > RTE_BBDEV_LDPC_MAX_CODE_BLOCKS, > > > + .num_buffers_soft_out = 0, > > > + } > > > + }, > > > RTE_BBDEV_END_OF_CAPABILITIES_LIST() > > > }; > > > > > > @@ -669,9 +711,14 @@ > > > dev_info->cpu_flag_reqs = NULL; > > > dev_info->min_alignment = 64; > > > dev_info->capabilities = bbdev_capabilities; > > > +#ifdef ACC100_EXT_MEM > > > dev_info->harq_buffer_size = d->ddr_size; > > > +#else > > > + dev_info->harq_buffer_size = 0; > > > +#endif > > > } > > > > > > + > > > static const struct rte_bbdev_ops acc100_bbdev_ops = { > > > .setup_queues = acc100_setup_queues, > > > .close = acc100_dev_close, > > > @@ -696,6 +743,1577 @@ > > > {.device_id = 0}, > > > }; > > > > > > +/* Read flag value 0/1 from bitmap */ static inline bool > > > +check_bit(uint32_t bitmap, uint32_t bitmask) { > > > + return bitmap & bitmask; > > > +} > > > + > > > +static inline char * > > > +mbuf_append(struct rte_mbuf *m_head, struct rte_mbuf *m, uint16_t > > > +len) { > > > + if (unlikely(len > rte_pktmbuf_tailroom(m))) > > > + return NULL; > > > + > > > + char *tail = (char *)m->buf_addr + m->data_off + m->data_len; > > > + m->data_len = (uint16_t)(m->data_len + len); > > > + m_head->pkt_len = (m_head->pkt_len + len); > > > + return tail; > > > +} > > > > Is it reasonable to direct add data_len of rte_mbuf? > > > > Do you suggest to add directly without checking there is enough room in the > mbuf? We cannot rely on the application providing mbuf with enough > tailroom.
What I mentioned is this changes about mbuf should move to librte_mbuf. And it's better to align Olivier Matz. > In case you ask about the 2 mbufs, this is because this function is used to > also > support segmented memory made of multiple mbufs segments. > Note that this function is also used in other existing bbdev PMDs. In case you > believe there is a better way to do this, we can certainly discuss and change > these in several PMDs through another serie. > > Thanks for all the reviews and useful comments. > Nic