Re: BUG caused by "Use new drm_fb_helper functions" series

From: Peter Hurley
Date: Tue Feb 02 2016 - 13:38:58 EST


On 02/01/2016 09:20 PM, Archit Taneja wrote:
> Hi Peter,
>
> On 02/02/2016 02:07 AM, Peter Hurley wrote:
>> Hi Archit,
>>
>> Just booting 4.4-rc5+, I got this splat [1]
>> At first glance, this appears to be a simple fix.
>
> Thanks for sharing this.
>
>>
>> However, I'm concerned that fbcon functions, which may be called with
>> interrupts disabled, are now hooked up to fbdev functions which may assume
>> interrupts are not disabled (as is the case with cfb_imageblit()).
>
> In the case when CONFIG_FB is enabled, drm_fb_helper_cfb_imageblit
> helper simply wraps around cfg_imageblit, so I don't see how we'd have
> any difference in behaviour.


Sorry; terrible attribution on my part.
This bug clearly has nothing to do with this series.

But a better look has me wondering how all these gpus are syncing
the framebuffer for direct access via cfb_imageblit and friends. I only see
nouveau and intel gma even trying.



>> For example, in the splat below, it's a simple fix to make the splat go
>> away with GFP_ATOMIC allocation. However, the following fence wait is _never_
>> going to trigger with interrupts disabled on UP.
>>
>> FWIW, I've been running almost exclusively debug kernel builds so I'm not
>> sure why this hasn't triggered many times before, but it hasn't.
>
> We could revert the patch
> "drm/nouveau: Use new drm_fb_helper functions" and see if we still hit this
> issue.
>
> Thanks,
> Archit
>
>> Regards,
>> Peter Hurley
>>
>>
>> [1] BUG splat
>>
>> [ 37.438494] BUG: sleeping function called from invalid context at /home/peter/src/kernels/mainline/mm/slub.c:1287
>> [ 37.438495] in_atomic(): 1, irqs_disabled(): 1, pid: 2276, name: auditd
>> [ 37.438497] 1 lock held by auditd/2276:
>> [ 37.438507] #0: (audit_cmd_mutex){+.+.+.}, at: [<ffffffff8113a63f>] audit_receive+0x1f/0xa0
>> [ 37.438507] irq event stamp: 1689
>> [ 37.438511] hardirqs last enabled at (1689): [<ffffffff810e9a96>] vprintk_emit+0x236/0x620
>> [ 37.438513] hardirqs last disabled at (1688): [<ffffffff810e9934>] vprintk_emit+0xd4/0x620
>> [ 37.438518] softirqs last enabled at (1652): [<ffffffff81753898>] netlink_poll+0x138/0x1c0
>> [ 37.438520] softirqs last disabled at (1650): [<ffffffff81753857>] netlink_poll+0xf7/0x1c0
>> [ 37.438522] CPU: 7 PID: 2276 Comm: auditd Not tainted 4.4.0-rc5+wip-xeon+debug #rc5+wip
>> [ 37.438523] Hardware name: Dell Inc. Precision WorkStation T5400 /0RW203, BIOS A11 04/30/2012
>> [ 37.438526] ffffffff81ce5cc8 ffff8802a87c3590 ffffffff813fb6c5 ffff8802ac768000
>> [ 37.438528] ffff8802a87c35b8 ffffffff810a6fb9 ffffffff81ce5cc8 0000000000000507
>> [ 37.438530] 0000000000000000 ffff8802a87c35e0 ffffffff810a70b9 00000000024080c0
>> [ 37.438531] Call Trace:
>> [ 37.438535] [<ffffffff813fb6c5>] dump_stack+0x4e/0x79
>> [ 37.438538] [<ffffffff810a6fb9>] ___might_sleep+0x149/0x200
>> [ 37.438540] [<ffffffff810a70b9>] __might_sleep+0x49/0x80
>> [ 37.438544] [<ffffffff81202dfd>] kmem_cache_alloc_trace+0x20d/0x2e0
>> [ 37.438600] [<ffffffffa0272e9b>] ? nouveau_fence_new+0x3b/0x90 [nouveau]
>> [ 37.438624] [<ffffffffa0272e9b>] nouveau_fence_new+0x3b/0x90 [nouveau]
>> [ 37.438649] [<ffffffffa02707b2>] nouveau_channel_idle+0x42/0xb0 [nouveau]
>> [ 37.438673] [<ffffffffa026bb3f>] nouveau_fbcon_sync+0x7f/0xb0 [nouveau]
>> [ 37.438677] [<ffffffff8148998a>] cfb_imageblit+0x9a/0x4d0
>> [ 37.438681] [<ffffffff810d22ef>] ? trace_hardirqs_off_caller+0x1f/0xc0
>> [ 37.438693] [<ffffffffa013d30e>] drm_fb_helper_cfb_imageblit+0xe/0x10 [drm_kms_helper]
>> [ 37.438717] [<ffffffffa026bbc1>] nouveau_fbcon_imageblit+0x51/0xd0 [nouveau]
>> [ 37.438719] [<ffffffff8147c02c>] bit_putcs+0x2dc/0x530
>> [ 37.438721] [<ffffffff810d239d>] ? trace_hardirqs_off+0xd/0x10
>> [ 37.438725] [<ffffffff81476144>] ? get_color.isra.15+0x34/0x130
>> [ 37.438727] [<ffffffff81477278>] fbcon_putcs+0x128/0x160
>> [ 37.438728] [<ffffffff8147bd50>] ? bit_cursor+0x5e0/0x5e0
>> [ 37.438730] [<ffffffff8147756b>] fbcon_redraw.isra.25+0x16b/0x1d0
>> [ 37.438731] [<ffffffff8147894a>] fbcon_scroll+0x1ea/0xce0
>> [ 37.438734] [<ffffffff815112ca>] scrup+0x14a/0x160
>> [ 37.438736] [<ffffffff81511360>] lf+0x80/0x90
>> [ 37.438737] [<ffffffff81511617>] vt_console_print+0x2a7/0x3e0
>> [ 37.438739] [<ffffffff810e89c4>] call_console_drivers.constprop.24+0x144/0x1d0
>> [ 37.438741] [<ffffffff810e9783>] console_unlock+0x463/0x540
>> [ 37.438742] [<ffffffff810e9bba>] vprintk_emit+0x35a/0x620
>> [ 37.438744] [<ffffffff810e9fd9>] vprintk_default+0x29/0x40
>> [ 37.438748] [<ffffffff8119f71a>] printk+0x4d/0x4f
>> [ 37.438750] [<ffffffff81137ad2>] audit_printk_skb+0x62/0x70
>> [ 37.438751] [<ffffffff81137e84>] audit_log_end+0x1d4/0x2d0
>> [ 37.438752] [<ffffffff81137ce0>] ? audit_log_end+0x30/0x2d0
>> [ 37.438754] [<ffffffff81139059>] audit_log_config_change+0x89/0xa0
>> [ 37.438756] [<ffffffff8113a4ca>] audit_receive_msg+0xa5a/0xbb0
>> [ 37.438759] [<ffffffff818481bd>] ? mutex_lock_nested+0x2ed/0x450
>> [ 37.438761] [<ffffffff8113a63f>] ? audit_receive+0x1f/0xa0
>> [ 37.438762] [<ffffffff8113a63f>] ? audit_receive+0x1f/0xa0
>> [ 37.438764] [<ffffffff8113a672>] audit_receive+0x52/0xa0
>> [ 37.438766] [<ffffffff81755652>] netlink_unicast+0xf2/0x1c0
>> [ 37.438767] [<ffffffff81755b07>] netlink_sendmsg+0x3e7/0x620
>> [ 37.438771] [<ffffffff816ff4e8>] sock_sendmsg+0x38/0x50
>> [ 37.438772] [<ffffffff816ff946>] SYSC_sendto+0xf6/0x170
>> [ 37.438775] [<ffffffff8119db8d>] ? context_tracking_exit+0x1d/0x30
>> [ 37.438778] [<ffffffff8100367f>] ? enter_from_user_mode+0x1f/0x50
>> [ 37.438780] [<ffffffff8100377b>] ? syscall_trace_enter_phase1+0xcb/0x130
>> [ 37.438781] [<ffffffff81003017>] ? trace_hardirqs_on_thunk+0x17/0x19
>> [ 37.438784] [<ffffffff8170079e>] SyS_sendto+0xe/0x10
>> [ 37.438786] [<ffffffff8184be36>] entry_SYSCALL_64_fastpath+0x16/0x7a
>>
>