Hello Sebastian, On Wednesday 21 of September 2016 09:08:25 Sebastian Huber wrote: > Hello, > > I checked in a patch set today that reworks the thread priority > management. This improves the priority inheritance protocol for example.
big congratulation and thanks. I have checked master today and my tests are happy about the change. I have tested on i386 under QEMU in UP configuration for now. I have test for checking priority release timing included in my RTEMS templates for long time This one is based on classic API http://rtime.felk.cvut.cz/gitweb/rtems-devel.git/tree/HEAD:/rtems-tests/prioinh_check The second is POSIX based and actual test file "prio_inherit_test.c" can be compiled for Linux, VxWorks etc. http://rtime.felk.cvut.cz/gitweb/rtems-devel.git/tree/HEAD:/rtems-tests/prioinh_posix I am attaching logs. The POSIX test on actual RTEMS implementation "prioinh_posix-new.log" matches "prioinh_posix-linux-1-cpu.log" matches Linux one when limited to one CPU taskset -c 0 ./prioinh_posix-linux (The test has to be run by root or user with RT capabilities on Linux). The difference between previous RTEMS implementation prioinh_posix-old.log and actual prioinh_posix-new.log in the form of diff RTEMS v 4.11.99 Starting application prioinh_check RTEMS Shell on /dev/console. Use 'help' to list commands. [/] # *** Starting up Task_1 *** THI created TMID created LO created 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) TLO released (RLO) 1 going to release RMID 1 going to release SHI -1 going to release SLO THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep -1 released both SHI and SLO -1 going to sleep -TLO obtained SLO -TLO going to release SLO -TLO released SLO -1 obtained SLO -1 going to release RLO -1 obtained SHI -1 going to release RHI -THI released (RHI) -TLO released (RLO) -1 going to release RMID -1 going to release SHI 1 going to release SLO -THI obtained SHI -THI going to release SHI -THI released SHI -MID released (RMID) -MID going to sleep 1 released both SHI and SLO 1 going to sleep Important is that when low priority thread releases semaphore/mutex shared with high pririty thread then it keeps the priority gained from high priority thread when it blocks on that semaphore. RLO and RHI are additional semaphores which are controlled by test controllong task "1". This way it is ensured that semaphores/mutexes SHI and SLO are obtained by TLO and THI task is such order that THI task has to wait for TLO task. Interpreting data recorded on SMP system is much more complex and I do not remember if the sequnce stays or stays not deterministic in such case. It is different for sure, because outputs can go in parallel. But check can be used even on SMP to check for late priority release. Best wishes, Pavel
*** Starting up Task_1 *** THI created TMID created LO created 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 going to release SLO 1 released both SHI and SLO 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 going to release SLO 1 released both SHI and SLO 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 going to release SLO 1 released both SHI and SLO 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 going to release SLO 1 released both SHI and SLO 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 going to release SLO 1 released both SHI and SLO 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 going to release SLO 1 released both SHI and SLO 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 going to release SLO 1 released both SHI and SLO 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 going to release SLO 1 released both SHI and SLO 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 going to release SLO 1 released both SHI and SLO 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 going to release SLO 1 released both SHI and SLO 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 going to release SLO 1 released both SHI and SLO 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 going to release SLO 1 released both SHI and SLO 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 going to release SLO 1 released both SHI and SLO 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 going to release SLO 1 released both SHI and SLO 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 going to release SLO 1 released both SHI and SLO 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 going to release SLO 1 released both SHI and SLO 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep
RTEMS v 4.11.99 Starting application prioinh_check RTEMS Shell on /dev/console. Use 'help' to list commands. [/] # *** Starting up Task_1 *** THI created TMID created LO created 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 going to release SLO 1 released both SHI and SLO 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 going to release SLO 1 released both SHI and SLO 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 going to release SLO 1 released both SHI and SLO 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 going to release SLO 1 released both SHI and SLO 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 going to release SLO 1 released both SHI and SLO 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 going to release SLO 1 released both SHI and SLO 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO
*** Starting up Task_1 *** THI created TMID created LO created 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI TLO released (RLO) THI released (RHI) 1 going to release RMID MID released (RMID) 1 going to release SHI THI obtained SHI MID going to sleep THI going to release SHI THI released SHI 1 going to release SLO 1 released both SHI and SLO TLO obtained SLO 1 going to sleep TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID MID released (RMID) 1 going to release SHI THI obtained SHI MID going to sleep THI going to release SHI THI released SHI 1 going to release SLO 1 released both SHI and SLO TLO obtained SLO 1 going to sleep TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI TLO released (RLO) THI released (RHI) 1 going to release RMID MID released (RMID) MID going to sleep 1 going to release SHI THI obtained SHI THI going to release SHI THI released SHI 1 going to release SLO 1 released both SHI and SLO TLO obtained SLO TLO going to release SLO TLO released SLO 1 going to sleep 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID MID released (RMID) 1 going to release SHI THI obtained SHI MID going to sleep THI going to release SHI THI released SHI 1 going to release SLO 1 released both SHI and SLO TLO obtained SLO 1 going to sleep TLO going to release SLO TLO released SLO
RTEMS v 4.11.99 Starting application prioinh_check RTEMS Shell on /dev/console. Use 'help' to list commands. [/] # *** Starting up Task_1 *** THI created TMID created 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) LO created TLO released (RLO) 1 priority is 40 1 going to release RMID 1 going to release SHI THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 priority is 50 1 going to release SLO 1 released both SHI and SLO 1 priority is 50 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 priority is 40 1 going to release RMID 1 going to release SHI THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 priority is 50 1 going to release SLO 1 released both SHI and SLO 1 priority is 50 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 priority is 40 1 going to release RMID 1 going to release SHI THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 priority is 50 1 going to release SLO 1 released both SHI and SLO 1 priority is 50 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 priority is 40 1 going to release RMID 1 going to release SHI THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 priority is 50 1 going to release SLO 1 released both SHI and SLO 1 priority is 50 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 priority is 40 1 going to release RMID 1 going to release SHI THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 priority is 50 1 going to release SLO 1 released both SHI and SLO 1 priority is 50 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO)
RTEMS v 4.11.99 Starting application prioinh_check RTEMS Shell on /dev/console. Use 'help' to list commands. [/] # *** Starting up Task_1 *** THI created TMID created 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) LO created TLO released (RLO) 1 priority is 40 1 going to release RMID 1 going to release SHI 1 priority is 40 1 going to release SLO THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 released both SHI and SLO 1 priority is 50 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 priority is 40 1 going to release RMID 1 going to release SHI 1 priority is 40 1 going to release SLO THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 released both SHI and SLO 1 priority is 50 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 priority is 40 1 going to release RMID 1 going to release SHI 1 priority is 40 1 going to release SLO THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 released both SHI and SLO 1 priority is 50 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 priority is 40 1 going to release RMID 1 going to release SHI 1 priority is 40 1 going to release SLO THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 released both SHI and SLO 1 priority is 50 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 priority is 40 1 going to release RMID 1 going to release SHI 1 priority is 40 1 going to release SLO THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 released both SHI and SLO 1 priority is 50 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 priority is 40 1 going to release RMID 1 going to release SHI 1 priority is 40 1 going to release SLO THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 released both SHI and SLO 1 priority is 50 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 priority is 40 1 going to release RMID 1 going to release SHI 1 priority is 40 1 going to release SLO THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 released both SHI and SLO 1 priority is 50 1 going to sleep
RTEMS v 4.11.99 Starting application prioinh_check RTEMS Shell on /dev/console. Use 'help' to list commands. [/] # *** Starting up Task_1 *** THI created TMID created LO created 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI 1 going to release SLO THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 released both SHI and SLO 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI 1 going to release SLO THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 released both SHI and SLO 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI 1 going to release SLO THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 released both SHI and SLO 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI 1 going to release SLO THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 released both SHI and SLO 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI 1 going to release SLO THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 released both SHI and SLO 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI 1 going to release SLO THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 released both SHI and SLO 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO 1 obtained SLO 1 going to release RLO 1 obtained SHI 1 going to release RHI THI released (RHI) TLO released (RLO) 1 going to release RMID 1 going to release SHI 1 going to release SLO THI obtained SHI THI going to release SHI THI released SHI MID released (RMID) MID going to sleep 1 released both SHI and SLO 1 going to sleep TLO obtained SLO TLO going to release SLO TLO released SLO
_______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel