Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753323AbbKJPBH (ORCPT ); Tue, 10 Nov 2015 10:01:07 -0500 Received: from foss.arm.com ([217.140.101.70]:56340 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752100AbbKJPBF (ORCPT ); Tue, 10 Nov 2015 10:01:05 -0500 Date: Tue, 10 Nov 2015 15:01:03 +0000 From: Liviu Dudau To: Daniel Vetter , David Airlie , Rob Clark , DRI devel , lkml Subject: drm: Bogus WARN() in drm_atomic_helper_update_legacy_modeset_state() ? Message-ID: <20151110150102.GP963@e106497-lin.cambridge.arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4828 Lines: 117 Hello, When booting my Juno board with the HDLCD driver that I have converted to atomic operations I'm getting the following warning: ------------[ cut here ]------------ WARNING: at /work/repositories/kernel/drivers/gpu/drm/drm_atomic_helper.c:674 Modules linked in: hdlcd(+) clk_scpi CPU: 3 PID: 1375 Comm: systemd-udevd Not tainted 4.3.0-next-20151109+ #5 Hardware name: ARM Juno development board (r0) (DT) task: ffffffc974888b00 ti: ffffffc9755dc000 task.ti: ffffffc9755dc000 PC is at drm_atomic_helper_update_legacy_modeset_state+0x204/0x20c LR is at drm_atomic_helper_commit_modeset_disables+0x1c0/0x394 pc : [] lr : [] pstate: 20000145 sp : ffffffc9755df430 x29: ffffffc9755df430 x28: ffffffc975703600 x27: 0000000000000000 x26: ffffffc976253960 x25: ffffffc976254040 x24: ffffffc000819000 x23: ffffffc000689ea0 x22: ffffffc976251800 x21: ffffffc976251800 x20: 0000000000000000 x19: ffffffc9766b1f80 x18: 00000000715fe015 x17: 0000007fb4b855b0 x16: 0000000000000220 x15: 0000000000000001 x14: 0ffffffffffffffe x13: 0000000000000008 x12: 0101010101010101 x11: ffffffc000964000 x10: ffffffc0009d2000 x9 : 0000000000000000 x8 : ffffffc97ff5f700 x7 : ffffffc97566cb80 x6 : ffffffc9766b1700 x5 : ffffffc975665100 x4 : 0000000000000000 x3 : ffffffc976253960 x2 : ffffffc97566cd00 x1 : ffffffc976253900 x0 : 0000000000000000 ---[ end trace 9fe289f798e7178e ]--- Call trace: [] drm_atomic_helper_update_legacy_modeset_state+0x204/0x20c [] drm_atomic_helper_commit_modeset_disables+0x1c0/0x394 [] drm_atomic_helper_commit+0xe0/0x150 [] drm_atomic_commit+0x40/0x6c [] restore_fbdev_mode+0x294/0x2d4 [] drm_fb_helper_restore_fbdev_mode_unlocked+0x34/0x8c [] drm_fb_helper_set_par+0x2c/0x58 [] fbcon_init+0x4d4/0x534 [] visual_init+0xac/0x104 [] do_bind_con_driver+0x16c/0x398 [] do_take_over_console+0xd8/0x1f4 [] do_fbcon_takeover+0x74/0xf8 [] fbcon_event_notify+0x8a4/0x8f8 [] notifier_call_chain+0x4c/0x88 [] __blocking_notifier_call_chain+0x44/0x74 [] blocking_notifier_call_chain+0x14/0x1c [] fb_notifier_call_chain+0x1c/0x24 [] register_framebuffer+0x1c0/0x2ac [] drm_fb_helper_initial_config+0x25c/0x3ec [] drm_fbdev_cma_init+0x98/0x134 [] hdlcd_drm_bind+0x180/0x498 [hdlcd] [] try_to_bring_up_master.part.5+0xd4/0x118 [] component_master_add_with_match+0xc4/0x148 [] component_master_add+0x10/0x18 [] hdlcd_probe+0x14/0x28 [hdlcd] [] platform_drv_probe+0x54/0xc0 [] driver_probe_device+0x1ec/0x2e8 [] __driver_attach+0x9c/0xa0 [] bus_for_each_dev+0x58/0x98 [] driver_attach+0x20/0x28 [] bus_add_driver+0x1c8/0x22c [] driver_register+0x68/0x108 [] __platform_driver_register+0x4c/0x54 [] hdlcd_init+0x18/0x30 [hdlcd] [] do_one_initcall+0x90/0x1a8 [] do_init_module+0x60/0x1c8 [] load_module+0x1554/0x1c98 [] SyS_finit_module+0x7c/0x88 [] el0_svc_naked+0x24/0x28 The line that triggers the warning is: 674: WARN_ON(!connector->encoder->crtc); As far as I can see the encoder->crtc value is being set to a non-NULL value only in two places: - in drm_atomic_helper_update_legacy_modeset_state() after WARN_ON() encoder->crtc = connector->state->crtc; - in drm_crtc_helper_set_config(drm_mode_set *set): encoder->crtc = new_crtc; Nothing in the call path from drm_atomic_commit() calls crtc_funcs->set_config() or drm_crtc_helper_set_config() directly, so the question is if this WARN() is actually valid. Call path from drm_atomic_commit: drm_atomic_helper_commit() - drm_atomic_helper_prepare_planes() - drm_atomic_helper_swap_state() - drm_atomic_helper_commit_modeset_disables() - disable_outputs() - drm_atomic_helper_update_legacy_modeset_state() - WARN_ON(!connector->encoder->crtc) Best regards, Liviu -- ==================== | I would like to | | fix the world, | | but they're not | | giving me the | \ source code! / --------------- ¯\_(ツ)_/¯ -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/