diff --git a/kernel/include/los_sched.h b/kernel/include/los_sched.h index 1ff08c89..df26da61 100644 --- a/kernel/include/los_sched.h +++ b/kernel/include/los_sched.h @@ -51,6 +51,8 @@ typedef BOOL (*SchedScan)(VOID); extern UINT64 g_sysSchedStartTime; +VOID OsSchedResetSchedResponseTime(UINT64 responseTime); + VOID OsSchedUpdateSchedTimeBase(VOID); UINT64 OsGetCurrSysTimeCycle(VOID); diff --git a/kernel/src/los_sched.c b/kernel/src/los_sched.c index 6ee89119..a0b2c221 100644 --- a/kernel/src/los_sched.c +++ b/kernel/src/los_sched.c @@ -77,6 +77,13 @@ UINT32 OsSchedRealSleepTimeSet(VOID (*func)(UINT64)) return LOS_OK; } +VOID OsSchedResetSchedResponseTime(UINT64 responseTime) +{ + if (responseTime <= g_schedResponseTime) { + g_schedResponseTime = OS_SCHED_MAX_RESPONSE_TIME; + } +} + #if (LOSCFG_BASE_CORE_TICK_WTIMER == 0) STATIC UINT64 g_schedTimerBase; @@ -530,6 +537,10 @@ BOOL OsSchedTaskSwitch(VOID) } else { endTime = OS_SCHED_MAX_RESPONSE_TIME - OS_TICK_RESPONSE_PRECISION; } + + if (g_schedResponseID == runTask->taskID) { + g_schedResponseTime = OS_SCHED_MAX_RESPONSE_TIME; + } OsSchedSetNextExpireTime(newTask->startTime, newTask->taskID, endTime, TRUE); return isTaskSwitch; diff --git a/kernel/src/los_sortlink.c b/kernel/src/los_sortlink.c index 8f772f7a..8d8073f7 100644 --- a/kernel/src/los_sortlink.c +++ b/kernel/src/los_sortlink.c @@ -135,6 +135,7 @@ VOID OsDeleteSortLink(SortLinkList *node, SortLinkType type) intSave = LOS_IntLock(); if (node->responseTime != OS_SORT_LINK_INVALID_TIME) { + OsSchedResetSchedResponseTime(node->responseTime); OsDeleteNodeSortLink(sortLinkHeader, node); } LOS_IntRestore(intSave);