feat: 调度、任务及pm解耦
pm中冻结线程的操作,融合至OsSchedSuspend和OsSchedResume, 使得调度模块提供对应完整的方法给任务模块,做到之间的相互解耦, 方便其它调度算法的融入。 Close #I4JTN6 Signed-off-by: zhushengle <zhushengle@huawei.com> Change-Id: Ifde7077166a2fe67e7246fa68f777844640d67db
This commit is contained in:
@@ -657,41 +657,6 @@ UINT32 LOS_PmLockRelease(const CHAR *name)
|
||||
return ret;
|
||||
}
|
||||
|
||||
VOID OsPmFreezeTaskUnsafe(UINT32 taskID)
|
||||
{
|
||||
UINT64 responseTime;
|
||||
LosTaskCB *taskCB = OS_TCB_FROM_TID(taskID);
|
||||
|
||||
responseTime = GET_SORTLIST_VALUE(&taskCB->sortList);
|
||||
OsDeleteSortLink(&taskCB->sortList, OS_SORT_LINK_TASK);
|
||||
SET_SORTLIST_VALUE(&taskCB->sortList, responseTime);
|
||||
taskCB->taskStatus |= OS_TASK_FALG_FREEZE;
|
||||
return;
|
||||
}
|
||||
|
||||
VOID OsPmUnfreezeTaskUnsafe(UINT32 taskID)
|
||||
{
|
||||
LosTaskCB *taskCB = OS_TCB_FROM_TID(taskID);
|
||||
UINT64 currTime, responseTime;
|
||||
UINT32 remainTick;
|
||||
|
||||
taskCB->taskStatus &= ~OS_TASK_FALG_FREEZE;
|
||||
currTime = OsGetCurrSchedTimeCycle();
|
||||
responseTime = GET_SORTLIST_VALUE(&taskCB->sortList);
|
||||
if (responseTime > currTime) {
|
||||
remainTick = ((responseTime - currTime) + OS_CYCLE_PER_TICK - 1) / OS_CYCLE_PER_TICK;
|
||||
OsAdd2SortLink(&taskCB->sortList, currTime, remainTick, OS_SORT_LINK_TASK);
|
||||
return;
|
||||
}
|
||||
|
||||
SET_SORTLIST_VALUE(&taskCB->sortList, OS_SORT_LINK_INVALID_TIME);
|
||||
if (taskCB->taskStatus & OS_TASK_STATUS_PEND) {
|
||||
LOS_ListDelete(&taskCB->pendList);
|
||||
}
|
||||
taskCB->taskStatus &= ~(OS_TASK_STATUS_DELAY | OS_TASK_STATUS_PEND_TIME | OS_TASK_STATUS_PEND);
|
||||
return;
|
||||
}
|
||||
|
||||
STATIC VOID OsPmSwtmrHandler(UINT32 arg)
|
||||
{
|
||||
const CHAR *name = (const CHAR *)arg;
|
||||
|
||||
@@ -233,43 +233,11 @@ UINT32 OsPmInit(VOID);
|
||||
* <ul><li>los_pm.h: the header file that contains the API declaration.</li></ul>
|
||||
* @see
|
||||
*/
|
||||
#if (LOSCFG_KERNEL_PM == 1)
|
||||
BOOL OsIsPmMode(VOID);
|
||||
|
||||
/**
|
||||
* @ingroup los_pm
|
||||
* @brief Freeze delay tasks, internal interfaces between modules.
|
||||
*
|
||||
* @par Description:
|
||||
* This API is used to freeze delay tasks.
|
||||
*
|
||||
* @attention None.
|
||||
*
|
||||
* @param taskID [IN] task ID.
|
||||
*
|
||||
* @retval None.
|
||||
* @par Dependency:
|
||||
* <ul><li>los_pm.h: the header file that contains the API declaration.</li></ul>
|
||||
* @see OsPmUnfreezeTaskUnsafe
|
||||
*/
|
||||
VOID OsPmFreezeTaskUnsafe(UINT32 taskID);
|
||||
|
||||
/**
|
||||
* @ingroup los_pm
|
||||
* @brief Unfreeze delayed tasks, internal interface between modules.
|
||||
*
|
||||
* @par Description:
|
||||
* This API is used to unfreeze delayed tasks.
|
||||
*
|
||||
* @attention None.
|
||||
*
|
||||
* @param taskID [IN] task ID.
|
||||
*
|
||||
* @retval None.
|
||||
* @par Dependency:
|
||||
* <ul><li>los_pm.h: the header file that contains the API declaration.</li></ul>
|
||||
* @see OsPmFreezeTaskUnsafe
|
||||
*/
|
||||
VOID OsPmUnfreezeTaskUnsafe(UINT32 taskID);
|
||||
#else
|
||||
#define OsIsPmMode() (0)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @ingroup los_pm
|
||||
|
||||
Reference in New Issue
Block a user