[PATCH Xenial SRU] tty: vt: Fix soft lockup in fbcon cursor blink timer.
Ming Lei
ming.lei at canonical.com
Tue May 24 13:30:22 UTC 2016
On Tue, May 24, 2016 at 7:11 PM, Chris J Arges
<chris.j.arges at canonical.com> wrote:
> On Tue, May 24, 2016 at 12:55:54PM +0800, Ming Lei wrote:
>> From: David Daney <david.daney at cavium.com>
>>
>> BugLink: http://bugs.launchpad.net/bugs/1574814
>>
>> 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.
>>
>> Tested-by: Ming Lei <ming.lei at canonical.com>
>> Acked-by: Pavel Machek <pavel at ucw.cz>
>> Acked-by: Scot Doyle <lkml14 at scotdoyle.com>
>> Signed-off-by: David Daney <david.daney at cavium.com>
>> Cc: stable at vger.kernel.org
>
> When you cherry-pick onto Xenial can you also include the -x flag to append the
> commit hash?
This patch doesn't land linus tree yet, and it does block di installer &
mass enablement, so hope it can land xenial first.
Thanks,
> --chris
>
>> ---
>> drivers/tty/vt/vt.c | 1 +
>> 1 file changed, 1 insertion(+)
>>
>> diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c
>> index 4af9a8f..d80f4ec 100644
>> --- a/drivers/tty/vt/vt.c
>> +++ b/drivers/tty/vt/vt.c
>> @@ -761,6 +761,7 @@ static void visual_init(struct vc_data *vc, int num, int init)
>> vc->vc_complement_mask = 0;
>> vc->vc_can_do_color = 0;
>> vc->vc_panic_force_write = false;
>> + vc->vc_cur_blink_ms = DEFAULT_CURSOR_BLINK_MS;
>> vc->vc_sw->con_init(vc, init);
>> if (!vc->vc_complement_mask)
>> vc->vc_complement_mask = vc->vc_can_do_color ? 0x7700 : 0x0800;
>> --
>> 1.9.1
>>
>>
>> --
>> kernel-team mailing list
>> kernel-team at lists.ubuntu.com
>> https://lists.ubuntu.com/mailman/listinfo/kernel-team
More information about the kernel-team
mailing list