diff --git a/openair1/PHY/CODING/3gpplte_sse.c b/openair1/PHY/CODING/3gpplte_sse.c index 50c084d2a8bf5e8b5ca38a616158fc624e5d853b..34fcbef6d65485502023d43bdaae9c31de1b9fe4 100755 --- a/openair1/PHY/CODING/3gpplte_sse.c +++ b/openair1/PHY/CODING/3gpplte_sse.c @@ -438,10 +438,10 @@ char interleave_compact_byte(short * base_interleaver,unsigned char * input, uns uint8_t *systematic2_ptr=(uint8_t *) output; #endif #ifndef __AVX2__ - int input_length_words=n>>1; + int input_length_words=1+((n-1)>>1); #else - int input_length_words=n>>2; -#endif + int input_length_words=1+((n-1)>>2); +#endif for ( i=0; i< input_length_words ; i ++ ) { #if defined(__x86_64__) || defined(__i386__) diff --git a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c index ece06a5e090160a3603dfacda0ae05c87914608d..b510b6cb9b2d96d0c8117194efaee33ddf804960 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c @@ -996,79 +996,71 @@ int allocate_CCEs(int module_idP, int nCCE_max = mac_xface->get_nCCE_max(module_idP,CC_idP,1,subframeP); int fCCE; int i,j; - int allocation_is_feasible = 1; DCI_ALLOC_t *dci_alloc; int nCCE=0; LOG_D(MAC,"Allocate CCEs subframe %d, test %d : (common %d,uspec %d)\n",subframeP,test_onlyP,DCI_pdu->Num_common_dci,DCI_pdu->Num_ue_spec_dci); DCI_pdu->num_pdcch_symbols=1; - while (allocation_is_feasible == 1) { - init_CCE_table(module_idP,CC_idP); - nCCE=0; - - for (i=0;i<DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci;i++) { - dci_alloc = &DCI_pdu->dci_alloc[i]; - LOG_D(MAC,"Trying to allocate DCI %d/%d (%d,%d) : rnti %x, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)\n", - i,DCI_pdu->Num_common_dci+DCI_pdu->Num_ue_spec_dci, - DCI_pdu->Num_common_dci,DCI_pdu->Num_ue_spec_dci, - dci_alloc->rnti,1<<dci_alloc->L, - nCCE,nCCE_max,DCI_pdu->num_pdcch_symbols); - - if (nCCE + (1<<dci_alloc->L) > nCCE_max) { - if (DCI_pdu->num_pdcch_symbols == 3) - allocation_is_feasible = 0; - else { - DCI_pdu->num_pdcch_symbols++; - nCCE_max = mac_xface->get_nCCE_max(module_idP,CC_idP,DCI_pdu->num_pdcch_symbols,subframeP); - } - break; +try_again: + init_CCE_table(module_idP,CC_idP); + nCCE=0; + + for (i=0;i<DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci;i++) { + dci_alloc = &DCI_pdu->dci_alloc[i]; + LOG_D(MAC,"Trying to allocate DCI %d/%d (%d,%d) : rnti %x, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)\n", + i,DCI_pdu->Num_common_dci+DCI_pdu->Num_ue_spec_dci, + DCI_pdu->Num_common_dci,DCI_pdu->Num_ue_spec_dci, + dci_alloc->rnti,1<<dci_alloc->L, + nCCE,nCCE_max,DCI_pdu->num_pdcch_symbols); + + if (nCCE + (1<<dci_alloc->L) > nCCE_max) { + if (DCI_pdu->num_pdcch_symbols == 3) + goto failed; + DCI_pdu->num_pdcch_symbols++; + nCCE_max = mac_xface->get_nCCE_max(module_idP,CC_idP,DCI_pdu->num_pdcch_symbols,subframeP); + goto try_again; + } + + // number of CCEs left can potentially hold this allocation + fCCE = get_nCCE_offset(CCE_table, + 1<<(dci_alloc->L), + nCCE_max, + (i<DCI_pdu->Num_common_dci) ? 1 : 0, + dci_alloc->rnti, + subframeP); + if (fCCE == -1) { + if (DCI_pdu->num_pdcch_symbols == 3) { + LOG_I(MAC,"subframe %d: Dropping Allocation for RNTI %x\n", + subframeP,dci_alloc->rnti); + for (j=0;j<=i;j++){ + LOG_I(MAC,"DCI %d/%d (%d,%d) : rnti %x dci format %d, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)\n", + i,DCI_pdu->Num_common_dci+DCI_pdu->Num_ue_spec_dci, + DCI_pdu->Num_common_dci,DCI_pdu->Num_ue_spec_dci, + DCI_pdu->dci_alloc[j].rnti,DCI_pdu->dci_alloc[j].format, + 1<<DCI_pdu->dci_alloc[j].L, + nCCE,nCCE_max,DCI_pdu->num_pdcch_symbols); + } + goto failed; } - else { // number of CCEs left can potentially hold this allocation - if ((fCCE = get_nCCE_offset(CCE_table, - 1<<(dci_alloc->L), - nCCE_max, - (i<DCI_pdu->Num_common_dci) ? 1 : 0, - dci_alloc->rnti, - subframeP))>=0) {// the allocation is feasible, rnti rule passes - - LOG_D(MAC,"Allocating at nCCE %d\n",fCCE); - if (test_onlyP == 0) { - nCCE += (1<<dci_alloc->L); - dci_alloc->firstCCE=fCCE; - LOG_D(MAC,"Allocate CCEs subframe %d, test %d\n",subframeP,test_onlyP); - } - } // fCCE>=0 - else { - if (DCI_pdu->num_pdcch_symbols == 3) { - allocation_is_feasible = 0; - LOG_I(MAC,"subframe %d: Dropping Allocation for RNTI %x\n", - subframeP,dci_alloc->rnti); - for (j=0;j<=i;j++){ - - LOG_I(MAC,"DCI %d/%d (%d,%d) : rnti %x dci format %d, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)\n", - i,DCI_pdu->Num_common_dci+DCI_pdu->Num_ue_spec_dci, - DCI_pdu->Num_common_dci,DCI_pdu->Num_ue_spec_dci, - DCI_pdu->dci_alloc[j].rnti,DCI_pdu->dci_alloc[j].format, - 1<<DCI_pdu->dci_alloc[j].L, - nCCE,nCCE_max,DCI_pdu->num_pdcch_symbols); - } - } - else { - DCI_pdu->num_pdcch_symbols++; - nCCE_max = mac_xface->get_nCCE_max(module_idP,CC_idP,DCI_pdu->num_pdcch_symbols,subframeP); - } - break; - } // fCCE==-1 - } // nCCE <= nCCE_max - } // for i = 0 ... num_dcis - if (allocation_is_feasible==1) - return (0); - } // allocation_is_feasible == 1 + DCI_pdu->num_pdcch_symbols++; + nCCE_max = mac_xface->get_nCCE_max(module_idP,CC_idP,DCI_pdu->num_pdcch_symbols,subframeP); + goto try_again; + } // fCCE==-1 + + // the allocation is feasible, rnti rule passes + nCCE += (1<<dci_alloc->L); + LOG_D(MAC,"Allocating at nCCE %d\n",fCCE); + if (test_onlyP == 0) { + dci_alloc->firstCCE=fCCE; + LOG_D(MAC,"Allocate CCEs subframe %d, test %d\n",subframeP,test_onlyP); + } + } // for i = 0 ... num_dcis - return(-1); - + return 0; +failed: + return -1; } boolean_t CCE_allocation_infeasible(int module_idP,