Segmentation fault in nr_generate_dci
Backtrace:
0x0000555555fe90ae in c16mulRealShift (Shift=15, b=<optimized out>, a=...) at /home/ubuntu/bpodrygajlo/openairinterface5g/openair1/PHY/TOOLS/tools_defs.h:221
221 return (c16_t){.r = (int16_t)((a.r * b) >> Shift), .i = (int16_t)((a.i * b) >> Shift)};
(gdb) bt
#0 0x0000555555fe90ae in c16mulRealShift (Shift=15, b=<optimized out>, a=...)
at /home/ubuntu/bpodrygajlo/openairinterface5g/openair1/PHY/TOOLS/tools_defs.h:221
#1 nr_generate_dci (gNB=<optimized out>, pdcch_pdu_rel15=<optimized out>, txdataF_offset=315392,
frame_parms=0x7ffff74455a0, slot=<optimized out>)
at /home/ubuntu/bpodrygajlo/openairinterface5g/openair1/PHY/NR_TRANSPORT/nr_dci.c:204
#2 0x0000555555fe9cc7 in nr_generate_dci_top (msgTx=msgTx@entry=0x555565f26ca0, slot=slot@entry=11,
txdataF_offset=txdataF_offset@entry=315392)
at /home/ubuntu/bpodrygajlo/openairinterface5g/openair1/PHY/NR_TRANSPORT/nr_dci.c:253
#3 0x0000555555fcead2 in phy_procedures_gNB_TX (msgTx=msgTx@entry=0x555565f26ca0, frame=frame@entry=262,
slot=slot@entry=11, do_meas=do_meas@entry=1)
at /home/ubuntu/bpodrygajlo/openairinterface5g/openair1/SCHED_NR/phy_procedures_nr_gNB.c:242
#4 0x0000555555f95924 in tx_func (info=0x555565f26ca0)
at /home/ubuntu/bpodrygajlo/openairinterface5g/executables/nr-gnb.c:129
#5 L1_tx_thread (arg=0x7ffff7445010)
at /home/ubuntu/bpodrygajlo/openairinterface5g/executables/nr-gnb.c:174
#6 0x00007ffff7294ac3 in start_thread (arg=<optimized out>) at ./nptl/pthread_create.c:442
#7 0x00007ffff7326850 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81
This is most likely due to the fact that nr_fill_reg_list is not filling the indices correctly. from gdb:
dmrs_idx = -1073594368
This can be triggered either by using !3055 (merged) or by forcing agg level 16 with this diff in the gNB:
diff --git a/openair2/RRC/NR/nr_rrc_config.c b/openair2/RRC/NR/nr_rrc_config.c
index d2266a74f3..62a6266146 100644
--- a/openair2/RRC/NR/nr_rrc_config.c
+++ b/openair2/RRC/NR/nr_rrc_config.c
@@ -236,13 +236,14 @@ NR_SearchSpace_t *rrc_searchspace_config(bool is_common, int searchspaceid, int
if (is_common) {
ss->nrofCandidates->aggregationLevel2 = NR_SearchSpace__nrofCandidates__aggregationLevel2_n0;
ss->nrofCandidates->aggregationLevel4 = NR_SearchSpace__nrofCandidates__aggregationLevel4_n1;
+ ss->nrofCandidates->aggregationLevel16 = NR_SearchSpace__nrofCandidates__aggregationLevel16_n0;
} else {
- ss->nrofCandidates->aggregationLevel2 = NR_SearchSpace__nrofCandidates__aggregationLevel2_n2;
+ ss->nrofCandidates->aggregationLevel2 = NR_SearchSpace__nrofCandidates__aggregationLevel2_n0;
ss->nrofCandidates->aggregationLevel4 = NR_SearchSpace__nrofCandidates__aggregationLevel4_n0;
+ ss->nrofCandidates->aggregationLevel16 = NR_SearchSpace__nrofCandidates__aggregationLevel16_n1;
}
ss->nrofCandidates->aggregationLevel8 = NR_SearchSpace__nrofCandidates__aggregationLevel8_n0;
}
- ss->nrofCandidates->aggregationLevel16 = NR_SearchSpace__nrofCandidates__aggregationLevel16_n0;
ss->searchSpaceType = calloc(1,sizeof(*ss->searchSpaceType));
if (is_common) {
ss->searchSpaceType->present = NR_SearchSpace__searchSpaceType_PR_common;