All of lore.kernel.org
 help / color / mirror / Atom feed
* Issue with cec_register_adapter calling request_module() from an async context when called from intel_dp_detect
@ 2021-02-17 12:24 ` Hans de Goede
  0 siblings, 0 replies; 22+ messages in thread
From: Hans de Goede @ 2021-02-17 12:24 UTC (permalink / raw)
  To: Hans Verkuil; +Cc: intel-gfx, Linux Media Mailing List

<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
 rc_register_device+0x108/0x510
 cec_register_adapter+0x5c/0x280 [cec]
 drm_dp_cec_set_edid+0x11e/0x178 [drm_kms_helper]
 intel_dp_set_edid+0x8d/0xc0 [i915]
 intel_dp_detect+0x188/0x5c0 [i915]
 drm_helper_probe_single_connector_modes+0xc2/0x6d0 [drm_kms_helper]
 ? krealloc+0x7b/0xb0
 drm_client_modeset_probe+0x25b/0x1320 [drm]
 ? kfree+0x1ea/0x200
 ? sched_clock+0x5/0x10
 ? sched_clock_cpu+0xc/0xa0
 __drm_fb_helper_initial_config_and_unlock+0x37/0x470 [drm_kms_helper]
 ? _cond_resched+0x16/0x40
 intel_fbdev_initial_config+0x14/0x30 [i915]
 async_run_entry_fn+0x39/0x160

So 2 questions:

1. Can we get this fixed please ?
   Related to this, what happens if we make this an async modprobe
   (when running from async context) is that a problem, or is it fine
   if the rc_map module gets loaded later ?

2. If the answer to 1. is "tricky", "maybe" or some such then can we
look into a workaround here ? E.g. do we know in advance which module
is going to be requested (1), or does that depend on the EDID data ?

Regards,

Hans


1) And can we thus do tricks with a softdep on it ?


^ permalink raw reply	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2021-02-18 19:50 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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:24 ` [Intel-gfx] " Hans de Goede
2021-02-17 12:41 ` Hans Verkuil
2021-02-17 12:41   ` [Intel-gfx] " Hans Verkuil
2021-02-17 14:32   ` Sean Young
2021-02-17 14:32     ` [Intel-gfx] " Sean Young
2021-02-17 15:04     ` Hans de Goede
2021-02-17 15:04       ` [Intel-gfx] " Hans de Goede
2021-02-17 15:11       ` Sean Young
2021-02-17 15:11         ` [Intel-gfx] " Sean Young
2021-02-17 16:29         ` Hans Verkuil
2021-02-17 16:29           ` [Intel-gfx] " Hans Verkuil
2021-02-18  8:52           ` Sean Young
2021-02-18  8:52             ` [Intel-gfx] " Sean Young
2021-02-18  8:59             ` Hans Verkuil
2021-02-18  8:59               ` [Intel-gfx] " Hans Verkuil
2021-02-18 15:33           ` Hans de Goede
2021-02-18 15:33             ` [Intel-gfx] " Hans de Goede
2021-02-18 16:38             ` Sean Young
2021-02-18 16:38               ` [Intel-gfx] " Sean Young
2021-02-18 18:37               ` Hans de Goede
2021-02-18 18:37                 ` [Intel-gfx] " Hans de Goede

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.