From: Sean Young <sean@mess.org>
To: Hans de Goede <hdegoede@redhat.com>
Cc: Hans Verkuil <hverkuil@xs4all.nl>,
intel-gfx <intel-gfx@lists.freedesktop.org>,
Linux Media Mailing List <linux-media@vger.kernel.org>
Subject: Re: Issue with cec_register_adapter calling request_module() from an async context when called from intel_dp_detect
Date: Thu, 18 Feb 2021 16:38:33 +0000 [thread overview]
Message-ID: <20210218163833.GA15560@gofer.mess.org> (raw)
In-Reply-To: <3e3c983f-b3bc-fe94-9247-69c8d97754df@redhat.com>
Hi Hans,
On Thu, Feb 18, 2021 at 04:33:38PM +0100, Hans de Goede wrote:
> On 2/17/21 5:29 PM, Hans Verkuil wrote:
> > On 17/02/2021 16:11, Sean Young wrote:
> >> Hi,
> >>
> >> On Wed, Feb 17, 2021 at 04:04:11PM +0100, Hans de Goede wrote:
> >>> On 2/17/21 3:32 PM, Sean Young wrote:
> >>>> On Wed, Feb 17, 2021 at 01:41:46PM +0100, Hans Verkuil wrote:
> >>>>> Hi Hans,
> >>>>>
> >>>>> On 17/02/2021 13:24, Hans de Goede wrote:
> >>>>>> <resend with the linux-media list added to the Cc>
> >>>>>>
> >>>>>> Hi Hans,
> >>>>>>
> >>>>>> Fedora has a (opt-in) system to automatically collect backtraces from software
> >>>>>> crashing on users systems.
> >>>>>>
> >>>>>> This includes collecting kernel backtraces (including once triggered by
> >>>>>> WARN macros) while looking a the top 10 of the most reported backtrace during the
> >>>>>> last 2 weeks report from ABRT: https://retrace.fedoraproject.org/faf/problems/
> >>>>>>
> >>>>>> I noticed the following backtrace:
> >>>>>> https://retrace.fedoraproject.org/faf/problems/8150/
> >>>>>> which has been reported 170000 times by Fedora users who have opted-in during the
> >>>>>> last 14 days.
> >>>>>>
> >>>>>> The issue here is that cec_register_adapter ends up calling request_module()
> >>>>>> from an async context, triggering this warn in kernel/kmod.c __request_module():
> >>>>>>
> >>>>>> /*
> >>>>>> * We don't allow synchronous module loading from async. Module
> >>>>>> * init may invoke async_synchronize_full() which will end up
> >>>>>> * waiting for this task which already is waiting for the module
> >>>>>> * loading to complete, leading to a deadlock.
> >>>>>> */
> >>>>>> WARN_ON_ONCE(wait && current_is_async());
> >>>>>>
> >>>>>> The call-path leading to this goes like this:
> >>>>>>
> >>>>>> ? kvasprintf+0x6d/0xa0
> >>>>>> ? kobject_set_name_vargs+0x6f/0x90
> >>>>>> rc_map_get+0x30/0x60
> >>>>>
> >>>>> It's not CEC, it is rc_map_get that calls request_module() for rc-cec.ko.
> >>>>>
> >>>>> I've added Sean Young to the CC list.
> >>>>>
> >>>>> Sean, is it possible to treat rc-cec as a built-in if MEDIA_CEC_RC is set?
> >>>>>
> >>>>> I think this issue is very specific to CEC. I would not expect to see this
> >>>>> with any other rc keymap.
> >>>>
> >>>> So CEC creates an RC device with a keymap (cec keymap, of course) and then
> >>>> the keymap needs to be loaded. We certainly don't want all keymaps as
> >>>> builtins, that would be a waste.
> >>>>
> >>>> The cec keymap is scanned once to build a map from cec codes to linux
> >>>> keycodes; making it builtin is not ideal, and makes the build system a
> >>>> bit messy.
> >>>>
> >>>> I don't think we can load the keymap later, user space may start remapping
> >>>> the keymap from udev.
> >>>>
> >>>> Possibly we could create the cec or rc device later but this could be a bit
> >>>> messy.
> >>>>
> >>>> Could CEC specify:
> >>>>
> >>>> #if IS_ENABLED(CONFIG_MEDIA_CEC_RC)
> >>>> MODULE_SOFTDEP("rc-cec")
> >>>> #endif
> >>>
> >>> That would need to be:
> >>>
> >>> MODULE_SOFTDEP("pre: rc-cec")
> >>>
> >>> I see that the drm_kms_helper and i915 drivers both depend on the cec module already,
> >>> so yes if that module will request for rc-cec to be loaded before it is loaded
> >>> (and thus before i915 is loaded) then that should work around this.
> >>>
> >>> Assuming the user is using a module-loader which honors the softdep...
> >>>
> >>> Also this assumes that rc_map_get is smart enough to not call request_module()
> >>> if the module is already loaded, is that the case ?
> >>
> >> Yes, see rc_map_get().
> >
> > I tried this. It works if CONFIG_RC_CORE is set to m, but setting it to
> > y resulted in the same problem. It looks like MODULE_SOFTDEP only works if rc_main
> > is a module as well.
>
> Yeah that is a known limit of module softdeps, they only work inside modules ...
Yes, I assume this is the problem.
> Still, assuming there is no easy other fix, we could still use this somehow.
>
> I do see that at least Fedora actually has CONFIG_RC_CORE=y for some reason.
This is to make BPF IR decoding possible.
> I guess we could maybe add the softdep to the CONFIG_RC_MAP module or
> maybe to the module which contains the code enabled by CONFIG_DRM_DP_CEC ?
>
> At least Fedora has all drm stuff as modules and also has CONFIG_RC_MAP=m,
>
> I know this is not a real fix but a workaround to get rid of 170,000
> backtraces / 14 days being reported by (opted-in) systems running the
> Fedora generic kernel config would be welcome regardless of it being the
> "perfect" fix.
Of course, I totally agree that a solution is needed.
How about:
1) Use MODULE_SOFTDEP("rc-cec");
2) If it's compiled as a module, rc-cec should be builtin
Sean
next prev parent reply other threads:[~2021-02-18 17:01 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-17 12:24 Issue with cec_register_adapter calling request_module() from an async context when called from intel_dp_detect Hans de Goede
2021-02-17 12:41 ` Hans Verkuil
2021-02-17 14:32 ` Sean Young
2021-02-17 15:04 ` Hans de Goede
2021-02-17 15:11 ` Sean Young
2021-02-17 16:29 ` Hans Verkuil
2021-02-18 8:52 ` Sean Young
2021-02-18 8:59 ` Hans Verkuil
2021-02-18 15:33 ` Hans de Goede
2021-02-18 16:38 ` Sean Young [this message]
2021-02-18 18:37 ` Hans de Goede
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210218163833.GA15560@gofer.mess.org \
--to=sean@mess.org \
--cc=hdegoede@redhat.com \
--cc=hverkuil@xs4all.nl \
--cc=intel-gfx@lists.freedesktop.org \
--cc=linux-media@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox