Use a critical section mutex in CAN Fdcan driver. #4271
Merged
+132
−182
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.
The FDCAN driver was using a static function to hand out &mut State internally. Generally, care was taken to only access this from within a critical section or Interrupt. The interrupt case is an issue, if some code decided to [de]configure the buffering mode from a higher priority interrupt level than the CAN interrupt. This seems unlikely, anyway...
This change was proposed by @DrTobe in: #4223
This required: #4265 as a dependency. Which also points us to the fact that buffered mode was unsound if the Channel was constructed with a Raw mutex. The first commit in this series blocks that.
This patch has been tested on STM32G431 boards, mainly with the buffered mode.