Re: [Development report #9] Audio Stack Improvements

From: Baptiste Daroussin <bapt_at_freebsd.org>
Date: Wed, 03 Apr 2024 11:52:07 UTC
On Wed 03 Apr 13:31, Baptiste Daroussin wrote:
> On Tue 02 Apr 16:14, Christos Margiolis wrote:
> > Committed DEVFS_CDEVPRIV(9) patch:
> > - https://cgit.freebsd.org/src/commit/?id=dc831e93bad63f9faea09f1806a7733a40bff316
> > - Updated the SNDCTL_AUDIOINFO ioctl to write /dev/dspX instead of
> >   /dev/dspX.Y to ai->devnode.
> > - Closed https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=246208 as
> >   accessing specific channels through device nodes is no longer
> >   possible.
> > 
> > Committed asynchronous audio device detach patch:
> > - https://cgit.freebsd.org/src/commit/?id=9eff58c6d52b66eb8abe7f724dabcd804a566df4
> > - Fixed a kern_poll() panic caught after applying the patch and
> >   hot-unplugging the audio device while jackd is running:
> >   https://cgit.freebsd.org/src/commit/?id=fba54d0179aabb3d94211ca80f94fe5b98ac6d3b
> > - Will send call-for-testing and mail annoyed people once a snapshot
> >   build with the patch included is built.
> > - Debugging an LOR reported in D44411, although it’s not related to the
> >   patch.
> > 
> > Updates to /dev/sndstat:
> > - https://cgit.freebsd.org/src/commit/?id=6d1cee1640e1c360917e483ece5ec1bde423b788
> > - https://reviews.freebsd.org/D44571
> > - https://reviews.freebsd.org/D44546 (Abandoned since it will break
> >   backwards compatibility and this functionality will be built into a
> >   new userland tool anyway.)
> > 
> > Implementing missing OSSv4 ioctls:
> > - https://reviews.freebsd.org/D44570
> > 
> > Minor patches:
> > - https://cgit.freebsd.org/src/commit/?id=c136e6180e4762c1180d89cd2291fd9a935a721d
> > - https://cgit.freebsd.org/src/commit/?id=b5e55dbf357472ffa39345b30b8b781e988a440f
> > - https://cgit.freebsd.org/src/commit/?id=d46a6a77e8e14177d07e3a53f68b428e5d1cb416
> > 
> > Submitted a 2024Q1 report:
> > https://cgit.freebsd.org/doc/commit/?id=df8f360e93a2fa210dc3a0a7aa4dae6e855a8076
> > 
> > This work is sponsored by the FreeBSD Foundation.
> 
> Thanks a log for your hard work! one thing I would like to report, I had an
> issue with pulseaudio with latest kernel as of today.
> 
> On thing specific my laptop internal audio is actually uaudio which makes it
> maybe a bit specific.
> 
> I have an application which queries pulseaudio every minute to get the status of
> the mixer, this application starts pulseaudio if not present. It starts it a
> first time, the process run but seems to hang somehow and becomes unkillable
> (even via kill -9)
> 
> the backtraces shows: mi_switch+0xba _cv_wait+0xf8 getchns+0x9f
> dsp_poll+0xc4 devfs_poll_f+0x7d kern_poll_kfds+0x3f6 kern_poll+0x9d
> sys_ppoll+0x70 amd64_syscall+0x109 fast_syscall_common+0xf8
> 
> with a kernel from 10 days ago this wasn't happening.
> 
> if I change the PCM_WAIT() macro to use cv_wait_sig then everything seems to be
> back to normal.
> 
> I don't know if that rings a bell or how to help you more on debugging this.
> 
> Best regards,
> Bapt

Self replying to continue the list of issues:
- microphone is not working anymore, while it is recognized
cat /dev/sndstat
Installed devices:
pcm0: <Intel Tiger Lake (HDMI/DP 8ch)> (play)
pcm1: <C-Media Electronics Inc. USB Advanced Audio Device> (play/rec) default


dmesg | grep uaudio
uaudio0 on uhub1
uaudio0: <C-Media Electronics Inc. USB Advanced Audio Device, class 0/0, rev 2.00/4.04, addr 2> on usbus1
uaudio0: Play[0]: 96000 Hz, 2 ch, 24-bit S-LE PCM format, 2x4ms buffer.  (selected)
uaudio0: Play[0]: 48000 Hz, 2 ch, 24-bit S-LE PCM format, 2x4ms buffer.
uaudio0: Play[0]: 44100 Hz, 2 ch, 24-bit S-LE PCM format, 2x4ms buffer.
uaudio0: Record[0]: 48000 Hz, 1 ch, 16-bit S-LE PCM format, 2x4ms buffer.  (selected)
uaudio0: Record[0]: 44100 Hz, 1 ch, 16-bit S-LE PCM format, 2x4ms buffer.
uaudio0: No MIDI sequencer.
pcm1 on uaudio0
uaudio0: HID volume keys found.

I tested with rec (sox program) with firefox configured to use OSS.

Last bug report is the following: suspend to s3 is broken when some music is
being played.

Before your changes there was a end less loop of pcm_unregister waiting on pid
so technically it was already broken.

After your changes, I can see the firefox tab playing something being killed,
and the pcm_unregister is not complaining anymore.
I can see the screen being switched to vt but then nothing is printing on the
screen, but I can here the fan starting spinning like crazy :(

If I don't play music, suspend/resume works properly

Best regards,
Bapt