Skip to content

Commit 308d050

Browse files
feat(freertos/smp): Add granular locking port macros checks
Adds the required checks for granular locking port macros. Port Config: - portUSING_GRANULAR_LOCKS to enable granular locks - portCRITICAL_NESTING_IN_TCB should be disabled Granular Locking Port Macros: - Spinlocks - portSPINLOCK_TYPE - portINIT_SPINLOCK( pxSpinlock ) - portINIT_SPINLOCK_STATIC - Locking - portGET_SPINLOCK() - portRELEASE_SPINLOCK() Co-authored-by: Sudeep Mohanty <[email protected]>
1 parent 94c320c commit 308d050

File tree

1 file changed

+159
-6
lines changed

1 file changed

+159
-6
lines changed

include/FreeRTOS.h

Lines changed: 159 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,10 @@
359359
#define portCRITICAL_NESTING_IN_TCB 0
360360
#endif
361361

362+
#ifndef portUSING_GRANULAR_LOCKS
363+
#define portUSING_GRANULAR_LOCKS 0
364+
#endif
365+
362366
#ifndef configMAX_TASK_NAME_LEN
363367
#define configMAX_TASK_NAME_LEN 16
364368
#endif
@@ -444,7 +448,7 @@
444448

445449
#ifndef portRELEASE_TASK_LOCK
446450

447-
#if ( configNUMBER_OF_CORES == 1 )
451+
#if ( ( portUSING_GRANULAR_LOCKS == 1 ) || ( configNUMBER_OF_CORES == 1 ) )
448452
#define portRELEASE_TASK_LOCK( xCoreID )
449453
#else
450454
#error portRELEASE_TASK_LOCK is required in SMP
@@ -454,7 +458,7 @@
454458

455459
#ifndef portGET_TASK_LOCK
456460

457-
#if ( configNUMBER_OF_CORES == 1 )
461+
#if ( ( portUSING_GRANULAR_LOCKS == 1 ) || ( configNUMBER_OF_CORES == 1 ) )
458462
#define portGET_TASK_LOCK( xCoreID )
459463
#else
460464
#error portGET_TASK_LOCK is required in SMP
@@ -464,7 +468,7 @@
464468

465469
#ifndef portRELEASE_ISR_LOCK
466470

467-
#if ( configNUMBER_OF_CORES == 1 )
471+
#if ( ( portUSING_GRANULAR_LOCKS == 1 ) || ( configNUMBER_OF_CORES == 1 ) )
468472
#define portRELEASE_ISR_LOCK( xCoreID )
469473
#else
470474
#error portRELEASE_ISR_LOCK is required in SMP
@@ -474,14 +478,38 @@
474478

475479
#ifndef portGET_ISR_LOCK
476480

477-
#if ( configNUMBER_OF_CORES == 1 )
481+
#if ( ( portUSING_GRANULAR_LOCKS == 1 ) || ( configNUMBER_OF_CORES == 1 ) )
478482
#define portGET_ISR_LOCK( xCoreID )
479483
#else
480484
#error portGET_ISR_LOCK is required in SMP
481485
#endif
482486

483487
#endif /* portGET_ISR_LOCK */
484488

489+
#ifndef portRELEASE_SPINLOCK
490+
491+
#if ( ( portUSING_GRANULAR_LOCKS == 1 ) && ( configNUMBER_OF_CORES > 1 ) )
492+
#error portRELEASE_SPINLOCK is required for granular locking
493+
#endif
494+
495+
#endif
496+
497+
#ifndef portGET_SPINLOCK
498+
499+
#if ( ( portUSING_GRANULAR_LOCKS == 1 ) && ( configNUMBER_OF_CORES > 1 ) )
500+
#error portGET_SPINLOCK is required for granular locking
501+
#endif
502+
503+
#endif
504+
505+
#ifndef portCHECK_IF_IN_ISR
506+
507+
#if ( ( portUSING_GRANULAR_LOCKS == 1 ) && ( configNUMBER_OF_CORES > 1 ) )
508+
#error portCHECK_IF_IN_ISR is required for granular locking
509+
#endif
510+
511+
#endif
512+
485513
#ifndef portENTER_CRITICAL_FROM_ISR
486514

487515
#if ( configNUMBER_OF_CORES > 1 )
@@ -498,6 +526,126 @@
498526

499527
#endif
500528

529+
#ifndef portENTER_CRITICAL_DATA_GROUP
530+
531+
#if ( ( portUSING_GRANULAR_LOCKS == 1 ) && ( configNUMBER_OF_CORES > 1 ) )
532+
#error portENTER_CRITICAL_DATA_GROUP is required for SMP with granular locking feature enabled
533+
#endif
534+
535+
#endif
536+
537+
#ifndef portEXIT_CRITICAL_DATA_GROUP
538+
539+
#if ( ( portUSING_GRANULAR_LOCKS == 1 ) && ( configNUMBER_OF_CORES > 1 ) )
540+
#error portEXIT_CRITICAL_DATA_GROUP is required for SMP with granular locking feature enabled
541+
#endif
542+
543+
#endif
544+
545+
#ifndef portENTER_CRITICAL_DATA_GROUP_FROM_ISR
546+
547+
#if ( ( portUSING_GRANULAR_LOCKS == 1 ) && ( configNUMBER_OF_CORES > 1 ) )
548+
#error portENTER_CRITICAL_DATA_GROUP_FROM_ISR is required for SMP with granular locking feature enabled
549+
#endif
550+
551+
#endif
552+
553+
#ifndef portEXIT_CRITICAL_DATA_GROUP_FROM_ISR
554+
555+
#if ( ( portUSING_GRANULAR_LOCKS == 1 ) && ( configNUMBER_OF_CORES > 1 ) )
556+
#error portEXIT_CRITICAL_DATA_GROUP_FROM_ISR is required for SMP with granular locking feature enabled
557+
#endif
558+
559+
#endif
560+
561+
#ifndef portSPINLOCK_TYPE
562+
563+
#if ( ( portUSING_GRANULAR_LOCKS == 1 ) && ( configNUMBER_OF_CORES > 1 ) )
564+
#error portSPINLOCK_TYPE is required for SMP with granular locking feature enabled
565+
#endif
566+
567+
#endif
568+
569+
#ifndef portINIT_EVENT_GROUP_TASK_SPINLOCK
570+
571+
#if ( ( portUSING_GRANULAR_LOCKS == 1 ) && ( configNUMBER_OF_CORES > 1 ) )
572+
#error portINIT_EVENT_GROUP_TASK_SPINLOCK is required for granular locking
573+
#endif
574+
575+
#endif
576+
577+
#ifndef portINIT_EVENT_GROUP_ISR_SPINLOCK
578+
579+
#if ( ( portUSING_GRANULAR_LOCKS == 1 ) && ( configNUMBER_OF_CORES > 1 ) )
580+
#error portINIT_EVENT_GROUP_ISR_SPINLOCK is required for granular locking
581+
#endif
582+
583+
#endif
584+
585+
#ifndef portINIT_QUEUE_TASK_SPINLOCK
586+
587+
#if ( ( portUSING_GRANULAR_LOCKS == 1 ) && ( configNUMBER_OF_CORES > 1 ) )
588+
#error portINIT_QUEUE_TASK_SPINLOCK is required for granular locking
589+
#endif
590+
591+
#endif
592+
593+
#ifndef portINIT_QUEUE_ISR_SPINLOCK
594+
595+
#if ( ( portUSING_GRANULAR_LOCKS == 1 ) && ( configNUMBER_OF_CORES > 1 ) )
596+
#error portINIT_QUEUE_ISR_SPINLOCK is required for granular locking
597+
#endif
598+
599+
#endif
600+
601+
#ifndef portINIT_STREAM_BUFFER_TASK_SPINLOCK
602+
603+
#if ( ( portUSING_GRANULAR_LOCKS == 1 ) && ( configNUMBER_OF_CORES > 1 ) )
604+
#error portINIT_STREAM_BUFFER_TASK_SPINLOCK is required for granular locking
605+
#endif
606+
607+
#endif
608+
609+
#ifndef portINIT_STREAM_BUFFER_ISR_SPINLOCK
610+
611+
#if ( ( portUSING_GRANULAR_LOCKS == 1 ) && ( configNUMBER_OF_CORES > 1 ) )
612+
#error portINIT_STREAM_BUFFER_ISR_SPINLOCK is required for granular locking
613+
#endif
614+
615+
#endif
616+
617+
#ifndef portINIT_KERNEL_TASK_SPINLOCK_STATIC
618+
619+
#if ( ( portUSING_GRANULAR_LOCKS == 1 ) && ( configNUMBER_OF_CORES > 1 ) )
620+
#error portINIT_KERNEL_TASK_SPINLOCK_STATIC is required for granular locking
621+
#endif
622+
623+
#endif
624+
625+
#ifndef portINIT_KERNEL_ISR_SPINLOCK_STATIC
626+
627+
#if ( ( portUSING_GRANULAR_LOCKS == 1 ) && ( configNUMBER_OF_CORES > 1 ) )
628+
#error portINIT_KERNEL_ISR_SPINLOCK_STATIC is required for granular locking
629+
#endif
630+
631+
#endif
632+
633+
#ifndef portINIT_TIMERS_TASK_SPINLOCK_STATIC
634+
635+
#if ( ( portUSING_GRANULAR_LOCKS == 1 ) && ( configNUMBER_OF_CORES > 1 ) )
636+
#error portINIT_TIMERS_TASK_SPINLOCK_STATIC is required for granular locking
637+
#endif
638+
639+
#endif
640+
641+
#ifndef portINIT_TIMERS_ISR_SPINLOCK_STATIC
642+
643+
#if ( ( portUSING_GRANULAR_LOCKS == 1 ) && ( configNUMBER_OF_CORES > 1 ) )
644+
#error portINIT_TIMERS_ISR_SPINLOCK_STATIC is required for granular locking
645+
#endif
646+
647+
#endif
648+
501649
#ifndef configUSE_CORE_AFFINITY
502650
#define configUSE_CORE_AFFINITY 0
503651
#endif /* configUSE_CORE_AFFINITY */
@@ -2905,8 +3053,13 @@
29053053
/* Either variables of tick type cannot be read atomically, or
29063054
* portTICK_TYPE_IS_ATOMIC was not set - map the critical sections used when
29073055
* the tick count is returned to the standard critical section macros. */
2908-
#define portTICK_TYPE_ENTER_CRITICAL() portENTER_CRITICAL()
2909-
#define portTICK_TYPE_EXIT_CRITICAL() portEXIT_CRITICAL()
3056+
#if ( ( portUSING_GRANULAR_LOCKS == 1 ) && ( configNUMBER_OF_CORES > 1 ) )
3057+
#define portTICK_TYPE_ENTER_CRITICAL() portENTER_CRITICAL_DATA_GROUP( &xTaskSpinlock, &xISRSpinlock )
3058+
#define portTICK_TYPE_EXIT_CRITICAL() portEXIT_CRITICAL_DATA_GROUP( &xTaskSpinlock, &xISRSpinlock )
3059+
#else /* #if ( ( portUSING_GRANULAR_LOCKS == 1 ) && ( configNUMBER_OF_CORES > 1 ) ) */
3060+
#define portTICK_TYPE_ENTER_CRITICAL() portENTER_CRITICAL()
3061+
#define portTICK_TYPE_EXIT_CRITICAL() portEXIT_CRITICAL()
3062+
#endif /* #if ( ( portUSING_GRANULAR_LOCKS == 1 ) && ( configNUMBER_OF_CORES > 1 ) ) */
29103063
#define portTICK_TYPE_SET_INTERRUPT_MASK_FROM_ISR() portSET_INTERRUPT_MASK_FROM_ISR()
29113064
#define portTICK_TYPE_CLEAR_INTERRUPT_MASK_FROM_ISR( x ) portCLEAR_INTERRUPT_MASK_FROM_ISR( ( x ) )
29123065
#else

0 commit comments

Comments
 (0)