X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrsch%2Fsch_ue_mgr.c;h=c8bac5c27684c16066c4dcf91543d2ae7ccb8b59;hb=8e6123e23f6d831b1fe972f8229e9594a2e92237;hp=ce02fd4e2e50de5ed6aeb96ce768ef1a53da900c;hpb=a733e46886692ec1525a60243fcfe4465da6457b;p=o-du%2Fl2.git diff --git a/src/5gnrsch/sch_ue_mgr.c b/src/5gnrsch/sch_ue_mgr.c index ce02fd4e2..c8bac5c27 100644 --- a/src/5gnrsch/sch_ue_mgr.c +++ b/src/5gnrsch/sch_ue_mgr.c @@ -194,7 +194,7 @@ void fillSchUlLcCtxt(SchUlLcCtxt *ueCbLcCfg, SchLcCfg *lcCfg) uint8_t updateDedLcInfo(Snssai *snssai, SchRrmPolicy *rrmPolicy, SchLcPrbEstimate *lcPrbEst,\ bool *isDedicated) { - if(memcmp(snssai, &(rrmPolicy->memberList.snssai), sizeof(Snssai))) + if(memcmp(snssai, &(rrmPolicy->memberList.snssai), sizeof(Snssai)) == 0) { if(lcPrbEst->dedLcInfo == NULLP) { @@ -277,6 +277,7 @@ uint8_t fillSchUeCb(SchUeCb *ueCb, SchUeCfg *ueCfg) BuildK0K1Table(ueCb->cellCb, &ueCb->ueCfg.spCellCfg.servCellCfg.initDlBwp.k0K1InfoTbl, false, pdschCfg,\ ueCfg->spCellCfg.servCellCfg.initDlBwp.pdschCfg, dlDataToUlAck->dlDataToUlAckListCount,\ dlDataToUlAck->dlDataToUlAckList); + ueCb->ueCfg.spCellCfg.servCellCfg.initDlBwp.k0K1TblPrsnt = true; BuildK2InfoTable(ueCb->cellCb, ueCfg->spCellCfg.servCellCfg.initUlBwp.puschCfg.timeDomRsrcAllocList,\ ueCfg->spCellCfg.servCellCfg.initUlBwp.puschCfg.numTimeDomRsrcAlloc,\ NULLP, &ueCb->ueCfg.spCellCfg.servCellCfg.initUlBwp.k2InfoTbl); @@ -990,10 +991,11 @@ void deleteSchUeCb(SchUeCb *ueCb) * ****************************************************************/ uint8_t MacSchUeDeleteReq(Pst *pst, SchUeDelete *ueDelete) { - uint8_t idx=0, ueIdx=0, ret=ROK; - ErrorCause result; + uint8_t idx=0, ueId=0, ueIdToDel=0, ret=ROK; + ErrorCause result; SchCellCb *cellCb = NULLP; Inst inst = pst->dstInst - 1; + CmLList *node = NULL, *next = NULL; #ifdef CALL_FLOW_DEBUG_LOG DU_LOG("\nCall Flow: ENTMAC -> ENTSCH : EVENT_UE_DELETE_REQ_TO_SCH\n"); @@ -1015,10 +1017,25 @@ uint8_t MacSchUeDeleteReq(Pst *pst, SchUeDelete *ueDelete) } else { - GET_UE_IDX(ueDelete->crnti, ueIdx); - if(( cellCb->ueCb[ueIdx-1].crnti == ueDelete->crnti) && ( cellCb->ueCb[ueIdx-1].state == SCH_UE_STATE_ACTIVE)) + GET_UE_IDX(ueDelete->crnti, ueId); + if(( cellCb->ueCb[ueId-1].crnti == ueDelete->crnti) && ( cellCb->ueCb[ueId-1].state == SCH_UE_STATE_ACTIVE)) { - deleteSchUeCb(&cellCb->ueCb[ueIdx-1]); + deleteSchUeCb(&cellCb->ueCb[ueId-1]); + + /* Remove UE from ueToBeScheduled list */ + node = cellCb->ueToBeScheduled.first; + while(node) + { + next = node->next; + ueId = *(uint8_t *)node->node; + if(ueId == ueIdToDel) + { + SCH_FREE(node->node, sizeof(uint8_t)); + cmLListDelFrm(&cellCb->ueToBeScheduled, node); + break; + } + node = next; + } cellCb->numActvUe--; result = NOT_APPLICABLE; } @@ -1099,8 +1116,8 @@ uint8_t SchSendCellDeleteRspToMac(SchCellDelete *ueDelete, Inst inst, SchMacRsp void deleteSchCellCb(SchCellCb *cellCb) { uint8_t sliceIdx=0, slotIdx=0; - CmLListCp *list; - CmLList *node, *next; + CmLListCp *list=NULL; + CmLList *node=NULL, *next=NULL; if(cellCb->schDlSlotInfo) { @@ -1147,6 +1164,17 @@ void deleteSchCellCb(SchCellCb *cellCb) SCH_FREE(cellCb->cellCfg.snssai, cellCb->cellCfg.numSliceSupport*sizeof(Snssai*)); } SCH_FREE(cellCb->cellCfg.rrmPolicy, sizeof(SchRrmPolicy)); + + /* Remove all UE from ueToBeScheduled list and deallocate */ + node = cellCb->ueToBeScheduled.first; + while(node) + { + next = node->next; + SCH_FREE(node->node, sizeof(uint8_t)); + cmLListDelFrm(&cellCb->ueToBeScheduled, node); + node = next; + } + memset(cellCb, 0, sizeof(SchCellCb)); }