diff --git a/kernel/include/los_sched.h b/kernel/include/los_sched.h index e7ac66e1..f6f56e6a 100644 --- a/kernel/include/los_sched.h +++ b/kernel/include/los_sched.h @@ -47,6 +47,8 @@ extern "C" { extern UINT32 g_taskScheduled; typedef BOOL (*SchedScan)(VOID); +VOID OsSchedResetSchedResponseTime(UINT64 responseTime); + VOID OsSchedUpdateSchedTimeBase(VOID); UINT64 OsGetCurrSchedTimeCycle(VOID); diff --git a/kernel/src/los_sched.c b/kernel/src/los_sched.c index d0b27435..defa39c2 100644 --- a/kernel/src/los_sched.c +++ b/kernel/src/los_sched.c @@ -69,6 +69,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; @@ -497,6 +504,10 @@ BOOL OsSchedTaskSwitch(VOID) } else { endTime = OS_SCHED_MAX_RESPONSE_TIME - OS_CYCLE_PER_TICK; } + + 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 e1783063..f479996b 100644 --- a/kernel/src/los_sortlink.c +++ b/kernel/src/los_sortlink.c @@ -155,6 +155,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);