[igt-dev] [PATCH i-g-t v3 1/6] tests/core_hotunplug: properly finish processes using audio devices
Mauro Carvalho Chehab
mauro.chehab at linux.intel.com
Mon May 16 08:04:21 UTC 2022
On Mon, 16 May 2022 00:24:44 -0700
Lucas De Marchi <lucas.demarchi at intel.com> wrote:
> On Thu, May 12, 2022 at 08:49:50AM +0200, Mauro Carvalho Chehab wrote:
> >On Wed, 11 May 2022 10:03:26 -0700
> >Lucas De Marchi <lucas.demarchi at intel.com> wrote:
> >
> >> On Fri, May 06, 2022 at 01:48:24PM +0200, Mauro Carvalho Chehab wrote:
> >> >From: Mauro Carvalho Chehab <mchehab at kernel.org>
> >> >
> >> >Before unloading or unbinding an audio driver, all processes
> >> >that are using it must be terminated. The current logic seeks
> >> >only for alsactl, but ignore other processes, including
> >> >pulseaudio.
> >> >
> >> >Make the logic more general, extending it to any processes that
> >> >could have an open device under /dev/snd.
> >> >
> >> >It should be noticed that some distros like Fedora and openSUSE
> >> >are now migrating from pulseaudio into pipewire-pulse. Right
> >> >now, there's no standard distribution-agnostic way to request
> >> >pipewire-pulse to stop using audio devices, but there's a new
> >> >patch upstream that will make things easier:
> >> >
> >> > https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/6ad6300ec657c88322a8cd6f3548261d3dc05359
> >> >
> >> >Which should be available for pipewire-pulse versions 0.3.50 and
> >> >upper.
> >>
> >> this is for running tests... I don't think it's really expected to have
> >> pulseaudio or pipewire running. We should basically be doing
> >> systemctl disable/mask as a configuration step.
> >
> >That pretty much depends on where this runs: pipewire-pulse is new.
> >Systems like Fedora and the upcoming RHEL 9 have it loaded by default. Distros
> >with older stacks usually came with pulseaudio, also enabled by default.
> >
> >See, a special-purpose machine that was carefully prepared for CI
> >testing can be configured to have pulseaudio/pipewire-pulse not installed
> >or disabled, but if those are running, they should stop using the
> >audio device before removing the device driver.
> >
> >> And if we want to handle that, why don't we simply systemctl stop them
> >> instead of having specific commands for each of them to unbind?
> >
> >Because it doesn't work. On Fedora 35:
> >
> > $ sudo systemctl stop pipewire-pulse
> > Failed to stop pipewire-pulse.service: Unit pipewire-pulse.service not loaded.
>
> it's on user session, not system.
>
> systemctl --user disable --now pipewire-pulse.socket
> systemctl --user disable --now pipewire-pulse.service
Yeah, true.
>
> My worry is that we have to keep adding logic for specific components.
> You'd probably already have to add support for wireplumber if you follow
> this logic you will also probably have to find a way to stop wireplumber
> that is the new pipewire's session manager being adopted by distros.
This patch series properly covers pipewire-pulse. It doesn't need
anything specific to different types of pipewire session manager
(wireplumber or pipewire media-session), as it uses pipewire reserve
API logic that should work with any session manager.
Btw, I tested this series on Fedora 35 with pipewire-pulse/wireplumber
started as --user, and it properly unloaded snd-hda-intel.
I'd expect that we won't need to change anything for quite a while,
as I can't foresee yet another replacement for puseaudio.
I agree with you that the best is to disable pipewire/pulseaudio
via systemctl, but in case one forgets to do it on some system, this
logic will still make snd-hda-intel unload work.
Besides that, I had already some bad experiences in the past with
systemd issues. Better to not rely only on it to do the right thing.
-
Btw, in long term, the best would be to actually change snd-hda-audio
for it to allow removing/reinserting i915 driver without issues
(but this may require changes at ALSA core).
>
>
> > $ ps ax|grep pulse
> > 2337 ? S<sl 120:47 /usr/bin/pipewire-pulse
> > $ find /etc/systemd/|grep pulse
> > /etc/systemd/user/sockets.target.wants/pipewire-pulse.socket
> >
> >On Ubuntu 20.04:
> >
> > $ sudo systemctl stop pulseaudio
> > Failed to stop pulseaudio.service: Unit pulseaudio.service not loaded.
> > $ ps ax|grep pulse
> > 1469 ? S<sl 0:00 /usr/bin/pulseaudio --daemonize=no --log-target=journal
> > 2061 ? Ssl 0:00 /usr/bin/pulseaudio --daemonize=no --log-target=journal
> >
> > $ find /etc/systemd/|grep pulse
> > /etc/systemd/user/default.target.wants/pulseaudio.service
> > /etc/systemd/user/sockets.target.wants/pulseaudio.socket
>
> same here... ^^^^
>
> I don't really care much, just think not talking with each component
> directly will be lower maintenance long term and fewer chance for bugs.
I actually think just the opposite: relying that all machines in the
world that would run IGT are properly customized to not run any audio
daemons is risky and has a high chance of maintenance and bugs.
IGT should always check it before trying to unload snd-hda-intel, as
any process that would keep a /dev/snd device opened will prevent the
module unload, thus may cause issues while doing i915 unbind/rebind
(or unload/reload).
Regards,
Mauro
More information about the igt-dev
mailing list