eintr: support for blocking syscall INTR (interrupted) mode #13
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When sys_waitforevent() task is preempted due to no input read, the syscall is interrupted.
In that very case, if another task push an IPC and awake the target task, the uapi implementation is continuing its execution just after the effective svc() call, but has not read effective data (due to previous preemption when nothing was read).
In that very case, the waitforevent() uapi implementation must detect such interruption in order to read back the content now that the peer send_ipc() is made.
To do that, a STATUS_INTR (interrupted sycall) has been added, so that the uapi is able to re-execute the sysgate.
This allows fully transparent and homogeneous behavior of waitforevent() whatever the sequential task execution is.
STATUS_INTR has also been added for signal and irq input events, for the very same reason.
For the sleep() case, EINTR is also added for early awoking from sleep() mode, to easily differenciate such case from timeouted sleep, in replacement of the STATUS_OK status code.