On 2022-03-07 5:46 PM, Ranjani Sridharan wrote:
- @modres_mutex: For synchronizing any @mods_info updates
Is this mutex really necessary? Can you please elaborate under what circumstances your will have parallel module updates?
Yes, we believe modres_mutex is necessary. All information regarding
modules exposed by the firmware are stored within ->mods_info cache.
That's just a snapshot though. When a new library gets loaded, new
modules may be available for use and so the driver updates the
->mods_info cache to have the latest snapshot. As information found
there is used when streaming (e.g.: instantiating modules), we enter a
scenario when multiple threads could be reading/updating the ->mods_info
at once. To prevent any unwanted behavior, mutex has been added.
This is the part that's hard to follow without seeing the actual code where this new library is loaded. When does a libray get loaded? When you start streaming and you realize that the stream requires a module that is not built into the base FW? Can this be done during topology loading instead?
But that's already done during topology load! If there is no topology telling the driver: "hey, load this lib for me!", nothing gets loaded regardless of how your /lib/firmware looks like. Libraries get loaded during soc-component's (platform component) ->probe(). This is place where snd_soc_tplg_component_load() is called.
However, if platform has no IMR capability, driver has to re-load libraries for all platform components of bound sound cards on every pm_runtime_resume().
Regards, Czarek