From: pborla Date: Sun, 17 Dec 2023 16:31:33 +0000 (+0530) Subject: [Epic-ID: ODUHIGH-517][Task-ID: ODUHIGH-551][SubTask-Id: ODUHIGH-552] Multi UE| ... X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=a6ec34e2927a6167f62cf18fe60c46113bcfc019;p=o-du%2Fl2.git [Epic-ID: ODUHIGH-517][Task-ID: ODUHIGH-551][SubTask-Id: ODUHIGH-552] Multi UE| DL Allocation error Change-Id: I7a76ca787147dec14174da5f641f8ed35af8e29b Signed-off-by: svaidhya --- diff --git a/src/5gnrsch/sch_crc.c b/src/5gnrsch/sch_crc.c index abd9f4def..442d552b0 100644 --- a/src/5gnrsch/sch_crc.c +++ b/src/5gnrsch/sch_crc.c @@ -44,18 +44,18 @@ **/ uint8_t SchProcCrcInd(Pst *pst, CrcIndInfo *crcInd) { - uint16_t count=0; + uint16_t crcCnt=0; uint8_t ueId=0; SchUlHqProcCb *hqP = NULLP; Inst schInst = pst->dstInst - SCH_INST_START; SchCellCb *cell = schCb[schInst].cells[schInst]; - while(count numCrcInd) + while(crcCnt < crcInd->numCrcInd) { GET_UE_ID(crcInd->crnti, ueId); if (cell->raCb[ueId-1].raState == SCH_RA_STATE_MSG3_PENDING) { - if (crcInd->crcInd[count]) + if (crcInd->crcInd[crcCnt]) { /* failure case*/ if (cell->raCb[ueId-1].msg3HqProc.tbInfo.txCntr < cell->maxMsg3Tx) @@ -81,21 +81,24 @@ uint8_t SchProcCrcInd(Pst *pst, CrcIndInfo *crcInd) if (cell->ueCb[ueId-1].hqUlmap[crcInd->timingInfo.slot]->hqList.count == 0) { DU_LOG("\n ERROR no harq stored in ul hq map at slot %d ue id %d\n",crcInd->timingInfo.slot, ueId); + crcCnt++; continue; } if (cell->ueCb[ueId-1].hqUlmap[crcInd->timingInfo.slot]->hqList.first == 0) { DU_LOG("\n ERROR NULL harq stored in ul hq map at slot %d ue id %d\n",crcInd->timingInfo.slot, ueId); + crcCnt++; continue; } hqP = (SchUlHqProcCb*) cell->ueCb[ueId-1].hqUlmap[crcInd->timingInfo.slot]->hqList.first->node; if(hqP == NULLP) { + crcCnt++; continue; } else { - if (crcInd->crcInd[count]) + if (crcInd->crcInd[crcCnt]) { /* failure case*/ schUlHqProcessNack(hqP); @@ -108,7 +111,7 @@ uint8_t SchProcCrcInd(Pst *pst, CrcIndInfo *crcInd) } cmLListDelFrm(&(cell->ueCb[ueId-1].hqUlmap[crcInd->timingInfo.slot]->hqList), &hqP->ulSlotLnk); } - count++; + crcCnt++; } return ROK; } diff --git a/src/5gnrsch/sch_fcfs.c b/src/5gnrsch/sch_fcfs.c index 28cc528a3..e949f3b10 100644 --- a/src/5gnrsch/sch_fcfs.c +++ b/src/5gnrsch/sch_fcfs.c @@ -1153,19 +1153,25 @@ void schFcfsScheduleSlot(SchCellCb *cell, SlotTimingInfo *slotInd, Inst schInst) SchUlHqProcCb *ulHqP = NULLP; CmLList *pendingUeNode; CmLList *node; - uint8_t ueId; + uint8_t ueId, ueCount = 0; bool isRarPending = false, isRarScheduled = false; bool isMsg4Pending = false, isMsg4Scheduled = false; bool isDlMsgPending = false, isDlMsgScheduled = false; bool isUlGrantPending = false, isUlGrantScheduled = false; - bool isNodeFreed = false; fcfsCell = (SchFcfsCellCb *)cell->schSpcCell; - + /* Select first UE in the linked list to be scheduled next */ pendingUeNode = fcfsCell->ueToBeScheduled.first; - while(pendingUeNode) + ueCount = fcfsCell->ueToBeScheduled.count; + + while(pendingUeNode && ueCount > 0) { + /*Since Multi-UE perTTI is not supported, re-init following parameters.*/ + isRarPending = false; isRarScheduled = false; + isMsg4Pending = false; isMsg4Scheduled = false; + isDlMsgPending = false; isDlMsgScheduled = false; + isUlGrantPending = false; isUlGrantScheduled = false; if(pendingUeNode->node) { ueId = *(uint8_t *)(pendingUeNode->node); @@ -1216,7 +1222,6 @@ void schFcfsScheduleSlot(SchCellCb *cell, SlotTimingInfo *slotInd, Inst schInst) if(isRarScheduled || isMsg4Scheduled) { schFcfsRemoveUeFrmScheduleLst(cell, pendingUeNode); - isNodeFreed = true; } /* If RAR/MSG4 is pending but couldnt be scheduled then, * put this UE at the end of linked list to be scheduled later */ @@ -1310,34 +1315,32 @@ void schFcfsScheduleSlot(SchCellCb *cell, SlotTimingInfo *slotInd, Inst schInst) } } - if(!isUlGrantPending && !isDlMsgPending) - { - /* No action required */ - } - else if((isUlGrantPending && !isUlGrantScheduled) || (isDlMsgPending && !isDlMsgScheduled)) + if(isUlGrantPending || isDlMsgPending) { - cmLListAdd2Tail(&fcfsCell->ueToBeScheduled, cmLListDelFrm(&fcfsCell->ueToBeScheduled, pendingUeNode)); - } - else - { - schFcfsRemoveUeFrmScheduleLst(cell, pendingUeNode); - isNodeFreed = true; + if((isUlGrantPending && !isUlGrantScheduled) || (isDlMsgPending && !isDlMsgScheduled)) + { + cmLListAdd2Tail(&fcfsCell->ueToBeScheduled, cmLListDelFrm(&fcfsCell->ueToBeScheduled, pendingUeNode)); + } + else + { + schFcfsRemoveUeFrmScheduleLst(cell, pendingUeNode); + } } } } - if(cell->schDlSlotInfo[slotInd->slot]->prbAlloc.numPrbAlloc >= MAX_NUM_RB) + if(!isUlGrantPending && !isDlMsgPending && !isRarPending && !isMsg4Pending) { - DU_LOG("\nINFO --> SCH: No PRB available to proceed with next UE"); - return; + DU_LOG("\nERROR --> SCH: In SchFcfsScheduleSlot, UE:%d is wrongly queued\ + in Pending UE List without any actions, Removing the UE from the list",ueId); + schFcfsRemoveUeFrmScheduleLst(cell, pendingUeNode); } - if(isNodeFreed == false) - { - pendingUeNode= pendingUeNode->next; - } - else + if(cell->schDlSlotInfo[slotInd->slot]->prbAlloc.numPrbAlloc >= MAX_NUM_RB) { - pendingUeNode = fcfsCell->ueToBeScheduled.first; + DU_LOG("\nINFO --> SCH: No PRB available to proceed with next UE"); + return; } + pendingUeNode = fcfsCell->ueToBeScheduled.first; + ueCount--; } }