Kernel warning when mode setting with no connectors connected

Russell King - ARM Linux linux at arm.linux.org.uk
Sat Apr 12 03:32:29 PDT 2014


Hi,

I've been seeing the following warning when a mode is attempted to be
set after boot when no display connectors are connected.  This typically
happens if your platform has just a HDMI output, and the TV connected
to the HDMI output is fully powered off.

This has been happening for quite some time now... I should've probably
reported it earlier.  I've seen it both with imx-drm and armada-drm.

WARNING: CPU: 0 PID: 846 at drivers/gpu/drm/drm_crtc.c:2074 drm_mode_set_config_internal+0xd0/0xd8()
Modules linked in: rfcomm bnep bluetooth 6lowpan_iphc brcmfmac brcmutil snd_soc_fsl_spdif imx_pcm_dma imx_sdma imx_thermal imx2_wdt snd_soc_imx_spdif nfsd exportfs
CPU: 0 PID: 846 Comm: Xorg Not tainted 3.14.0+ #1027
Backtrace:
[<c0011cf4>] (dump_backtrace) from [<c0011e94>] (show_stack+0x18/0x1c)
 r6:0000081a r5:00000009 r4:00000000 r3:00000000
[<c0011e7c>] (show_stack) from [<c066b4e8>] (dump_stack+0x74/0x90)
[<c066b474>] (dump_stack) from [<c0024588>] (warn_slowpath_common+0x70/0x90)
 r4:00000000 r3:c09344b8
[<c0024518>] (warn_slowpath_common) from [<c00245cc>] (warn_slowpath_null+0x24/0x2c)
 r8:ea3c3818 r7:00000001 r6:e9904500 r5:00000000 r4:ea3c3818
[<c00245a8>] (warn_slowpath_null) from [<c03474e4>] (drm_mode_set_config_internal+0xd0/0xd8)
[<c0347414>] (drm_mode_set_config_internal) from [<c03497c8>] (drm_mode_setcrtc+0x378/0x4b4)
 r6:ea3c3400 r5:e8d78b00 r4:e9981e48 r3:00000000
[<c0349450>] (drm_mode_setcrtc) from [<c033c9d0>] (drm_ioctl+0x3f4/0x498)
 r10:c06b8fa0 r9:e9981e48 r8:e9981e48 r7:e9980000 r6:e98260c0 r5:000000a2
 r4:ea3c3400
[<c033c5dc>] (drm_ioctl) from [<c01095b8>] (do_vfs_ioctl+0x80/0x5d4)
 r10:00000000 r9:e9980000 r8:00000006 r7:c06864a2 r6:be911850 r5:e9826900
 r4:ea3bf100
[<c0109538>] (do_vfs_ioctl) from [<c0109b4c>] (SyS_ioctl+0x40/0x5c)
 r9:e9980000 r8:00000006 r7:c06864a2 r6:be911850 r5:e9826900 r4:e9826900
[<c0109b0c>] (SyS_ioctl) from [<c000e6e0>] (ret_fast_syscall+0x0/0x30)
 r8:c000e864 r7:00000036 r6:00000006 r5:c06864a2 r4:be911850 r3:00000001
---[ end trace 46155b08f61d1185 ]---

In drm_mode_set_config_internal(), this check is done:

        fb = set->fb;

        ret = crtc->funcs->set_config(set);
        if (ret == 0) {
                /* crtc->fb must be updated by ->set_config, enforces this. */
                WARN_ON(fb != crtc->fb);
        }

However, drm_crtc_helper_set_config() does this:

        if (!set->mode)
                set->fb = NULL;

        if (set->fb) {
...
        } else {
                DRM_DEBUG_KMS("[CRTC:%d] [NOFB]\n", set->crtc->base.id);
                return drm_crtc_helper_disable(set->crtc);
        }

which results in a zero return with crtc->fb set to NULL, possibly
being different to what set->fb was originally.

I haven't debugged this fully yet as the only side effect is the
warning.

-- 
FTTC broadband for 0.8mile line: now at 9.7Mbps down 460kbps up... slowly
improving, and getting towards what was expected from it.


More information about the dri-devel mailing list