Re: [PATCH] tty: vt: Fix soft lockup in fbcon cursor blink timer.

David Daney
2016-05-18T20:38:23Z

On 05/18/2016 01:24 PM, Scot Doyle wrote:
> On Wed, 18 May 2016, Ming Lei wrote:
>> On Wed, May 18, 2016 at 4:49 AM, Pavel Machek <pavel@ucw.cz> wrote:
>>> On Tue 2016-05-17 11:41:04, David Daney wrote:
>>>> From: David Daney <david.daney@cavium.com>
>>>>
>>>> We are getting somewhat random soft lockups with this signature:
>>>>
>>>> [ 86.992215] [<fffffc00080935e0>] el1_irq+0xa0/0x10c
>>>> [ 86.997082] [<fffffc000841822c>] cursor_timer_handler+0x30/0x54
>>>> [ 87.002991] [<fffffc000810ec44>] call_timer_fn+0x54/0x1a8
>>>> [ 87.008378] [<fffffc000810ef88>] run_timer_softirq+0x1c4/0x2bc
>>>> [ 87.014200] [<fffffc000809077c>] __do_softirq+0x114/0x344
>>>> [ 87.019590] [<fffffc00080af45c>] irq_exit+0x74/0x98
>>>> [ 87.024458] [<fffffc00080fac20>] __handle_domain_irq+0x98/0xfc
>>>> [ 87.030278] [<fffffc000809056c>] gic_handle_irq+0x94/0x190
>>>>
>>>> This is caused by the vt visual_init() function calling into
>>>> fbcon_init() with a vc_cur_blink_ms value of zero. This is a
>>>> transient condition, as it is later set to a non-zero value. But, if
>>>> the timer happens to expire while the blink rate is zero, it goes into
>>>> an endless loop, and we get soft lockup.
>>>>
>>>> The fix is to initialize vc_cur_blink_ms before calling the con_init()
>>>> function.
>>>>
>>>> Signed-off-by: David Daney <david.daney@cavium.com>
>>>> Cc: stable@vger.kernel.org
>>>
>>> Acked-by: Pavel Machek <pavel@ucw.cz>
>>
>> Tested-by: Ming Lei <ming.lei@canonical.com>
>>
>> Thanks David and Pavel for making it work!
>>
>>>
>>> (And it is amazing how many problems configurable blink speed caused).
>>>
>>> Thanks!
>>> Pavel
>>>
>
>
> Dann, Ming and David, thank you so much for all of your effort.
>
> There were three other reports in the past year, each leading to their own
> patch,

Why were none of the patches merged? Were they obviously incorrect, or
is there some other problem that blocks the resolution of this issue?

> of boot lockups occuring when the cursor flash timer was set using
> an ops->cur_blink_jiffies value of 0. I plan to propose a patch within
> the next day that will prevent this for all code paths.
>