!193 fix: 延时队列为NULL时,返回的响应时间为64位最大值,导致无法更新tick timer的响应周期

Merge pull request !193 from zhushengle/sched
This commit is contained in:
openharmony_ci 2021-06-18 10:09:31 +08:00 committed by Gitee
commit 0f7d2fcf07
3 changed files with 5 additions and 5 deletions

View File

@ -42,6 +42,8 @@ extern "C" {
#endif /* __cplusplus */ #endif /* __cplusplus */
#endif /* __cplusplus */ #endif /* __cplusplus */
#define OS_SCHED_MAX_RESPONSE_TIME (UINT64)(((UINT64)-1) - 1U)
extern UINT32 g_taskScheduled; extern UINT32 g_taskScheduled;
typedef BOOL (*SchedScan)(VOID); typedef BOOL (*SchedScan)(VOID);

View File

@ -41,12 +41,10 @@ extern "C" {
#endif /* __cplusplus */ #endif /* __cplusplus */
#endif /* __cplusplus */ #endif /* __cplusplus */
#define OS_64BIT_MAX 0xFFFFFFFFFFFFFFFFULL
#define OS_PRIORITY_QUEUE_NUM 32 #define OS_PRIORITY_QUEUE_NUM 32
#define PRIQUEUE_PRIOR0_BIT 0x80000000U #define PRIQUEUE_PRIOR0_BIT 0x80000000U
#define OS_SCHED_TIME_SLICES ((LOSCFG_BASE_CORE_TIMESLICE_TIMEOUT * OS_SYS_NS_PER_US) / OS_NS_PER_CYCLE) #define OS_SCHED_TIME_SLICES ((LOSCFG_BASE_CORE_TIMESLICE_TIMEOUT * OS_SYS_NS_PER_US) / OS_NS_PER_CYCLE)
#define OS_TIME_SLICE_MIN (INT32)((50 * OS_SYS_NS_PER_US) / OS_NS_PER_CYCLE) /* 50us */ #define OS_TIME_SLICE_MIN (INT32)((50 * OS_SYS_NS_PER_US) / OS_NS_PER_CYCLE) /* 50us */
#define OS_SCHED_MAX_RESPONSE_TIME (UINT64)(OS_64BIT_MAX - 1U)
#define OS_TICK_RESPONSE_TIME_MAX LOSCFG_BASE_CORE_TICK_RESPONSE_MAX #define OS_TICK_RESPONSE_TIME_MAX LOSCFG_BASE_CORE_TICK_RESPONSE_MAX
#if (LOSCFG_BASE_CORE_TICK_RESPONSE_MAX == 0) #if (LOSCFG_BASE_CORE_TICK_RESPONSE_MAX == 0)
#error "Must specify the maximum value that tick timer counter supports!" #error "Must specify the maximum value that tick timer counter supports!"
@ -184,7 +182,7 @@ VOID OsSchedUpdateExpireTime(UINT64 startTime)
INT32 timeSlice = (runTask->timeSlice <= OS_TIME_SLICE_MIN) ? OS_SCHED_TIME_SLICES : runTask->timeSlice; INT32 timeSlice = (runTask->timeSlice <= OS_TIME_SLICE_MIN) ? OS_SCHED_TIME_SLICES : runTask->timeSlice;
endTime = startTime + timeSlice; endTime = startTime + timeSlice;
} else { } else {
endTime = OS_SCHED_MAX_RESPONSE_TIME; endTime = OS_SCHED_MAX_RESPONSE_TIME - OS_CYCLE_PER_TICK;
} }
OsSchedSetNextExpireTime(startTime, runTask->taskID, endTime); OsSchedSetNextExpireTime(startTime, runTask->taskID, endTime);
} }
@ -488,7 +486,7 @@ BOOL OsSchedTaskSwitch(VOID)
if (newTask->taskID != g_idleTaskID) { if (newTask->taskID != g_idleTaskID) {
endTime = newTask->startTime + newTask->timeSlice; endTime = newTask->startTime + newTask->timeSlice;
} else { } else {
endTime = OS_SCHED_MAX_RESPONSE_TIME; endTime = OS_SCHED_MAX_RESPONSE_TIME - OS_CYCLE_PER_TICK;
} }
OsSchedSetNextExpireTime(newTask->startTime, newTask->taskID, endTime); OsSchedSetNextExpireTime(newTask->startTime, newTask->taskID, endTime);

View File

@ -92,7 +92,7 @@ STATIC INLINE UINT64 OsGetSortLinkNextExpireTime(SortLinkAttribute *sortHeader,
LOS_DL_LIST *list = head->pstNext; LOS_DL_LIST *list = head->pstNext;
if (LOS_ListEmpty(head)) { if (LOS_ListEmpty(head)) {
return (UINT64)-1; return OS_SCHED_MAX_RESPONSE_TIME - OS_CYCLE_PER_TICK;
} }
do { do {