Repository navigation
Resolve a handle's driver functions once, at open - #71
Merged
Merged
Conversation
read, write, ioctl and flush looked up the driver's DIF function (Dmod_GetDifFunction(), comparing signatures) on every call; an audio stream writes hundreds of times a second through two nodes. They are resolved when the file is opened and kept in its handle. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
fread,fwrite,ioctl,flushandsynclooked up the driver's DIF function withDmod_GetDifFunction()on every call, which compares signature strings. An audio stream writes hundreds of times a second through two nodes (the codec, then its SAI), and a profile on the STM32F746G-DISCO showed the signature comparisons as a visible share of the audio service's CPU.The functions are now resolved once, when the file is opened, and kept in the handle. The handle keeps its driver node for its lifetime. It is zeroed at allocation, so
/dev/nullhandles hold NULLs.The file-system layer above already caches its own DIF functions (dmvfs#61); this is the same for the driver layer below.
Test plan
ctestwith-DDMDEVFS_BUILD_TESTS=ON: everything passes excepttest_dmdevmon, which fails on main as well (test_orderalso fails there now and then)🤖 Generated with Claude Code