RTEMS | Multiprocessing: five defects which leave a node without an answer (#5746)
Sebastian Huber (@sebhub)
gitlab at rtems.org
Thu Sep 3 02:36:18 UTC 2026
Issue created by Sebastian Huber: https://gitlab.rtems.org/rtems/rtos/rtems/-/work_items/5746
`rtems_semaphore_delete()` passes a thread queue context to
`_Thread_queue_Flush_critical()` without a multiprocessing callout. The flush
copies the callout of the context into the proxy of a remote waiter and calls
it. The context is a local object, so the proxy gets whatever the stack held. A
node which deletes a global semaphore with a remote waiter jumps to that
address and takes a program exception.
`_Thread_queue_Resume()` leaves the callout at the value which
`_Thread_MP_Allocate_proxy()` writes, and that one does nothing.
`_CORE_message_queue_Dequeue_receiver()` and `_CORE_message_queue_Seize()`
reach it without a callout of their own, so a task which sends a message to a
global queue with a remote receiver answers no node. The receiver of the other
node waits without an end.
The clock driver of a BSP with `CLOCK_DRIVER_USE_FAST_IDLE` moves the time
forward tick by tick while the idle thread runs. It leaves the loop only where
a watchdog makes a thread ready. A node of a multiprocessing system waits for a
packet of another node, which no watchdog of this node announces, so the node
runs through every timeout of the wait at once.
The tests search for the task of the remote node in a loop around
`rtems_task_ident()`. The directive reads the local copy of the global object
table, which only the MPCI receive server fills. A test task runs at priority
1, and `mp03` and `mp05` also run it without preemption. The loop calls no
blocking directive, so the server never runs.
`mp03` and `mp12` end while the other node still waits for a reply to a remote
directive. `mp06` starts a timer of five seconds on both nodes and then demands
that no event arrives within one second, which holds only where the timer of
node 1 fires first.
Seven of the thirteen multiprocessing tests print no end of test line on psim.
Found while running the multiprocessing tests on the simulator. This
description was created with Claude Code assistance.
--
View it on GitLab: https://gitlab.rtems.org/rtems/rtos/rtems/-/work_items/5746
You're receiving this email because of your account on gitlab.rtems.org. Unsubscribe from this thread: https://gitlab.rtems.org/-/sent_notifications/5-1x2b1u6p3xcst8vnj9r41d0pm-1d/unsubscribe | Manage all notifications: https://gitlab.rtems.org/-/profile/notifications | Help: https://gitlab.rtems.org/help
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/bugs/attachments/20260903/ed6bd409/attachment-0001.htm>
More information about the bugs
mailing list