From 67ac8c4c586adc371ece56700fd42371ca7fc885 Mon Sep 17 00:00:00 2001 From: zhushengle Date: Sat, 14 Aug 2021 11:21:46 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BB=A5g=5FsysSchedStartTime=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E4=B8=BA0=E5=88=A4=E6=96=AD=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E8=BD=B4=E6=98=AF=E5=90=A6=E7=94=9F=E6=95=88=E5=AD=98=E5=9C=A8?= =?UTF-8?q?=E6=9E=81=E9=99=90=E5=9C=BA=E6=99=AF=E5=AF=BC=E8=87=B4=E8=B0=83?= =?UTF-8?q?=E5=BA=A6=E6=97=B6=E9=97=B4=E4=B8=8D=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 初始化调度时间不以g_sysSchedStartTime是否为0为界限,而以g_sysSchedStartTime是否为64位最大值 为界限,避免特殊以下场景:调度开启时系统时间为0,导致初始化的g_sysSchedStartTime还是0,导致 调度启动后获取的调度时间轴始终为0. Close #I45HP5 Signed-off-by: zhushengle Change-Id: I5272c79f06b53361ee7b931081d3a3276db59073 --- kernel/base/include/los_sched_pri.h | 6 +++--- kernel/base/sched/sched_sq/los_sched.c | 9 +++++---- kernel/include/los_typedef.h | 1 + 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/kernel/base/include/los_sched_pri.h b/kernel/base/include/los_sched_pri.h index 698cf545..98019369 100644 --- a/kernel/base/include/los_sched_pri.h +++ b/kernel/base/include/los_sched_pri.h @@ -56,11 +56,11 @@ extern UINT64 g_sysSchedStartTime; STATIC INLINE UINT64 OsGetCurrSchedTimeCycle(VOID) { - if (g_sysSchedStartTime == 0) { - return g_sysSchedStartTime; + if (g_sysSchedStartTime != OS_64BIT_MAX) { + return (HalClockGetCycles() - g_sysSchedStartTime); } - return (HalClockGetCycles() - g_sysSchedStartTime); + return 0; } STATIC INLINE VOID OsSchedIrqUpdateUsedTime(VOID) diff --git a/kernel/base/sched/sched_sq/los_sched.c b/kernel/base/sched/sched_sq/los_sched.c index 57b48c99..c3338fb0 100644 --- a/kernel/base/sched/sched_sq/los_sched.c +++ b/kernel/base/sched/sched_sq/los_sched.c @@ -48,7 +48,6 @@ #endif #define OS_32BIT_MAX 0xFFFFFFFFUL -#define OS_64BIT_MAX 0xFFFFFFFFFFFFFFFFULL #define OS_SCHED_FIFO_TIMEOUT 0x7FFFFFFF #define OS_PRIORITY_QUEUE_NUM 32 #define PRIQUEUE_PRIOR0_BIT 0x80000000U @@ -73,7 +72,7 @@ typedef struct { STATIC Sched *g_sched = NULL; STATIC UINT64 g_schedTickMaxResponseTime; -UINT64 g_sysSchedStartTime = 0; +UINT64 g_sysSchedStartTime = OS_64BIT_MAX; #ifdef LOSCFG_SCHED_TICK_DEBUG #define OS_SCHED_DEBUG_DATA_NUM 1000 @@ -253,7 +252,7 @@ UINT32 OsSchedSetTickTimerType(UINT32 timerType) STATIC VOID OsSchedSetStartTime(UINT64 currCycle) { - if (g_sysSchedStartTime == 0) { + if (g_sysSchedStartTime == OS_64BIT_MAX) { g_sysSchedStartTime = currCycle; } } @@ -889,7 +888,9 @@ VOID OsSchedStart(VOID) SCHEDULER_LOCK(intSave); - OsTickStart(); + if (cpuid == 0) { + OsTickStart(); + } LosTaskCB *newTask = OsGetTopTask(); LosProcessCB *newProcess = OS_PCB_FROM_PID(newTask->processID); diff --git a/kernel/include/los_typedef.h b/kernel/include/los_typedef.h index fab5a780..18ec7af4 100644 --- a/kernel/include/los_typedef.h +++ b/kernel/include/los_typedef.h @@ -188,6 +188,7 @@ typedef size_t BOOL; #define OS_ERROR (UINT32)(-1) #define OS_INVALID (UINT32)(-1) #define OS_INVALID_VALUE ((UINT32)0xFFFFFFFF) +#define OS_64BIT_MAX 0xFFFFFFFFFFFFFFFFULL #define asm __asm #ifdef typeof