mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2026-05-12 11:42:57 -04:00
Fix suppressed ISR yield reporting in SMP preemption fix
Restore the original post-prvYieldForTask() yield checks so FromISR paths still report a required yield when xYieldPendings[] was already set. Keep the xTaskIncrementTick() root-cause fix and the vTaskSwitchContext() preemption-disable safety net.
This commit is contained in:
parent
c926adcf6e
commit
47691e6c90
1 changed files with 4 additions and 16 deletions
20
tasks.c
20
tasks.c
|
|
@ -3524,12 +3524,9 @@ static void prvInitialiseNewTask( TaskFunction_t pxTaskCode,
|
|||
|
||||
#if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_PREEMPTION == 1 ) )
|
||||
{
|
||||
BaseType_t xYieldPendingBefore = xYieldPendings[ portGET_CORE_ID() ];
|
||||
|
||||
prvYieldForTask( pxTCB );
|
||||
|
||||
if( ( xYieldPendingBefore == pdFALSE ) &&
|
||||
( xYieldPendings[ portGET_CORE_ID() ] != pdFALSE ) )
|
||||
if( xYieldPendings[ portGET_CORE_ID() ] != pdFALSE )
|
||||
{
|
||||
xYieldRequired = pdTRUE;
|
||||
}
|
||||
|
|
@ -5497,12 +5494,9 @@ BaseType_t xTaskRemoveFromEventList( const List_t * const pxEventList )
|
|||
|
||||
#if ( configUSE_PREEMPTION == 1 )
|
||||
{
|
||||
BaseType_t xYieldPendingBefore = xYieldPendings[ portGET_CORE_ID() ];
|
||||
|
||||
prvYieldForTask( pxUnblockedTCB );
|
||||
|
||||
if( ( xYieldPendingBefore == pdFALSE ) &&
|
||||
( xYieldPendings[ portGET_CORE_ID() ] != pdFALSE ) )
|
||||
if( xYieldPendings[ portGET_CORE_ID() ] != pdFALSE )
|
||||
{
|
||||
xReturn = pdTRUE;
|
||||
}
|
||||
|
|
@ -8211,12 +8205,9 @@ TickType_t uxTaskResetEventItemValue( void )
|
|||
{
|
||||
#if ( configUSE_PREEMPTION == 1 )
|
||||
{
|
||||
BaseType_t xYieldPendingBefore = xYieldPendings[ portGET_CORE_ID() ];
|
||||
|
||||
prvYieldForTask( pxTCB );
|
||||
|
||||
if( ( xYieldPendingBefore == pdFALSE ) &&
|
||||
( xYieldPendings[ portGET_CORE_ID() ] == pdTRUE ) )
|
||||
if( xYieldPendings[ portGET_CORE_ID() ] == pdTRUE )
|
||||
{
|
||||
if( pxHigherPriorityTaskWoken != NULL )
|
||||
{
|
||||
|
|
@ -8348,12 +8339,9 @@ TickType_t uxTaskResetEventItemValue( void )
|
|||
{
|
||||
#if ( configUSE_PREEMPTION == 1 )
|
||||
{
|
||||
BaseType_t xYieldPendingBefore = xYieldPendings[ portGET_CORE_ID() ];
|
||||
|
||||
prvYieldForTask( pxTCB );
|
||||
|
||||
if( ( xYieldPendingBefore == pdFALSE ) &&
|
||||
( xYieldPendings[ portGET_CORE_ID() ] == pdTRUE ) )
|
||||
if( xYieldPendings[ portGET_CORE_ID() ] == pdTRUE )
|
||||
{
|
||||
if( pxHigherPriorityTaskWoken != NULL )
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue