[PATCH] score: Make SMP only code explicit
Joel Sherrill
joel at rtems.org
Thu Jun 23 22:33:55 UTC 2022
Does this have a gcc issue?
On Thu, Jun 23, 2022, 3:28 AM Sebastian Huber <
sebastian.huber at embedded-brains.de> wrote:
> Conditional expressions with inline functions are not optimized away if
> optimization is disabled. Avoid such expressions to prevent dead
> branches. It helps also during code review to immediately see if a loop
> is used or not.
> ---
> cpukit/include/rtems/score/priorityimpl.h | 33 ++++-------------------
> cpukit/score/src/kern_tc.c | 4 +++
> cpukit/score/src/threadchangepriority.c | 10 ++++++-
> cpukit/score/src/threadqops.c | 16 +++++++++--
> cpukit/score/src/watchdogtick.c | 4 +++
> 5 files changed, 36 insertions(+), 31 deletions(-)
>
> diff --git a/cpukit/include/rtems/score/priorityimpl.h
> b/cpukit/include/rtems/score/priorityimpl.h
> index 1463bf6c2a..55cddf53be 100644
> --- a/cpukit/include/rtems/score/priorityimpl.h
> +++ b/cpukit/include/rtems/score/priorityimpl.h
> @@ -124,26 +124,6 @@ RTEMS_INLINE_ROUTINE bool _Priority_Actions_is_empty(
> return actions->actions == NULL;
> }
>
> -/**
> - * @brief Checks if the priority actions is valid.
> - *
> - * @param aggregation The aggregation of the priority action.
> - *
> - * @retval true The @a aggregation is valid.
> - * @retval false The @a aggregation is not valid.
> - */
> -RTEMS_INLINE_ROUTINE bool _Priority_Actions_is_valid(
> - const Priority_Aggregation *aggregation
> -)
> -{
> -#if defined(RTEMS_SMP)
> - return aggregation != NULL;
> -#else
> - (void) aggregation;
> - return false;
> -#endif
> -}
> -
> /**
> * @brief Moves the priority actions' actions.
> *
> @@ -389,25 +369,22 @@ RTEMS_INLINE_ROUTINE void _Priority_Set_action(
> aggregation->Action.type = type;
> }
>
> +#if defined(RTEMS_SMP)
> /**
> * @brief Gets the next action of the priority aggregation.
> *
> - * @param aggregation The priority aggregation to get the next action of.
> + * @param aggregation is the priority aggregation to get the next action
> of.
> *
> - * @retval next_action The next action of @a aggregation if RTEMS_SMP is
> defined.
> - * @retval NULL RTEMS_SMP is not defined.
> + * @return Returns the next action of the priority aggregation or NULL if
> there
> + * is no next action.
> */
> RTEMS_INLINE_ROUTINE Priority_Aggregation *_Priority_Get_next_action(
> const Priority_Aggregation *aggregation
> )
> {
> -#if defined(RTEMS_SMP)
> return aggregation->Action.next;
> -#else
> - (void) aggregation;
> - return NULL;
> -#endif
> }
> +#endif
>
> /**
> * @brief Compares two priorities.
> diff --git a/cpukit/score/src/kern_tc.c b/cpukit/score/src/kern_tc.c
> index 2b7aeaad31..643026a1c8 100644
> --- a/cpukit/score/src/kern_tc.c
> +++ b/cpukit/score/src/kern_tc.c
> @@ -2329,9 +2329,13 @@ _Timecounter_Tick(void)
> {
> Per_CPU_Control *cpu_self = _Per_CPU_Get();
>
> +#if defined(RTEMS_SMP)
> if (_Per_CPU_Is_boot_processor(cpu_self)) {
> +#endif
> tc_windup(NULL);
> +#if defined(RTEMS_SMP)
> }
> +#endif
>
> _Watchdog_Tick(cpu_self);
> }
> diff --git a/cpukit/score/src/threadchangepriority.c
> b/cpukit/score/src/threadchangepriority.c
> index 321bb15cab..80f030fdc6 100644
> --- a/cpukit/score/src/threadchangepriority.c
> +++ b/cpukit/score/src/threadchangepriority.c
> @@ -135,11 +135,15 @@ static void _Thread_Priority_do_perform_actions(
> priority_aggregation = _Priority_Actions_move(
> &queue_context->Priority.Actions );
>
> do {
> +#if defined(RTEMS_SMP)
> Priority_Aggregation *next_aggregation;
> +#endif
> Priority_Node *priority_action_node;
> Priority_Action_type priority_action_type;
>
> +#if defined(RTEMS_SMP)
> next_aggregation = _Priority_Get_next_action( priority_aggregation );
> +#endif
>
> priority_action_node = priority_aggregation->Action.node;
> priority_action_type = priority_aggregation->Action.type;
> @@ -198,8 +202,12 @@ static void _Thread_Priority_do_perform_actions(
> break;
> }
>
> +#if defined(RTEMS_SMP)
> priority_aggregation = next_aggregation;
> - } while ( _Priority_Actions_is_valid( priority_aggregation ) );
> + } while ( priority_aggregation != NULL );
> +#else
> + } while ( false );
> +#endif
>
> if ( !_Priority_Actions_is_empty( &queue_context->Priority.Actions ) ) {
> _Thread_queue_Context_add_priority_update( queue_context, the_thread
> );
> diff --git a/cpukit/score/src/threadqops.c b/cpukit/score/src/threadqops.c
> index 33fc5a44cb..fbea9f6de6 100644
> --- a/cpukit/score/src/threadqops.c
> +++ b/cpukit/score/src/threadqops.c
> @@ -404,8 +404,12 @@ static void _Thread_queue_Priority_priority_actions(
> break;
> }
>
> +#if defined(RTEMS_SMP)
> priority_aggregation = _Priority_Get_next_action(
> priority_aggregation );
> - } while ( _Priority_Actions_is_valid( priority_aggregation ) );
> + } while ( priority_aggregation != NULL );
> +#else
> + } while ( false );
> +#endif
> }
>
> static void _Thread_queue_Priority_do_initialize(
> @@ -734,14 +738,18 @@ static void
> _Thread_queue_Priority_inherit_priority_actions(
> priority_aggregation = _Priority_Actions_move( priority_actions );
>
> do {
> +#if defined(RTEMS_SMP)
> Priority_Aggregation *next_aggregation;
> +#endif
> Scheduler_Node *scheduler_node;
> size_t scheduler_index;
> Thread_queue_Priority_queue *priority_queue;
> Scheduler_Node *scheduler_node_of_owner;
> Priority_Action_type priority_action_type;
>
> +#if defined(RTEMS_SMP)
> next_aggregation = _Priority_Get_next_action( priority_aggregation );
> +#endif
>
> scheduler_node = SCHEDULER_NODE_OF_WAIT_PRIORITY(
> priority_aggregation );
> scheduler_index = _Thread_queue_Scheduler_index( scheduler_node );
> @@ -797,8 +805,12 @@ static void
> _Thread_queue_Priority_inherit_priority_actions(
> break;
> }
>
> +#if defined(RTEMS_SMP)
> priority_aggregation = next_aggregation;
> - } while ( _Priority_Actions_is_valid( priority_aggregation ) );
> + } while ( priority_aggregation != NULL );
> +#else
> + } while ( false );
> +#endif
> }
>
> static void _Thread_queue_Priority_inherit_do_initialize(
> diff --git a/cpukit/score/src/watchdogtick.c
> b/cpukit/score/src/watchdogtick.c
> index 6edb3f071a..71311b598e 100644
> --- a/cpukit/score/src/watchdogtick.c
> +++ b/cpukit/score/src/watchdogtick.c
> @@ -83,9 +83,13 @@ void _Watchdog_Tick( Per_CPU_Control *cpu )
> Thread_Control *executing;
> const Thread_CPU_budget_operations *cpu_budget_operations;
>
> +#ifdef RTEMS_SMP
> if ( _Per_CPU_Is_boot_processor( cpu ) ) {
> +#endif
> ++_Watchdog_Ticks_since_boot;
> +#ifdef RTEMS_SMP
> }
> +#endif
>
> _ISR_lock_ISR_disable_and_acquire( &cpu->Watchdog.Lock, &lock_context );
>
> --
> 2.35.3
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20220623/fbec252b/attachment-0001.htm>
More information about the devel
mailing list