Skip to content

Commit 5c2068b

Browse files
Dazza0sudeep-mohanty
authored andcommitted
change(freertos/smp): Update timers.c locking
Updated timers.c to use granular locking - Added xTaskSpinlock and xISRSpinlock - Replaced critical section macros with data group locking macros such as taskENTER/EXIT_CRITICAL() with taskLOCK/UNLOCK_DATA_GROUP().
1 parent 4b0f76b commit 5c2068b

File tree

1 file changed

+17
-12
lines changed

1 file changed

+17
-12
lines changed

timers.c

+17-12
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,11 @@
149149
PRIVILEGED_DATA static QueueHandle_t xTimerQueue = NULL;
150150
PRIVILEGED_DATA static TaskHandle_t xTimerTaskHandle = NULL;
151151

152+
#if ( ( portUSING_GRANULAR_LOCKS == 1 ) && ( configNUMBER_OF_CORES > 1 ) )
153+
PRIVILEGED_DATA static portSPINLOCK_TYPE xTaskSpinlock = portINIT_TIMERS_TASK_SPINLOCK_STATIC;
154+
PRIVILEGED_DATA static portSPINLOCK_TYPE xISRSpinlock = portINIT_TIMERS_ISR_SPINLOCK_STATIC;
155+
#endif /* #if ( ( portUSING_GRANULAR_LOCKS == 1 ) && ( configNUMBER_OF_CORES > 1 ) ) */
156+
152157
/*-----------------------------------------------------------*/
153158

154159
/*
@@ -576,7 +581,7 @@
576581
traceENTER_vTimerSetReloadMode( xTimer, xAutoReload );
577582

578583
configASSERT( xTimer );
579-
taskENTER_CRITICAL();
584+
taskLOCK_DATA_GROUP( &xTaskSpinlock, &xISRSpinlock );
580585
{
581586
if( xAutoReload != pdFALSE )
582587
{
@@ -587,7 +592,7 @@
587592
pxTimer->ucStatus &= ( ( uint8_t ) ~tmrSTATUS_IS_AUTORELOAD );
588593
}
589594
}
590-
taskEXIT_CRITICAL();
595+
taskUNLOCK_DATA_GROUP( &xTaskSpinlock, &xISRSpinlock );
591596

592597
traceRETURN_vTimerSetReloadMode();
593598
}
@@ -601,7 +606,7 @@
601606
traceENTER_xTimerGetReloadMode( xTimer );
602607

603608
configASSERT( xTimer );
604-
portBASE_TYPE_ENTER_CRITICAL();
609+
taskLOCK_DATA_GROUP( &xTaskSpinlock, &xISRSpinlock );
605610
{
606611
if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) == 0U )
607612
{
@@ -614,7 +619,7 @@
614619
xReturn = pdTRUE;
615620
}
616621
}
617-
portBASE_TYPE_EXIT_CRITICAL();
622+
taskUNLOCK_DATA_GROUP( &xTaskSpinlock, &xISRSpinlock );
618623

619624
traceRETURN_xTimerGetReloadMode( xReturn );
620625

@@ -1113,7 +1118,7 @@
11131118
/* Check that the list from which active timers are referenced, and the
11141119
* queue used to communicate with the timer service, have been
11151120
* initialised. */
1116-
taskENTER_CRITICAL();
1121+
taskLOCK_DATA_GROUP( &xTaskSpinlock, &xISRSpinlock );
11171122
{
11181123
if( xTimerQueue == NULL )
11191124
{
@@ -1155,7 +1160,7 @@
11551160
mtCOVERAGE_TEST_MARKER();
11561161
}
11571162
}
1158-
taskEXIT_CRITICAL();
1163+
taskUNLOCK_DATA_GROUP( &xTaskSpinlock, &xISRSpinlock );
11591164
}
11601165
/*-----------------------------------------------------------*/
11611166

@@ -1169,7 +1174,7 @@
11691174
configASSERT( xTimer );
11701175

11711176
/* Is the timer in the list of active timers? */
1172-
portBASE_TYPE_ENTER_CRITICAL();
1177+
taskLOCK_DATA_GROUP( &xTaskSpinlock, &xISRSpinlock );
11731178
{
11741179
if( ( pxTimer->ucStatus & tmrSTATUS_IS_ACTIVE ) == 0U )
11751180
{
@@ -1180,7 +1185,7 @@
11801185
xReturn = pdTRUE;
11811186
}
11821187
}
1183-
portBASE_TYPE_EXIT_CRITICAL();
1188+
taskUNLOCK_DATA_GROUP( &xTaskSpinlock, &xISRSpinlock );
11841189

11851190
traceRETURN_xTimerIsTimerActive( xReturn );
11861191

@@ -1197,11 +1202,11 @@
11971202

11981203
configASSERT( xTimer );
11991204

1200-
taskENTER_CRITICAL();
1205+
taskLOCK_DATA_GROUP( &xTaskSpinlock, &xISRSpinlock );
12011206
{
12021207
pvReturn = pxTimer->pvTimerID;
12031208
}
1204-
taskEXIT_CRITICAL();
1209+
taskUNLOCK_DATA_GROUP( &xTaskSpinlock, &xISRSpinlock );
12051210

12061211
traceRETURN_pvTimerGetTimerID( pvReturn );
12071212

@@ -1218,11 +1223,11 @@
12181223

12191224
configASSERT( xTimer );
12201225

1221-
taskENTER_CRITICAL();
1226+
taskLOCK_DATA_GROUP( &xTaskSpinlock, &xISRSpinlock );
12221227
{
12231228
pxTimer->pvTimerID = pvNewID;
12241229
}
1225-
taskEXIT_CRITICAL();
1230+
taskUNLOCK_DATA_GROUP( &xTaskSpinlock, &xISRSpinlock );
12261231

12271232
traceRETURN_vTimerSetTimerID();
12281233
}

0 commit comments

Comments
 (0)