software/kernel/liteuart.c: added a workqueue to avoid blocking timer callback #146
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.
With a continuous UART RX stream at high speed, timer callback took a too long time before finishing, or don't finish.
As the result some interrupts are blocked and the kernel hang with the need to force stop/start the computer.
This PR adds a workqueue to delegate RX FIFO read out of the timer callback.
To avoid to adds to long latency, this workqueue is only used after a 256 read sequence. This keep the default behavior in a normal uses.
Note to myself/TODO/FIXME: When the read is transfered to the workqueue, timer callback must avoid to call
mod_timer
and let the workqueue to do this task at the end of execution.