Re: [Development report #9] Audio Stack Improvements

From: Mark Johnston <markj_at_freebsd.org>
Date: Wed, 03 Apr 2024 13:19:27 UTC
On Wed, Apr 03, 2024 at 01:31:54PM +0200, 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.

Presumably this means that some other thread is holding the device busy,
i.e., sleeping with the device busied, or the busy state was leaked.
PCM_WAIT() can't use cv_wait_sig() directly unless all callers are
patched to handle signals.  So, it'd be useful to see the full "procstat
-kka" output when you have a stuck pulseaudio.

I believe pulseaudio will log to syslog as well, I see its messages in
/var/log/messages on my desktop.  It would be worth checking for
messages on your system.

> I don't know if that rings a bell or how to help you more on debugging this.
> 
> Best regards,
> Bapt