From b035f5bf7c103731e4f22a95d67b34b9a100f3d2 Mon Sep 17 00:00:00 2001 From: zhushengle Date: Fri, 20 Aug 2021 09:12:11 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=88=A0=E9=99=A4=E5=BB=B6=E6=97=B6?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E5=90=8E=EF=BC=8C=E5=AD=98=E5=9C=A8=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E6=97=A0=E6=B3=95=E6=9C=89=E6=95=88=E5=88=B7=E6=96=B0?= =?UTF-8?q?=E7=9A=84=E5=9C=BA=E6=99=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhushengle Change-Id: I0ce80252db6fd6ff8621ee87df0a7ecb12a1843f --- kernel/include/los_sched.h | 2 ++ kernel/src/los_sched.c | 11 +++++++++++ kernel/src/los_sortlink.c | 1 + 3 files changed, 14 insertions(+) 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);