[Development report #7] Audio Stack Improvements
- Reply: Mark Johnston : "Re: [Development report #7] Audio Stack Improvements"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 13 Mar 2024 14:44:57 UTC
Working on scrapping sound(4)'s "snd_clone" device cloning framework and using DEVFS_CDEVPRIV(9) instead. Such a change will simplify and reduce code size significantly, as well as improve user-experience. The WIP can be found on my GitHub branch, but I will submit a patch on Phabricator ASAP. https://github.com/christosmarg/freebsd/commit/c8694174e2e9d77ef74c6d8e25d99b2b7d5d5652 - Discussed with Florian Walpen about the patch. - Reduced overall code size ("7 changed files with 327 additions and 1,739 deletions" according to GitHub). - Got rid of all snd_clone* functions, removed clone.* files and related sysctls altogether. - Handled hw.snd.basename_clone to work with the new patch. - Handle character device destroying. https://reviews.freebsd.org/D43545 will be rewritten (and end up noticeably smaller/simpler) on top of this patch once submitted. - Cleaned up patch and fixed most bugs I've spotted so far. - Simplified dsp_open() and dsp_close(). - Removed dsp_cdevinfo* and embedded this information in the cdevpriv(9) structure. - Tested a bunch of different cases. Need to test more and resolve a few remaining bugs. Regarding behavior that is preserved: - Exclusive access of an audio device still works (i.e VCHANs disabled). - Multiple processes can read from/write to the device. - A device can only be opened as many times as the maximum channel number (see PCMMAXCLONE in pcm/sound.h). Behavior changes: - Only one /dev/dspX device is exposed, as opposed to the current /dev/dspX.[X]X devices created by the snd_clone mechanism. The user/application now only needs to access the device through /dev/dspX or /dev/dsp and sound(4) will take care of all necessary audio routing. Pending work: - See if it's worth preserving any of the additional devices in dsp_cdevs[] (see SND_DSP_DEV attribute in pcm/dsp.c). - Make sure no OSS IOCTL breaks. - Add comments to the code. - Write proper commit message. - Update man page. - Update Wiki page once committed. - As already mentioned, rewrite https://reviews.freebsd.org/D43545. Additional work outside the cdevpriv(9) patch includes: Committed snd_hda patch for the Lenovo Ideapad 330-15 and ThinkPad X230. https://cgit.freebsd.org/src/commit/?id=5968e477a560406c480d78ebe438a04f57121119 MFC'd all pending patches to stable/14. Started documenting missing sound(4) sysctls. Reviewed and committed Florian Walpen's recent snd_uaudio(4) patch. https://cgit.freebsd.org/src/commit/?id=a9341f0f0ae01b4d249dbf3bacfa420152c46aef Christos