From 300346c43afffa413b21c24308acdeff6366f596 Mon Sep 17 00:00:00 2001 From: Thomas Schlichter Date: Fri, 2 May 2025 09:30:39 +0000 Subject: [PATCH] nrLDPC_coding_t2: replace global q_bufs by struct data_buffers on stack --- .../nrLDPC_coding_t2/nrLDPC_coding_t2.c | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/openair1/PHY/CODING/nrLDPC_coding/nrLDPC_coding_t2/nrLDPC_coding_t2.c b/openair1/PHY/CODING/nrLDPC_coding/nrLDPC_coding_t2/nrLDPC_coding_t2.c index 17f1dac69c..04e41268f8 100644 --- a/openair1/PHY/CODING/nrLDPC_coding/nrLDPC_coding_t2/nrLDPC_coding_t2.c +++ b/openair1/PHY/CODING/nrLDPC_coding/nrLDPC_coding_t2/nrLDPC_coding_t2.c @@ -96,7 +96,6 @@ struct test_op_params { uint16_t num_lcores; int vector_mask; rte_atomic16_t sync; - struct data_buffers q_bufs[RTE_MAX_NUMA_NODES][MAX_QUEUES]; }; /* Contains per lcore params */ @@ -113,6 +112,7 @@ struct thread_params { struct test_op_params *op_params; struct rte_bbdev_dec_op *dec_ops[MAX_BURST]; struct rte_bbdev_enc_op *enc_ops[MAX_BURST]; + struct data_buffers *data_buffers; }; static uint16_t nb_segments_decoding(nrLDPC_slot_decoding_parameters_t *nrLDPC_slot_decoding_parameters) { @@ -703,7 +703,7 @@ pmd_lcore_ldpc_dec(void *arg) struct rte_bbdev_dec_op **ops_deq; ops_enq = (struct rte_bbdev_dec_op **)rte_calloc("struct rte_bbdev_dec_op **ops_enq", num_segments, sizeof(struct rte_bbdev_dec_op *), RTE_CACHE_LINE_SIZE); ops_deq = (struct rte_bbdev_dec_op **)rte_calloc("struct rte_bbdev_dec_op **ops_dec", num_segments, sizeof(struct rte_bbdev_dec_op *), RTE_CACHE_LINE_SIZE); - struct data_buffers *bufs = NULL; + struct data_buffers *bufs = tp->data_buffers; uint16_t h, i, j; int ret; struct rte_bbdev_info info; @@ -712,7 +712,6 @@ pmd_lcore_ldpc_dec(void *arg) AssertFatal((num_segments < MAX_BURST), "BURST_SIZE should be <= %u", MAX_BURST); rte_bbdev_info_get(tp->dev_id, &info); - bufs = &tp->op_params->q_bufs[GET_SOCKET(info.socket_id)][queue_id]; while (rte_atomic16_read(&tp->op_params->sync) == SYNC_WAIT) rte_pause(); @@ -793,13 +792,13 @@ static int pmd_lcore_ldpc_enc(void *arg) ops_deq = (struct rte_bbdev_enc_op **)rte_calloc("struct rte_bbdev_dec_op **ops_dec", num_segments, sizeof(struct rte_bbdev_enc_op *), RTE_CACHE_LINE_SIZE); struct rte_bbdev_info info; int ret; - struct data_buffers *bufs = NULL; + struct data_buffers *bufs = tp->data_buffers; uint16_t num_to_enq; AssertFatal((num_segments < MAX_BURST), "BURST_SIZE should be <= %u", MAX_BURST); rte_bbdev_info_get(tp->dev_id, &info); - bufs = &tp->op_params->q_bufs[GET_SOCKET(info.socket_id)][queue_id]; + while (rte_atomic16_read(&tp->op_params->sync) == SYNC_WAIT) rte_pause(); ret = rte_bbdev_enc_op_alloc_bulk(tp->op_params->mp_enc, ops_enq, num_segments); @@ -840,6 +839,7 @@ static int pmd_lcore_ldpc_enc(void *arg) // based on DPDK BBDEV throughput_pmd_lcore_dec int start_pmd_dec(struct active_device *ad, struct test_op_params *op_params, + struct data_buffers *data_buffers, nrLDPC_slot_decoding_parameters_t *nrLDPC_slot_decoding_parameters) { int ret; @@ -857,6 +857,7 @@ int start_pmd_dec(struct active_device *ad, t_params[0].dev_id = ad->dev_id; t_params[0].lcore_id = rte_lcore_id(); t_params[0].op_params = op_params; + t_params[0].data_buffers = data_buffers; t_params[0].queue_id = ad->dec_queue; t_params[0].iter_count = 0; t_params[0].nrLDPC_slot_decoding_parameters = nrLDPC_slot_decoding_parameters; @@ -868,6 +869,7 @@ int start_pmd_dec(struct active_device *ad, t_params[used_cores].dev_id = ad->dev_id; t_params[used_cores].lcore_id = lcore_id; t_params[used_cores].op_params = op_params; + t_params[used_cores].data_buffers = data_buffers; t_params[used_cores].queue_id = ad->queue_ids[used_cores]; t_params[used_cores].iter_count = 0; t_params[used_cores].nrLDPC_slot_decoding_parameters = nrLDPC_slot_decoding_parameters; @@ -885,6 +887,7 @@ int start_pmd_dec(struct active_device *ad, // based on DPDK BBDEV throughput_pmd_lcore_enc int32_t start_pmd_enc(struct active_device *ad, struct test_op_params *op_params, + struct data_buffers *data_buffers, nrLDPC_slot_encoding_parameters_t *nrLDPC_slot_encoding_parameters) { unsigned int lcore_id, used_cores = 0; @@ -896,6 +899,7 @@ int32_t start_pmd_enc(struct active_device *ad, t_params[0].dev_id = ad->dev_id; t_params[0].lcore_id = rte_lcore_id() + 1; t_params[0].op_params = op_params; + t_params[0].data_buffers = data_buffers; t_params[0].queue_id = ad->enc_queue; t_params[0].iter_count = 0; t_params[0].nrLDPC_slot_encoding_parameters = nrLDPC_slot_encoding_parameters; @@ -907,6 +911,7 @@ int32_t start_pmd_enc(struct active_device *ad, t_params[used_cores].dev_id = ad->dev_id; t_params[used_cores].lcore_id = lcore_id; t_params[used_cores].op_params = op_params; + t_params[used_cores].data_buffers = data_buffers; t_params[used_cores].queue_id = ad->queue_ids[1]; t_params[used_cores].iter_count = 0; t_params[used_cores].nrLDPC_slot_encoding_parameters = nrLDPC_slot_encoding_parameters; @@ -1021,9 +1026,8 @@ int32_t nrLDPC_coding_decoder(nrLDPC_slot_decoding_parameters_t *nrLDPC_slot_dec int socket_id = GET_SOCKET(info.socket_id); // fill_queue_buffers -> init_op_data_objs struct rte_mempool *mbuf_pools[DATA_NUM_TYPES] = {ad->in_mbuf_pool, ad->hard_out_mbuf_pool}; - uint8_t queue_id = ad->dec_queue; - struct rte_bbdev_op_data **queue_ops[DATA_NUM_TYPES] = {&op_params->q_bufs[socket_id][queue_id].inputs, - &op_params->q_bufs[socket_id][queue_id].hard_outputs}; + struct data_buffers data_buffers; + struct rte_bbdev_op_data **queue_ops[DATA_NUM_TYPES] = {&data_buffers.inputs, &data_buffers.hard_outputs}; int offset = 0; for(uint16_t h = 0; h < nrLDPC_slot_decoding_parameters->nb_TBs; ++h){ @@ -1051,7 +1055,7 @@ int32_t nrLDPC_coding_decoder(nrLDPC_slot_decoding_parameters_t *nrLDPC_slot_dec AssertFatal(ret == 0, "Couldn't init rte_bbdev_op_data structs"); } - ret = start_pmd_dec(ad, op_params, nrLDPC_slot_decoding_parameters); + ret = start_pmd_dec(ad, op_params, &data_buffers, nrLDPC_slot_decoding_parameters); if (ret < 0) { LOG_E(PHY, "Couldn't start pmd dec\n"); } @@ -1082,9 +1086,8 @@ int32_t nrLDPC_coding_encoder(nrLDPC_slot_encoding_parameters_t *nrLDPC_slot_enc int socket_id = GET_SOCKET(info.socket_id); // fill_queue_buffers -> init_op_data_objs struct rte_mempool *mbuf_pools[DATA_NUM_TYPES] = {ad->in_mbuf_pool, ad->hard_out_mbuf_pool}; - uint8_t queue_id = ad->enc_queue; - struct rte_bbdev_op_data **queue_ops[DATA_NUM_TYPES] = {&op_params->q_bufs[socket_id][queue_id].inputs, - &op_params->q_bufs[socket_id][queue_id].hard_outputs}; + struct data_buffers data_buffers; + struct rte_bbdev_op_data **queue_ops[DATA_NUM_TYPES] = {&data_buffers.inputs, &data_buffers.hard_outputs}; for (enum op_data_type type = DATA_INPUT; type < DATA_NUM_TYPES; ++type) { ret = allocate_buffers_on_socket(queue_ops[type], num_segments * sizeof(struct rte_bbdev_op_data), socket_id); @@ -1097,7 +1100,8 @@ int32_t nrLDPC_coding_encoder(nrLDPC_slot_encoding_parameters_t *nrLDPC_slot_enc info.drv.min_alignment); AssertFatal(ret == 0, "Couldn't init rte_bbdev_op_data structs"); } - ret = start_pmd_enc(ad, op_params, nrLDPC_slot_encoding_parameters); + + ret = start_pmd_enc(ad, op_params, &data_buffers, nrLDPC_slot_encoding_parameters); for (enum op_data_type type = DATA_INPUT; type < DATA_NUM_TYPES; ++type) { for (int segment = 0; segment < num_segments; ++segment)