Skip to content

Commit

Permalink
Optimize xTaskIncrementTick for configNUMBER_OF_CORES > 1
Browse files Browse the repository at this point in the history
The original implementation only initializes the first
variable. After executing xTaskIncrementTick, the schedule
might not behave as expected.

When configUSE_PREEMPTION == 1 & configUSE_TIME_SLICING == 1,
replace setting xYieldRequiredForCore[ xCoreID ] with setting
xYieldPendings[ xCoreID ].

And when configUSE_PREEMPTION == 1, simplify the check
condition to only check xYieldPendings[ xCoreID ].

Signed-off-by: cymzier <cymb103u@cs.ccu.edu.tw>
  • Loading branch information
cymizer committed Aug 15, 2024
1 parent 40dbccf commit 0dce915
Showing 1 changed file with 2 additions and 6 deletions.
8 changes: 2 additions & 6 deletions tasks.c
Original file line number Diff line number Diff line change
Expand Up @@ -4698,10 +4698,6 @@ BaseType_t xTaskIncrementTick( void )
TickType_t xItemValue;
BaseType_t xSwitchRequired = pdFALSE;

#if ( configUSE_PREEMPTION == 1 ) && ( configNUMBER_OF_CORES > 1 )
BaseType_t xYieldRequiredForCore[ configNUMBER_OF_CORES ] = { pdFALSE };
#endif /* #if ( configUSE_PREEMPTION == 1 ) && ( configNUMBER_OF_CORES > 1 ) */

traceENTER_xTaskIncrementTick();

/* Called by the portable layer each time a tick interrupt occurs.
Expand Down Expand Up @@ -4853,7 +4849,7 @@ BaseType_t xTaskIncrementTick( void )
{
if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ pxCurrentTCBs[ xCoreID ]->uxPriority ] ) ) > 1U )
{
xYieldRequiredForCore[ xCoreID ] = pdTRUE;
xYieldPendings[ xCoreID ] = pdTRUE;
}
else
{
Expand Down Expand Up @@ -4905,7 +4901,7 @@ BaseType_t xTaskIncrementTick( void )
if( pxCurrentTCBs[ xCoreID ]->xPreemptionDisable == pdFALSE )
#endif
{
if( ( xYieldRequiredForCore[ xCoreID ] != pdFALSE ) || ( xYieldPendings[ xCoreID ] != pdFALSE ) )
if( xYieldPendings[ xCoreID ] != pdFALSE )
{
if( xCoreID == xCurrentCoreID )
{
Expand Down

0 comments on commit 0dce915

Please sign in to comment.