mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-10-13 16:27:43 -04:00
feat(freertos-smp): Remove xTaskUnlockCanYield() and make it inline
This commit is contained in:
parent
829d8ba51a
commit
9000208ecf
2 changed files with 30 additions and 41 deletions
|
@ -3930,14 +3930,6 @@ void vTaskInternalSetTimeOutState( TimeOut_t * const pxTimeOut ) PRIVILEGED_FUNC
|
||||||
void vKernelLightWeightExitCritical( void );
|
void vKernelLightWeightExitCritical( void );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
|
||||||
* Checks whether a yield is required after portUNLOCK_DATA_GROUP() returns.
|
|
||||||
* To be called while data group is locked.
|
|
||||||
*/
|
|
||||||
#if ( ( portUSING_GRANULAR_LOCKS == 1 ) && ( configNUMBER_OF_CORES > 1 ) )
|
|
||||||
BaseType_t xTaskUnlockCanYield( void );
|
|
||||||
#endif /* #if ( ( portUSING_GRANULAR_LOCKS == 1 ) && ( configNUMBER_OF_CORES > 1 ) ) */
|
|
||||||
|
|
||||||
#if ( portUSING_MPU_WRAPPERS == 1 )
|
#if ( portUSING_MPU_WRAPPERS == 1 )
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
63
tasks.c
63
tasks.c
|
@ -7716,8 +7716,20 @@ static void prvResetNextTaskUnblockTime( void )
|
||||||
{
|
{
|
||||||
BaseType_t xYieldCurrentTask;
|
BaseType_t xYieldCurrentTask;
|
||||||
|
|
||||||
/* Get the xYieldPending stats inside the critical section. */
|
/* Get the xYieldPending status inside the critical section. */
|
||||||
xYieldCurrentTask = xTaskUnlockCanYield();
|
if( ( xYieldPendings[ xCoreID ] == pdTRUE ) && ( uxSchedulerSuspended == pdFALSE )
|
||||||
|
#if ( configUSE_TASK_PREEMPTION_DISABLE == 1 )
|
||||||
|
&& ( pxCurrentTCBs[ xCoreID ]->uxPreemptionDisable == 0U ) &&
|
||||||
|
( pxCurrentTCBs[ xCoreID ]->uxDeferredStateChange == 0U )
|
||||||
|
#endif /* ( configUSE_TASK_PREEMPTION_DISABLE == 1 ) */
|
||||||
|
)
|
||||||
|
{
|
||||||
|
xYieldCurrentTask = pdTRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
xYieldCurrentTask = pdFALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/* Release the ISR and task locks first when using granular locks. */
|
/* Release the ISR and task locks first when using granular locks. */
|
||||||
kernelRELEASE_ISR_LOCK( xCoreID );
|
kernelRELEASE_ISR_LOCK( xCoreID );
|
||||||
|
@ -7872,15 +7884,27 @@ static void prvResetNextTaskUnblockTime( void )
|
||||||
|
|
||||||
if( portGET_CRITICAL_NESTING_COUNT( xCoreID ) > 0U )
|
if( portGET_CRITICAL_NESTING_COUNT( xCoreID ) > 0U )
|
||||||
{
|
{
|
||||||
|
BaseType_t xYieldCurrentTask;
|
||||||
|
|
||||||
|
if( ( xYieldPendings[ xCoreID ] == pdTRUE ) && ( uxSchedulerSuspended == pdFALSE )
|
||||||
|
#if ( configUSE_TASK_PREEMPTION_DISABLE == 1 )
|
||||||
|
&& ( pxCurrentTCBs[ xCoreID ]->uxPreemptionDisable == 0U ) &&
|
||||||
|
( pxCurrentTCBs[ xCoreID ]->uxDeferredStateChange == 0U )
|
||||||
|
#endif /* ( configUSE_TASK_PREEMPTION_DISABLE == 1 ) */
|
||||||
|
)
|
||||||
|
{
|
||||||
|
xYieldCurrentTask = pdTRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
xYieldCurrentTask = pdFALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/* Release the ISR lock */
|
/* Release the ISR lock */
|
||||||
kernelRELEASE_ISR_LOCK( xCoreID );
|
kernelRELEASE_ISR_LOCK( xCoreID );
|
||||||
|
|
||||||
portDECREMENT_CRITICAL_NESTING_COUNT( xCoreID );
|
portDECREMENT_CRITICAL_NESTING_COUNT( xCoreID );
|
||||||
|
|
||||||
BaseType_t xYieldCurrentTask;
|
|
||||||
|
|
||||||
xYieldCurrentTask = xTaskUnlockCanYield();
|
|
||||||
|
|
||||||
/* If the critical nesting count is 0, enable interrupts */
|
/* If the critical nesting count is 0, enable interrupts */
|
||||||
if( portGET_CRITICAL_NESTING_COUNT( xCoreID ) == 0U )
|
if( portGET_CRITICAL_NESTING_COUNT( xCoreID ) == 0U )
|
||||||
{
|
{
|
||||||
|
@ -7898,33 +7922,6 @@ static void prvResetNextTaskUnblockTime( void )
|
||||||
#endif /* #if ( configLIGHTWEIGHT_CRITICAL_SECTION == 1 ) */
|
#endif /* #if ( configLIGHTWEIGHT_CRITICAL_SECTION == 1 ) */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( ( portUSING_GRANULAR_LOCKS == 1 ) && ( configNUMBER_OF_CORES > 1 ) )
|
|
||||||
|
|
||||||
BaseType_t xTaskUnlockCanYield( void )
|
|
||||||
{
|
|
||||||
BaseType_t xReturn;
|
|
||||||
BaseType_t xCoreID = portGET_CORE_ID();
|
|
||||||
|
|
||||||
if( ( xYieldPendings[ xCoreID ] == pdTRUE ) && ( uxSchedulerSuspended == pdFALSE )
|
|
||||||
#if ( configUSE_TASK_PREEMPTION_DISABLE == 1 )
|
|
||||||
&& ( pxCurrentTCBs[ xCoreID ]->uxPreemptionDisable == 0U ) &&
|
|
||||||
( pxCurrentTCBs[ xCoreID ]->uxDeferredStateChange == 0U )
|
|
||||||
#endif /* ( configUSE_TASK_PREEMPTION_DISABLE == 1 ) */
|
|
||||||
)
|
|
||||||
{
|
|
||||||
xReturn = pdTRUE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
xReturn = pdFALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return xReturn;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* #if ( ( portUSING_GRANULAR_LOCKS == 1 ) && ( configNUMBER_OF_CORES > 1 ) ) */
|
|
||||||
/*-----------------------------------------------------------*/
|
|
||||||
|
|
||||||
#if ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 )
|
#if ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 )
|
||||||
|
|
||||||
static char * prvWriteNameToBuffer( char * pcBuffer,
|
static char * prvWriteNameToBuffer( char * pcBuffer,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue