From d66a519685d1842391b65e237b94a678cd6f65c3 Mon Sep 17 00:00:00 2001 From: TiejunZhou <50469179+TiejunMS@users.noreply.github.com> Date: Thu, 18 May 2023 15:57:53 +0800 Subject: [PATCH] Fix MISRA issues for ThreadX SMP (#263) * Fixed MISRA2012 rule 10.4_a The operands `pool_ptr->tx_byte_pool_fragments' and `2' have essential type categories unsigned 32-bit int and signed 8-bit int, which do not match. * Fixed MISRA2012 rule 10.4_a The operands `next_priority' and `TX_MAX_PRIORITIES' have essential type categories unsigned 32-bit int and signed 8-bit int, which do not match. * Fixed MISRA2012 rule 8.3 Declaration/definition of `_tx_thread_smp_preemptable_threads_get' is inconsistent with previous declaration/definition in types and/or type qualifiers --- common_smp/inc/tx_thread.h | 8 +++++--- common_smp/src/tx_byte_pool_search.c | 6 ++++-- common_smp/src/tx_thread_smp_utilities.c | 2 +- common_smp/src/tx_thread_system_suspend.c | 6 ++++-- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/common_smp/inc/tx_thread.h b/common_smp/inc/tx_thread.h index 207c36e7..358ad166 100644 --- a/common_smp/inc/tx_thread.h +++ b/common_smp/inc/tx_thread.h @@ -26,7 +26,7 @@ /* COMPONENT DEFINITION RELEASE */ /* */ /* tx_thread.h PORTABLE SMP */ -/* 6.1 */ +/* 6.x */ /* AUTHOR */ /* */ /* William E. Lamie, Microsoft Corporation */ @@ -42,6 +42,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 09-30-2020 William E. Lamie Initial Version 6.1 */ +/* xx-xx-xxxx Tiejun Zhou Fixed MISRA2012 rule 8.3, */ +/* resulting in version 6.x */ /* */ /**************************************************************************/ @@ -1349,7 +1351,7 @@ TX_THREAD *thread_remap_list[TX_THREAD_SMP_MAX_CORES]; } -static INLINE_DECLARE ULONG _tx_thread_smp_preemptable_threads_get(UINT priority, TX_THREAD *possible_preemption_list[]) +static INLINE_DECLARE ULONG _tx_thread_smp_preemptable_threads_get(UINT priority, TX_THREAD *possible_preemption_list[TX_THREAD_SMP_MAX_CORES]) { UINT i, j, k; @@ -1668,7 +1670,7 @@ ULONG _tx_thread_smp_available_cores_get(void); ULONG _tx_thread_smp_possible_cores_get(void); UINT _tx_thread_smp_lowest_priority_get(void); UINT _tx_thread_smp_remap_solution_find(TX_THREAD *schedule_thread, ULONG available_cores, ULONG thread_possible_cores, ULONG test_possible_cores); -ULONG _tx_thread_smp_preemptable_threads_get(UINT priority, TX_THREAD *possible_preemption_list[]); +ULONG _tx_thread_smp_preemptable_threads_get(UINT priority, TX_THREAD *possible_preemption_list[TX_THREAD_SMP_MAX_CORES]); VOID _tx_thread_smp_simple_priority_change(TX_THREAD *thread_ptr, UINT new_priority); #endif diff --git a/common_smp/src/tx_byte_pool_search.c b/common_smp/src/tx_byte_pool_search.c index c40247f3..2bce4fc1 100644 --- a/common_smp/src/tx_byte_pool_search.c +++ b/common_smp/src/tx_byte_pool_search.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _tx_byte_pool_search PORTABLE SMP */ -/* 6.1.7 */ +/* 6.x */ /* AUTHOR */ /* */ /* William E. Lamie, Microsoft Corporation */ @@ -81,6 +81,8 @@ /* calculation, and reduced */ /* number of search resets, */ /* resulting in version 6.1.7 */ +/* xx-xx-xxxx Tiejun Zhou Fixed MISRA2012 rule 10.4_a, */ +/* resulting in version 6.x */ /* */ /**************************************************************************/ UCHAR *_tx_byte_pool_search(TX_BYTE_POOL *pool_ptr, ULONG memory_size) @@ -110,7 +112,7 @@ UINT blocks_searched = ((UINT) 0); /* First, determine if there are enough bytes in the pool. */ /* Theoretical bytes available = free bytes + ((fragments-2) * overhead of each block) */ - total_theoretical_available = pool_ptr -> tx_byte_pool_available + ((pool_ptr -> tx_byte_pool_fragments - 2) * ((sizeof(UCHAR *)) + (sizeof(ALIGN_TYPE)))); + total_theoretical_available = pool_ptr -> tx_byte_pool_available + ((pool_ptr -> tx_byte_pool_fragments - 2U) * ((sizeof(UCHAR *)) + (sizeof(ALIGN_TYPE)))); if (memory_size >= total_theoretical_available) { diff --git a/common_smp/src/tx_thread_smp_utilities.c b/common_smp/src/tx_thread_smp_utilities.c index 8543e7be..b31914e6 100644 --- a/common_smp/src/tx_thread_smp_utilities.c +++ b/common_smp/src/tx_thread_smp_utilities.c @@ -826,7 +826,7 @@ TX_THREAD *thread_remap_list[TX_THREAD_SMP_MAX_CORES]; } -ULONG _tx_thread_smp_preemptable_threads_get(UINT priority, TX_THREAD *possible_preemption_list[]) +ULONG _tx_thread_smp_preemptable_threads_get(UINT priority, TX_THREAD *possible_preemption_list[TX_THREAD_SMP_MAX_CORES]) { UINT i, j, k; diff --git a/common_smp/src/tx_thread_system_suspend.c b/common_smp/src/tx_thread_system_suspend.c index a76a00d4..7de113c7 100644 --- a/common_smp/src/tx_thread_system_suspend.c +++ b/common_smp/src/tx_thread_system_suspend.c @@ -38,7 +38,7 @@ /* FUNCTION RELEASE */ /* */ /* _tx_thread_system_suspend PORTABLE SMP */ -/* 6.1.11 */ +/* 6.x */ /* AUTHOR */ /* */ /* William E. Lamie, Microsoft Corporation */ @@ -91,6 +91,8 @@ /* 04-25-2022 Scott Larson Modified comments and fixed */ /* loop to find next thread, */ /* resulting in version 6.1.11 */ +/* xx-xx-xxxx Tiejun Zhou Fixed MISRA2012 rule 10.4_a, */ +/* resulting in version 6.x */ /* */ /**************************************************************************/ VOID _tx_thread_system_suspend(TX_THREAD *thread_ptr) @@ -671,7 +673,7 @@ UINT processing_complete; complex_path_possible = possible_cores & available_cores; /* Check if we need to loop to find the next highest priority thread. */ - if (next_priority == TX_MAX_PRIORITIES) + if (next_priority == (ULONG)TX_MAX_PRIORITIES) { loop_finished = TX_TRUE; }