On Thu, 04 Aug 2016 14:12:09 +0200, Takashi Sakamoto wrote:
On Aug 4 2016 19:28, Mark Brown wrote:
On Thu, Aug 04, 2016 at 12:17:57PM +0900, Takashi Sakamoto wrote:
On Jul 30 2016 07:08, Mark Brown wrote:
The card should be deinstantiated and reinstantiated whenever a component driver unbinds and rebinds (respectively). You'd need to completely deregister the card to change the list of things it's expecting currently.
In a point of application interfaces, I guess that current implementation of ALSA soc part includes a bug that it's possible to unload codec or component modules when any ALSA character devices are opened. The framework has no codes to manage reference counting of character devices or loaded codecs, components.
Yes, exactly - we don't cope very well with that situation and we really ought to but since it's hard to trigger without trying in practice it's never been a priority.
Ugly... completely ugly idea for user space applications and operating system... It's better for developers for ALSA soc part to pay enough attention not only to their hardwares but also to application interfaces.
Please assume that a loaded module for SoC's sound interface which supports Jack detection, and pulseaudio runs on the system. Then, typically, the process listen to ALSA ctrl character device for Jack detection.
In this case, when modules for codec or component are unloaded, what happends?
You can't unload. The module unload is already protected by the proper module refcounting.
In worst case, pulseaudio process can kill the system in a system call path or something else, because the modules for SoC's sound interface is still loaded and userspace applications can execute system calls via ALSA character devices.
It should be forbidden to build ALSA soc part as loadable kernel modules. It's really danger...
The only danger is about the dynamic unbinding, and it has nothing to do with the module. And, protecting the sysfs unbind itself is trivial, too: as I already suggested, we can put the flags in appropriate places.
Takashi