Re: [snd_hda_intel] snd_hda_intel causes high CPU lockup and system instability if mic disabled in BIOS on Lenovo P50
From: Takashi Iwai
Date: Wed Dec 05 2018 - 09:08:22 EST
On Sat, 01 Dec 2018 20:33:16 +0100,
Alexander Kappner wrote:
>
> On Tue, 27 Nov 2018, Takashi Iwai wrote:
>
> > On Tue, 27 Nov 2018 06:34:02 +0100,
> > Alexander Kappner wrote:
> >>
> >>
> >>
> >>
> >> On Mon, 26 Nov 2018, Takashi Iwai wrote:
> >>
> >>> On Mon, 26 Nov 2018 00:17:15 +0100,
> >>> Alexander Kappner wrote:
> >>>>
> >>>> My Lenovo P50 laptop has a BIOS option to disable the microphone. When
> >>>> this option gets chosen, the snd_hda_intel driver causes high CPU load
> >>>> on a single kworker thread, spinning on "process_unsol_events", and
> >>>> system
> >>>> instability. This behavior occurs from the time that the snd_hda_intel
> >>>> module is loaded, irrespective of whether anything is attempting to access
> >>>> the mic. The sound output still works.
> >>>>
> >>>> When in this state, the module cannot be removed cleanly; attempting to
> >>>> remove it (even without rmmod -f) triggers an oops.
> >>>>
> >>>> I have attached two exemplary dmesg outputs. Strangely enough, the exact
> >>>> location of the oops varies, but further up the call chain, I always see
> >>>> process_unsol_events.
> >>>>
> >>>> When the mic is not disabled in the BIOS, the module works stable,
> >>>> regardless whether or not the mic is muted in ALSA.
> >>>>
> >>>> I wasn't able to pinpoint the root cause. Any pointers on where to
> >>>> start? Much appreciated.
> >>>
> >>> Could you load snd-hda-intel driver with probe_only=1 option, and give
> >>> alsa-info.sh output (run it with --no-upload option)? This should
> >>> leave only the codec probing without configuring, so we can see the
> >>> codec widget contents and check the emulator.
> >>>
> >>>
> >>> thanks,
> >>>
> >>> Takashi
> >>>
> >>
> >> Hi Takashi,
> >>
> >> thank you for looking into this. Please see quoted below the output of
> >> alsa-info.sh (after "modprobe snd_hda_intel probe_only=1").
> >
> > This is the state where BIOS disabled the mic, right?
> > It seems that BIOS doesn't change the pin configuration. The pin NID
> > 0x18 and 0x19 still show up as the mic jack and dock mic jack, as well
> > as the built-in mic on NID 0x12. And I couldn't see anything wrong in
> > the emulator with this input.
> >
> > When BIOS disables the mic, how is supposed? Does it disable all
> > mics, including built-in one?
> >
> > Could you check alsa-info.sh outputs on both BIOS mic disable and
> > enabled (but keep probe_only=1 option in both cases)?
> >
> > Also alsa-info.sh outputs on both cases without probe_only=1 would be
> > helpful, too.
> >
> >
> > thanks,
> >
> > Takashi
> >
> Hi Takashi,
>
> as requestd, please see attached four files, reflecting each
> combination of probe_only and mic enabled/disabled. To answer your
> question -- yes, the initial file I had sent reflected the mic
> disabled state.
>
> The BIOS option definitely disables the internal microphone. I could
> not test whether it would also disable other microphones
> (e.g. externally connected) since I do not have an external mic, but I
> will find out.
Hrm, that's strange. The mic_enabled_default.txt shows "Mic Jack"
false while the mic_disabled_default.txt shows "Mic Jack" true.
It sounds like other way round. Could you confirm this behavior?
In anyway, there seems no difference in the pin configs or such
between BIOS mic enable/disable. So this shouldn't be the cause.
And I noticed that you're testing 4.19-rc4. Could you test with 4.19
final or 4.19.y stable, at least?
thanks,
Takashi