[HELP] Preemptive scheduling with suspend and resume task [s32k148evb]
Description / Steps to reproduce the issue
Hello all I am trying to implement a test for checking preemptive scheduling using tasks or pthread in nuttx for S32K148_EVB board. my approach is to take tm_preemptive_scheduling_test.c file and write a wrapper for the called functions. Another approach to achieve the resume and suspend is using semaphore as below.
int tm_thread_create(int thread_id, const char *thread_name, int priority,
int (*entry_function)(int argc, FAR char *argv[]), void *args)
{
threads[thread_id] = task_create(
thread_name, // Task Name
priority, // Task Priority
CONFIG_DEFAULT_TASK_STACKSIZE, // Task Stack Size
entry_function, // Task Function
NULL // Task Arguments
);
}
int tm_thread_suspend(int thread_id)
{
return sem_wait(&g_bench_semaphores[thread_id]);
}
void tm_thread_resume(int thread_id)
{
sem_post(&g_bench_semaphores[thread_id]);
}
void tm_thread_sleep(int sec)
{
sleep(sec);
}
for Nuttx priority i am creating the thread with priority starting for lower with lower value and higher with higher value. Main priority is 100. therefore the change in code tm_preemptive_scheduling_test.c is
/* Create thread 0 at priority 10. */
tm_thread_create(0, 6, tm_preemptive_thread_0_entry);
/* Create thread 1 at priority 9. */
tm_thread_create(1, 7, tm_preemptive_thread_1_entry);
/* Create thread 2 at priority 8. */
tm_thread_create(2, 8, tm_preemptive_thread_2_entry);
/* Create thread 3 at priority 7. */
tm_thread_create(3, 9, tm_preemptive_thread_3_entry);
/* Create thread 4 at priority 6. */
tm_thread_create(4, 10, tm_preemptive_thread_4_entry);
Expected behavior is all 5 thread 0 to thread 4 is in suspend state. (waiting for semaphore) thread_report (prio:highest) goes to sleep thread 0 (prio:6) resume (semaphore release)
release the semaphore of thread 1 thread 1 (prio:7) resume (semaphore release) release the semaphore of thread 2 thread 2 (prio:8) resume (semaphore release) release the semaphore of thread 3 thread 3 (prio:9) resume (semaphore release) release the semaphore of thread 4 thread 4 (prio:10) counter4++; suspend (waiting for semaphore)
thread 3 (prio:9) counter3++; suspend (waiting for semaphore)
thread 2 (prio:8) counter2++; suspend (waiting for semaphore)
thread 1 (prio:7) counter1++; suspend (waiting for semaphore)
thread 0 (prio:6) counter0++; release the semaphore of thread 1 ----> start from top again until sleep for thread_report (prio:highest) expires
Observed behaviour all 5 thread 0 to thread 4 is in suspend state. (waiting for semaphore) thread_report (prio:highest) goes to sleep thread 0 (prio:6) resume (semaphore release)
release the semaphore of thread 1 thread 1 (prio:7) resume (semaphore release) release the semaphore of thread 2 thread 2 (prio:8) resume (semaphore release) release the semaphore of thread 3 thread 3 (prio:9) resume (semaphore release) release the semaphore of thread 4 thread 4 (prio:10) counter4++; suspend (waiting for semaphore) release the semaphore of thread 4
thread 4 (prio:10) counter4++;
thread 4 (prio:10) counter4++;
thread 4 (prio:10) counter4++;
....until sleep for thread_report (prio:highest) expires
On which OS does this issue occur?
[OS: Linux]
What is the version of your OS?
Ubuntu 22.04.5 LTS
NuttX Version
12.10.0-RC0
Issue Architecture
[Arch: arm]
Issue Area
[Area: Other]
Host information
file sysinfo.h not exists
NuttX CFLAGS:
-Wstrict-prototypes
-Wno-attributes
-Wno-unknown-pragmas
-Wno-psabi -O2
-fno-strict-aliasing
-fomit-frame-pointer
-fno-common
-Wall
-Wshadow
-Wundef
-ffunction-sections
-fdata-sections -g3
-mlittle-endian
-march=armv7e-m
-mtune=cortex-m4
-mfloat-abi=soft
-mthumb
-Wa-mthumb
-Wa-mimplicit-it=always
-isystem /home/buildpc/username/07_nuutx_debug/nuttx/include
-D__NuttX__
-DNDEBUG
NuttX CXXFLAGS:
-Wno-attributes
-Wno-unknown-pragmas
-nostdinc++
-Wno-psabi
-std=\gnu++17
-fno-exceptions
-fcheck-new
-fno-rtti -O2
-fno-strict-aliasing
-fomit-frame-pointer
-fno-common
-Wall
-Wshadow
-Wundef
-ffunction-sections
-fdata-sections -g3
-mlittle-endian
-march=armv7e-m
-mtune=cortex-m4
-mfloat-abi=soft
-mthumb
-Wa-mthumb
-Wa-mimplicit-it=always
-isystem /home/buildpc/username/07_nuutx_debug/nuttx/include/cxx
-isystem /home/buildpc/username/07_nuutx_debug/nuttx/include
-D__NuttX__
-DNDEBUG
NuttX LDFLAGS: --entry=__start -nostdlib --gc-sections --cref -Map=/home/buildpc/username/07_nuutx_debug/nuttx/nuttx.map
NuttX configuration options:
CONFIG_ALLOW_BSD_COMPONENTS=y
CONFIG_HOST_LINUX=y
CONFIG_APPS_DIR=../nuttx-apps
CONFIG_BASE_DEFCONFIG=\s32k148evb:nsh-dirty
CONFIG_BUILD_FLAT=y
CONFIG_MOTOROLA_SREC=y
CONFIG_RAW_BINARY=y
CONFIG_OUTPUT_STRIP_PATHS=y
CONFIG_ARCH_HAVE_STDARG_H=y
CONFIG_ARCH_HAVE_SETJMP=y
CONFIG_ARCH_NONE_DEBUG_H=y
CONFIG_FORTIFY_SOURCE=0
CONFIG_NDEBUG=y
CONFIG_DEBUG_ALERT=y
CONFIG_ARCH_HAVE_STACKCHECK=y
CONFIG_STACK_USAGE_WARNING=0
CONFIG_DEBUG_SYMBOLS=y
CONFIG_DEBUG_SYMBOLS_LEVEL=-g3
CONFIG_ARCH_HAVE_CUSTOMOPT=y
CONFIG_DEBUG_CUSTOMOPT=y
CONFIG_DEBUG_OPTLEVEL=-O2
CONFIG_LTO_NONE=y
CONFIG_DEBUG_OPT_UNUSED_SECTIONS=y
CONFIG_DEBUG_LINK_MAP=y
CONFIG_ARCH_ARM=y
CONFIG_ARCH=\arm
CONFIG_ARM_TOOLCHAIN_GNU_EABI=y
CONFIG_ARCH_CHIP_S32K1XX=y
CONFIG_ARCH_ARMV7M=y
CONFIG_ARCH_CORTEXM4=y
CONFIG_ARCH_FAMILY=\armv7-m
CONFIG_ARCH_CHIP=\s32k1xx
CONFIG_ARM_THUMB=y
CONFIG_ARM_HAVE_MPU_UNIFIED=y
CONFIG_ARCH_HAVE_HARDFAULT_DEBUG=y
CONFIG_ARCH_HAVE_MEMFAULT_DEBUG=y
CONFIG_ARCH_HAVE_BUSFAULT_DEBUG=y
CONFIG_ARCH_HAVE_USAGEFAULT_DEBUG=y
CONFIG_ARCH_CHIP_S32K148=y
CONFIG_ARCH_CHIP_S32K14X=y
CONFIG_S32K1XX_HAVE_ENET=y
CONFIG_S32K1XX_HAVE_EWM=y
CONFIG_S32K1XX_HAVE_FTM2=y
CONFIG_S32K1XX_HAVE_FTM3=y
CONFIG_S32K1XX_HAVE_FTM4=y
CONFIG_S32K1XX_HAVE_FTM5=y
CONFIG_S32K1XX_HAVE_FTM6=y
CONFIG_S32K1XX_HAVE_FTM7=y
CONFIG_S32K1XX_HAVE_HSRUN=y
CONFIG_S32K1XX_HAVE_LMEM=y
CONFIG_S32K1XX_HAVE_LPI2C1=y
CONFIG_S32K1XX_HAVE_LPSPI1=y
CONFIG_S32K1XX_HAVE_LPSPI2=y
CONFIG_S32K1XX_HAVE_FLEXCAN1=y
CONFIG_S32K1XX_HAVE_FLEXCAN2=y
CONFIG_S32K1XX_HAVE_SAI=y
CONFIG_S32K1XX_HAVE_SPLL=y
CONFIG_S32K1XX_LPUART=y
CONFIG_S32K1XX_LPUART1=y
CONFIG_S32K1XX_WDT_DISABLE=y
CONFIG_S32K1XX_FLASHCFG_BACKDOOR1=0xffffffff
CONFIG_S32K1XX_FLASHCFG_BACKDOOR2=0xffffffff
CONFIG_S32K1XX_FLASHCFG_FPROT=0xffffffff
CONFIG_S32K1XX_FLASHCFG_FSEC=0xfe
CONFIG_S32K1XX_FLASHCFG_FOPT=0x7f
CONFIG_S32K1XX_FLASHCFG_FEPROT=0xff
CONFIG_S32K1XX_FLASHCFG_FDPROT=0xff
CONFIG_ARCH_TOOLCHAIN_GNU=y
CONFIG_ARCH_TOOLCHAIN_GCC=y
CONFIG_ARCH_HAVE_IRQTRIGGER=y
CONFIG_ARCH_HAVE_IRQPRIO=y
CONFIG_ARCH_HAVE_FORK=y
CONFIG_ARCH_HAVE_FPU=y
CONFIG_ARCH_HAVE_MPU=y
CONFIG_ARCH_HAVE_RESET=y
CONFIG_ARCH_HAVE_TESTSET=y
CONFIG_ARCH_HAVE_THREAD_LOCAL=y
CONFIG_ARCH_HAVE_FETCHADD=y
CONFIG_ARCH_HAVE_SYSCALL_HOOKS=y
CONFIG_ARCH_HAVE_BACKTRACE=y
CONFIG_ARCH_HAVE_DEBUG=y
CONFIG_ARCH_HAVE_PERF_EVENTS=y
CONFIG_ARCH_HAVE_CPUINFO=y
CONFIG_ARCH_CPUINFO_FREQ_KHZ=0
CONFIG_ARCH_HAVE_TCBINFO=y
CONFIG_ARCH_STACKDUMP=y
CONFIG_ARCH_STACKDUMP_MAX_LENGTH=0
CONFIG_ARCH_HAVE_RAMFUNCS=y
CONFIG_ARCH_RAMFUNCS=y
CONFIG_ARCH_HAVE_RAMVECTORS=y
CONFIG_BOARD_LOOPSPERMSEC=6667
CONFIG_ARCH_HAVE_INTERRUPTSTACK=y
CONFIG_ARCH_INTERRUPTSTACK=0
CONFIG_ARCH_HAVE_HIPRI_INTERRUPT=y
CONFIG_BOOT_RUNFROMFLASH=y
CONFIG_RAM_START=0x1ffe0000
CONFIG_RAM_SIZE=258048
CONFIG_FLASH_START=0x0
CONFIG_FLASH_SIZE=0
CONFIG_ARCH_BOARD_S32K148EVB=y
CONFIG_ARCH_BOARD=\s32k148evb
CONFIG_ARCH_HAVE_LEDS=y
CONFIG_ARCH_LEDS=y
CONFIG_ARCH_HAVE_BUTTONS=y
CONFIG_ARCH_HAVE_IRQBUTTONS=y
CONFIG_BOARD_CRASHDUMP_NONE=y
CONFIG_BOARDCTL=y
CONFIG_BOARDCTL_MKRD=y
CONFIG_BOARD_MEMORY_RANGE=\
CONFIG_DISABLE_OS_API=y
CONFIG_USEC_PER_TICK=1000
CONFIG_TIMER_ADJUST_USEC=0
CONFIG_START_YEAR=2021
CONFIG_START_MONTH=9
CONFIG_START_DAY=6
CONFIG_PREALLOC_TIMERS=4
CONFIG_IRQ_NWORKS=8
CONFIG_IRQ_WORK_SECTION=\
CONFIG_IRQ_WORK_STACKSIZE=2048
CONFIG_INIT_ENTRY=y
CONFIG_INIT_ARGS=\
CONFIG_INIT_STACKSIZE=2048
CONFIG_INIT_PRIORITY=100
CONFIG_INIT_ENTRYPOINT=\nsh_main
CONFIG_INIT_ENTRYNAME=\nsh_main
CONFIG_RR_INTERVAL=200
CONFIG_TASK_NAME_SIZE=31
CONFIG_SCHED_HAVE_PARENT=y
CONFIG_SCHED_WAITPID=y
CONFIG_PTHREAD_MUTEX_ROBUST=y
CONFIG_PTHREAD_MUTEX_DEFAULT_PRIO_NONE=y
CONFIG_SCHED_CPULOAD_NONE=y
CONFIG_SCHED_CPULOAD_TICKSPERSEC=100
CONFIG_SCHED_PROFILE_TICKSPERSEC=1000
CONFIG_SCHED_STACK_RECORD=0
CONFIG_DEV_CONSOLE=y
CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=8
CONFIG_FILE_STREAM=y
CONFIG_SIG_PREALLOC_ACTIONS=4
CONFIG_SIG_ALLOC_ACTIONS=1
CONFIG_SIG_PREALLOC_IRQ_ACTIONS=8
CONFIG_SIG_DEFAULT=y
CONFIG_SIG_SIGKILL_ACTION=y
CONFIG_SIG_SIGSTOP_ACTION=y
CONFIG_PREALLOC_MQ_MSGS=8
CONFIG_PREALLOC_MQ_IRQ_MSGS=8
CONFIG_MQ_MAXMSGSIZE=32
CONFIG_DISABLE_MQUEUE_NOTIFICATION=y
CONFIG_DEFAULT_TASK_STACKSIZE=2048
CONFIG_IDLETHREAD_STACKSIZE=1024
CONFIG_PTHREAD_STACK_MIN=256
CONFIG_PTHREAD_STACK_DEFAULT=2048
CONFIG_PTHREAD_GUARDSIZE_DEFAULT=0
CONFIG_GROUP_KILL_CHILDREN_TIMEOUT_MS=-1
CONFIG_PID_INITIAL_COUNT=16
CONFIG_ARCH_HAVE_I2CRESET=y
CONFIG_DEV_NULL=y
CONFIG_DEV_ZERO=y
CONFIG_DEV_OPTEE_NONE=y
CONFIG_DRVR_MKRD=y
CONFIG_ARCH_HAVE_RDWR_MEM_CPU_RUN=y
CONFIG_ARCH_HAVE_SERIAL_TERMIOS=y
CONFIG_SERIAL=y
CONFIG_SERIAL_CONSOLE=y
CONFIG_MCU_SERIAL=y
CONFIG_STANDARD_SERIAL=y
CONFIG_SERIAL_NPOLLWAITERS=4
CONFIG_LPUART1_SERIAL_CONSOLE=y
CONFIG_LPUART1_SERIALDRIVER=y
CONFIG_LPUART1_RXBUFSIZE=256
CONFIG_LPUART1_TXBUFSIZE=256
CONFIG_LPUART1_BAUD=115200
CONFIG_LPUART1_BITS=8
CONFIG_LPUART1_PARITY=0
CONFIG_LPUART1_2STOP=0
CONFIG_LPUART1_NOIFLOWCONTROL=y
CONFIG_SYSLOG=y
CONFIG_SYSLOG_DEFAULT_MASK=0xff
CONFIG_SYSLOG_CRLF=y
CONFIG_SYSLOG_MAX_CHANNELS=1
CONFIG_SYSLOG_DEVPATH=/dev/ttyS1
CONFIG_SYSLOG_DEFAULT=y
CONFIG_ARCH_HAVE_PHY=y
CONFIG_ARCH_PHY_INTERRUPT=y
CONFIG_ARCH_HAVE_NETDEV_STATISTICS=y
CONFIG_FS_NEPOLL_DESCRIPTORS=8
CONFIG_FS_LOCK_BUCKET_SIZE=0
CONFIG_SENDFILE_BUFSIZE=512
CONFIG_FS_BACKTRACE=0
CONFIG_FS_MQUEUE_VFS_PATH=/var/mqueue
CONFIG_FS_MQUEUE_NPOLLWAITERS=4
CONFIG_FS_ANONMAP=y
CONFIG_FS_PROCFS=y
CONFIG_NXFONTS_PACKEDMSFIRST=y
CONFIG_MM_DEFAULT_MANAGER=y
CONFIG_MM_DEFAULT_ALIGNMENT=8
CONFIG_MM_NODE_GUARDSIZE=0
CONFIG_MM_REGIONS=1
CONFIG_MM_MAP_COUNT_MAX=1024
CONFIG_MM_BACKTRACE=-1
CONFIG_MM_FREE_DELAYCOUNT_MAX=0
CONFIG_MM_HEAP_BIGGEST_COUNT=30
CONFIG_MM_HEAP_MEMPOOL_THRESHOLD=-1
CONFIG_BINFMT_ELF_RELOCATABLE=y
CONFIG_STDIO_BUFFER_SIZE=64
CONFIG_STDIO_LINEBUFFER=y
CONFIG_NUNGET_CHARS=2
CONFIG_LIBC_LONG_LONG=y
CONFIG_ARCH_LOWPUTC=y
CONFIG_LIBC_RAND_ORDER=1
CONFIG_LIBC_HOMEDIR=/
CONFIG_LIBC_TMPDIR=/tmp
CONFIG_LIBC_MAX_TMPFILE=32
CONFIG_LIBC_MAX_EXITFUNS=0
CONFIG_POSIX_SPAWN_DEFAULT_STACKSIZE=2048
CONFIG_LIBC_HOSTNAME=\
CONFIG_LIBC_OPEN_MAX=256
CONFIG_NAME_MAX=32
CONFIG_PATH_MAX=256
CONFIG_LINE_MAX=80
CONFIG_LIBC_STRERROR_ERRNUM=y
CONFIG_LIBC_NEWLIB_OPTSPEED=y
CONFIG_LIBC_STRSIGNAL=y
CONFIG_TLS_NELEM=0
CONFIG_TLS_TASK_NELEM=0
CONFIG_TLS_NCLEANUP=0
CONFIG_LIBC_GAISTRERROR_ERRNUM=y
CONFIG_LIBC_FTOK_VFS_PATH=/var/ftok
CONFIG_LIBC_MEMFD_ERROR=y
CONFIG_LIBC_TEMPBUFFER=y
CONFIG_LIBC_MAX_TEMPBUFFER=2
CONFIG_LIBC_TEMPBUFFER_MALLOC=y
CONFIG_LIBC_MUTEX_BACKTRACE=0
CONFIG_BUILTIN=y
CONFIG_SYMTAB_ORDEREDBYNAME=y
CONFIG_STREAM_OUT_BUFFER_SIZE=64
CONFIG_STREAM_HEXDUMP_BUFFER_SIZE=128
CONFIG_STREAM_BASE64_BUFFER_SIZE=128
CONFIG_LIBC_INLINE_QUEUE=y
CONFIG_LIBM_TOOLCHAIN=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_LIBCXXMINI=y
CONFIG_CXX_STANDARD=\gnu++17
CONFIG_BUILTIN_TOOLCHAIN=y
CONFIG_COVERAGE_NONE=y
CONFIG_COVERAGE_DEFAULT_PREFIX_STRIP=\0
CONFIG_COVERAGE_DEFAULT_PREFIX=/data
CONFIG_PROFILE_NONE=y
CONFIG_BENCHMARK_THREAD_METRIC=y
CONFIG_BENCHMARK_THREAD_METRIC_PREEMPTIVE_SCHEDULE=y
CONFIG_BENCHMARK_THREAD_METRIC_PREEMPTIVE_SCHEDULE_PRIORITY=100
CONFIG_BENCHMARK_THREAD_METRIC_PREEMPTIVE_SCHEDULE_STACKSIZE=2048
CONFIG_BENCHMARK_THREAD_METRIC_PREEMPTIVE_SCHEDULE_PRINTS=y
CONFIG_NSH_LIBRARY=y
CONFIG_NSH_PROMPT_STRING=\nsh>
CONFIG_NSH_PROMPT_MAX=32
CONFIG_NSH_PROMPT_ENV=\PS1
CONFIG_NSH_PROMPT_SUFFIX=>
CONFIG_NSH_READLINE=y
CONFIG_NSH_MAXARGUMENTS=7
CONFIG_NSH_NESTDEPTH=3
CONFIG_NSH_ALIAS=y
CONFIG_NSH_ALIAS_MAX_AMOUNT=1
CONFIG_NSH_BUILTIN_APPS=y
CONFIG_NSH_DISABLE_DATE=y
CONFIG_NSH_DISABLE_LOSMART=y
CONFIG_NSH_DISABLE_LOMTD=y
CONFIG_NSH_DISABLE_MB=y
CONFIG_NSH_DISABLE_MH=y
CONFIG_NSH_DISABLE_MW=y
CONFIG_NSH_DISABLE_TIMEDATECTL=y
CONFIG_NSH_CODECS_BUFSIZE=128
CONFIG_NSH_PROC_MOUNTPOINT=/proc
CONFIG_NSH_FILEIOSIZE=512
CONFIG_NSH_SYSINITSCRIPT=\init.d/rc.sysinit
CONFIG_NSH_INITSCRIPT=\init.d/rcS
CONFIG_NSH_SCRIPT_REDIRECT_PATH=\
CONFIG_NSH_CONSOLE=y
CONFIG_NSH_ARCHINIT=y
CONFIG_SYSTEM_DD=y
CONFIG_SYSTEM_DD_PROGNAME=\dd
CONFIG_SYSTEM_DD_PRIORITY=100
CONFIG_SYSTEM_DD_STACKSIZE=2048
CONFIG_SYSTEM_DD_STATS=y
CONFIG_SYSTEM_NSH=y
CONFIG_SYSTEM_NSH_PRIORITY=100
CONFIG_SYSTEM_NSH_STACKSIZE=2048
CONFIG_SYSTEM_NSH_PROGNAME=\nsh
CONFIG_SYSTEM_READLINE=y
CONFIG_READLINE_HAVE_EXTMATCH=y
CONFIG_READLINE_ECHO=y
Host system OS: Ubuntu 22.04.5 LTS Linux D-11128L 6.8.0-79-generic #79~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Aug 15 16:54:53 UTC 2 x86_64 x86_64
Host system PATH: /home/buildpc/.local/bin /home/buildpc/.local/bin /home/buildpc/.local/bin /home/buildpc/.local/bin /home/buildpc/.local/bin /home/buildpc/.local/bin /home/buildpc/.local/bin /home/buildpc/.local/bin /home/buildpc/zephyrproject/zephyr/scripts /home/buildpc/.local/bin /home/buildpc/.local/bin /home/buildpc/.local/bin /home/buildpc/.local/bin /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /usr/games /usr/local/games /snap/bin /home/buildpc/.dotnet/tools /home/buildpc/Harish/gcc-arm-none-eabi-10.3-2021.10/bin /home/buildpc/Harish/gcc-arm-none-eabi-10.3-2021.10/bin
Verification
- [x] I have verified before submitting the report.
Can i make this as help instead of bug