Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1402532 > unrolled thread

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

Started byDavid Daney <ddaney.cavm@gmail.com>
First post2016-05-17 20:50 +0200
Last post2016-05-28 13:50 +0200
Articles 20 on this page of 25 — 6 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH] tty: vt: Fix soft lockup in fbcon cursor blink timer. David Daney <ddaney.cavm@gmail.com> - 2016-05-17 20:50 +0200
    Re: [PATCH] tty: vt: Fix soft lockup in fbcon cursor blink timer. Pavel Machek <pavel@ucw.cz> - 2016-05-17 22:50 +0200
      Re: [PATCH] tty: vt: Fix soft lockup in fbcon cursor blink timer. Ming Lei <ming.lei@canonical.com> - 2016-05-18 02:50 +0200
        Re: [PATCH] tty: vt: Fix soft lockup in fbcon cursor blink timer. Scot Doyle <lkml14@scotdoyle.com> - 2016-05-18 22:40 +0200
          Re: [PATCH] tty: vt: Fix soft lockup in fbcon cursor blink timer. Ming Lei <ming.lei@canonical.com> - 2016-05-19 02:30 +0200
            Re: [PATCH] tty: vt: Fix soft lockup in fbcon cursor blink timer. Pavel Machek <pavel@ucw.cz> - 2016-05-19 09:10 +0200
          [PATCH] fbcon: use default if cursor blink interval is not valid Scot Doyle <lkml14@scotdoyle.com> - 2016-05-19 06:30 +0200
            Re: [PATCH] fbcon: use default if cursor blink interval is not valid Jeremy Kerr <jk@ozlabs.org> - 2016-05-19 09:30 +0200
            Re: [PATCH] fbcon: use default if cursor blink interval is not valid Ming Lei <ming.lei@canonical.com> - 2016-05-19 10:40 +0200
            Re: [PATCH] fbcon: use default if cursor blink interval is not valid Pavel Machek <pavel@ucw.cz> - 2016-05-19 11:10 +0200
              Re: [PATCH] fbcon: use default if cursor blink interval is not  valid Scot Doyle <lkml14@scotdoyle.com> - 2016-05-19 16:30 +0200
                Re: [PATCH] fbcon: use default if cursor blink interval is not valid Ming Lei <ming.lei@canonical.com> - 2016-05-19 17:40 +0200
            Re: [PATCH] fbcon: use default if cursor blink interval is not  valid Scot Doyle <lkml14@scotdoyle.com> - 2016-05-20 00:30 +0200
              [PATCH] fbcon: warn on invalid cursor blink intervals Scot Doyle <lkml14@scotdoyle.com> - 2016-05-20 00:40 +0200
                Re: [PATCH] fbcon: warn on invalid cursor blink intervals Jeremy Kerr <jk@ozlabs.org> - 2016-05-20 03:30 +0200
                Re: [PATCH] fbcon: warn on invalid cursor blink intervals Ming Lei <ming.lei@canonical.com> - 2016-05-20 04:20 +0200
                  Re: [PATCH] fbcon: warn on invalid cursor blink intervals Jeremy Kerr <jk@ozlabs.org> - 2016-05-20 04:30 +0200
                    Re: [PATCH] fbcon: warn on invalid cursor blink intervals Ming Lei <ming.lei@canonical.com> - 2016-05-20 04:50 +0200
                      Re: [PATCH] fbcon: warn on invalid cursor blink intervals Jeremy Kerr <jk@ozlabs.org> - 2016-05-20 07:10 +0200
                        Re: [PATCH] fbcon: warn on invalid cursor blink intervals Scot Doyle <lkml14@scotdoyle.com> - 2016-05-20 18:30 +0200
                          Re: [PATCH] fbcon: warn on invalid cursor blink intervals Scot Doyle <lkml14@scotdoyle.com> - 2016-05-24 03:30 +0200
                          Re: [PATCH] fbcon: warn on invalid cursor blink intervals Henrique de Moraes Holschuh <hmh@hmh.eng.br> - 2016-05-28 13:50 +0200
                Re: [PATCH] fbcon: warn on invalid cursor blink intervals Henrique de Moraes Holschuh <hmh@hmh.eng.br> - 2016-05-28 13:50 +0200
    Re: [PATCH] tty: vt: Fix soft lockup in fbcon cursor blink timer. Scot Doyle <lkml14@scotdoyle.com> - 2016-05-20 00:40 +0200
    Re: [PATCH] tty: vt: Fix soft lockup in fbcon cursor blink timer. Henrique de Moraes Holschuh <hmh@hmh.eng.br> - 2016-05-28 13:50 +0200

Page 1 of 2  [1] 2  Next page →


#1402532 — [PATCH] tty: vt: Fix soft lockup in fbcon cursor blink timer.

FromDavid Daney <ddaney.cavm@gmail.com>
Date2016-05-17 20:50 +0200
Subject[PATCH] tty: vt: Fix soft lockup in fbcon cursor blink timer.
Message-ID<rzSe5-8cx-5@gated-at.bofh.it>
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
---
 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 3e3c757..eef5c36 100644
--- a/drivers/tty/vt/vt.c
+++ b/drivers/tty/vt/vt.c
@@ -750,6 +750,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.8.3.1

[toc] | [next] | [standalone]


#1402593

FromPavel Machek <pavel@ucw.cz>
Date2016-05-17 22:50 +0200
Message-ID<rzU6e-W9-17@gated-at.bofh.it>
In reply to#1402532
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>

(And it is amazing how many problems configurable blink speed caused).

Thanks!
								Pavel

-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

[toc] | [prev] | [next] | [standalone]


#1402671

FromMing Lei <ming.lei@canonical.com>
Date2016-05-18 02:50 +0200
Message-ID<rzXQu-3gO-9@gated-at.bofh.it>
In reply to#1402593
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
>
> --
> (english) http://www.livejournal.com/~pavelmachek
> (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

[toc] | [prev] | [next] | [standalone]


#1403271

FromScot Doyle <lkml14@scotdoyle.com>
Date2016-05-18 22:40 +0200
Message-ID<rAgq6-6Tl-7@gated-at.bofh.it>
In reply to#1402671
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, 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.

[toc] | [prev] | [next] | [standalone]


#1403367

FromMing Lei <ming.lei@canonical.com>
Date2016-05-19 02:30 +0200
Message-ID<rAk0F-PE-3@gated-at.bofh.it>
In reply to#1403271
On Thu, May 19, 2016 at 4:24 AM, Scot Doyle <lkml14@scotdoyle.com> 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, 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.

Given this issue caues system unusable, I suggest to merge David's
oneline patch first, then you can think and try to figure out 'perfect' solution
for addressing all this kind of reports from last year.

Does it make sense?


Thanks,
Ming

[toc] | [prev] | [next] | [standalone]


#1403468

FromPavel Machek <pavel@ucw.cz>
Date2016-05-19 09:10 +0200
Message-ID<rAqfL-50p-5@gated-at.bofh.it>
In reply to#1403367
On Thu 2016-05-19 08:27:37, Ming Lei wrote:
> On Thu, May 19, 2016 at 4:24 AM, Scot Doyle <lkml14@scotdoyle.com> 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, 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.
> 
> Given this issue caues system unusable, I suggest to merge David's
> oneline patch first, then you can think and try to figure out 'perfect' solution
> for addressing all this kind of reports from last year.

Actually, I'd merge

[PATCH] fbcon: use default if cursor blink interval is not valid

first. That one is obviously safe. Nice big overkill, but safe. Then
nicer solution can be attempted...
									Pavel
-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

[toc] | [prev] | [next] | [standalone]


#1403428 — [PATCH] fbcon: use default if cursor blink interval is not valid

FromScot Doyle <lkml14@scotdoyle.com>
Date2016-05-19 06:30 +0200
Subject[PATCH] fbcon: use default if cursor blink interval is not valid
Message-ID<rAnKV-3m2-5@gated-at.bofh.it>
In reply to#1403271
Two current [1] and three previous [2] systems locked during boot
because the cursor flash timer was set using an ops->cur_blink_jiffies
value of 0. Previous patches attempted to solve the problem by moving
variable initialization earlier in the setup sequence [2].

Use the normal cursor blink default interval of 200 ms if
ops->cur_blink_jiffies is not in the range specified in commit
bd63364caa8d. Since invalid values are not used, specific system
initialization timings should not cause lockups.

[1] https://bugs.launchpad.net/bugs/1574814
[2] see commits: 2a17d7e80f1d, f235f664a8af, a1e533ec07d5

Signed-off-by: Scot Doyle <lkml14@scotdoyle.com>
Cc: <stable@vger.kernel.org> [v4.2]
---
 drivers/video/console/fbcon.c | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
index 6e92917..da61d87 100644
--- a/drivers/video/console/fbcon.c
+++ b/drivers/video/console/fbcon.c
@@ -396,13 +396,23 @@ static void fb_flashcursor(struct work_struct *work)
 	console_unlock();
 }
 
+static int cursor_blink_jiffies(int candidate)
+{
+	if (candidate >= msecs_to_jiffies(50) &&
+	    candidate <= msecs_to_jiffies(USHRT_MAX))
+		return candidate;
+	else
+		return HZ / 5;
+}
+
 static void cursor_timer_handler(unsigned long dev_addr)
 {
 	struct fb_info *info = (struct fb_info *) dev_addr;
 	struct fbcon_ops *ops = info->fbcon_par;
 
 	queue_work(system_power_efficient_wq, &info->queue);
-	mod_timer(&ops->cursor_timer, jiffies + ops->cur_blink_jiffies);
+	mod_timer(&ops->cursor_timer, jiffies +
+	    cursor_blink_jiffies(ops->cur_blink_jiffies));
 }
 
 static void fbcon_add_cursor_timer(struct fb_info *info)
@@ -417,7 +427,8 @@ static void fbcon_add_cursor_timer(struct fb_info *info)
 
 		init_timer(&ops->cursor_timer);
 		ops->cursor_timer.function = cursor_timer_handler;
-		ops->cursor_timer.expires = jiffies + ops->cur_blink_jiffies;
+		ops->cursor_timer.expires = jiffies +
+		    cursor_blink_jiffies(ops->cur_blink_jiffies);
 		ops->cursor_timer.data = (unsigned long ) info;
 		add_timer(&ops->cursor_timer);
 		ops->flags |= FBCON_FLAGS_CURSOR_TIMER;
@@ -709,7 +720,6 @@ static int con2fb_acquire_newinfo(struct vc_data *vc, struct fb_info *info,
 	}
 
 	if (!err) {
-		ops->cur_blink_jiffies = HZ / 5;
 		info->fbcon_par = ops;
 
 		if (vc)
@@ -957,7 +967,6 @@ static const char *fbcon_startup(void)
 	ops->currcon = -1;
 	ops->graphics = 1;
 	ops->cur_rotate = -1;
-	ops->cur_blink_jiffies = HZ / 5;
 	info->fbcon_par = ops;
 	p->con_rotate = initial_rotation;
 	set_blitting_type(vc, info);
-- 
2.1.4

[toc] | [prev] | [next] | [standalone]


#1403474 — Re: [PATCH] fbcon: use default if cursor blink interval is not valid

FromJeremy Kerr <jk@ozlabs.org>
Date2016-05-19 09:30 +0200
SubjectRe: [PATCH] fbcon: use default if cursor blink interval is not valid
Message-ID<rAqz7-57w-5@gated-at.bofh.it>
In reply to#1403428
Hi Scot,

> Use the normal cursor blink default interval of 200 ms if
> ops->cur_blink_jiffies is not in the range specified in commit
> bd63364caa8d. Since invalid values are not used, specific system
> initialization timings should not cause lockups.

This fixes an issue we're seeing with the ast driver on OpenPOWER
machines, thanks!

Acked-by: Jeremy Kerr <jk@ozlabs.org>

Cheers,


Jeremy

[toc] | [prev] | [next] | [standalone]


#1403498 — Re: [PATCH] fbcon: use default if cursor blink interval is not valid

FromMing Lei <ming.lei@canonical.com>
Date2016-05-19 10:40 +0200
SubjectRe: [PATCH] fbcon: use default if cursor blink interval is not valid
Message-ID<rArER-5LS-1@gated-at.bofh.it>
In reply to#1403428
On Thu, May 19, 2016 at 12:21 PM, Scot Doyle <lkml14@scotdoyle.com> wrote:
> Two current [1] and three previous [2] systems locked during boot
> because the cursor flash timer was set using an ops->cur_blink_jiffies
> value of 0. Previous patches attempted to solve the problem by moving
> variable initialization earlier in the setup sequence [2].
>
> Use the normal cursor blink default interval of 200 ms if
> ops->cur_blink_jiffies is not in the range specified in commit
> bd63364caa8d. Since invalid values are not used, specific system
> initialization timings should not cause lockups.
>
> [1] https://bugs.launchpad.net/bugs/1574814
> [2] see commits: 2a17d7e80f1d, f235f664a8af, a1e533ec07d5
>
> Signed-off-by: Scot Doyle <lkml14@scotdoyle.com>
> Cc: <stable@vger.kernel.org> [v4.2]

Tested-by: Ming Lei <ming.lei@canonical.com>

> ---
>  drivers/video/console/fbcon.c | 17 +++++++++++++----
>  1 file changed, 13 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
> index 6e92917..da61d87 100644
> --- a/drivers/video/console/fbcon.c
> +++ b/drivers/video/console/fbcon.c
> @@ -396,13 +396,23 @@ static void fb_flashcursor(struct work_struct *work)
>         console_unlock();
>  }
>
> +static int cursor_blink_jiffies(int candidate)
> +{
> +       if (candidate >= msecs_to_jiffies(50) &&
> +           candidate <= msecs_to_jiffies(USHRT_MAX))
> +               return candidate;
> +       else
> +               return HZ / 5;
> +}
> +
>  static void cursor_timer_handler(unsigned long dev_addr)
>  {
>         struct fb_info *info = (struct fb_info *) dev_addr;
>         struct fbcon_ops *ops = info->fbcon_par;
>
>         queue_work(system_power_efficient_wq, &info->queue);
> -       mod_timer(&ops->cursor_timer, jiffies + ops->cur_blink_jiffies);
> +       mod_timer(&ops->cursor_timer, jiffies +
> +           cursor_blink_jiffies(ops->cur_blink_jiffies));
>  }
>
>  static void fbcon_add_cursor_timer(struct fb_info *info)
> @@ -417,7 +427,8 @@ static void fbcon_add_cursor_timer(struct fb_info *info)
>
>                 init_timer(&ops->cursor_timer);
>                 ops->cursor_timer.function = cursor_timer_handler;
> -               ops->cursor_timer.expires = jiffies + ops->cur_blink_jiffies;
> +               ops->cursor_timer.expires = jiffies +
> +                   cursor_blink_jiffies(ops->cur_blink_jiffies);
>                 ops->cursor_timer.data = (unsigned long ) info;
>                 add_timer(&ops->cursor_timer);
>                 ops->flags |= FBCON_FLAGS_CURSOR_TIMER;
> @@ -709,7 +720,6 @@ static int con2fb_acquire_newinfo(struct vc_data *vc, struct fb_info *info,
>         }
>
>         if (!err) {
> -               ops->cur_blink_jiffies = HZ / 5;
>                 info->fbcon_par = ops;
>
>                 if (vc)
> @@ -957,7 +967,6 @@ static const char *fbcon_startup(void)
>         ops->currcon = -1;
>         ops->graphics = 1;
>         ops->cur_rotate = -1;
> -       ops->cur_blink_jiffies = HZ / 5;
>         info->fbcon_par = ops;
>         p->con_rotate = initial_rotation;
>         set_blitting_type(vc, info);
> --
> 2.1.4
>

[toc] | [prev] | [next] | [standalone]


#1403520 — Re: [PATCH] fbcon: use default if cursor blink interval is not valid

FromPavel Machek <pavel@ucw.cz>
Date2016-05-19 11:10 +0200
SubjectRe: [PATCH] fbcon: use default if cursor blink interval is not valid
Message-ID<rAs7U-6aN-25@gated-at.bofh.it>
In reply to#1403428
Hi!

> Two current [1] and three previous [2] systems locked during boot
> because the cursor flash timer was set using an ops->cur_blink_jiffies
> value of 0. Previous patches attempted to solve the problem by moving
> variable initialization earlier in the setup sequence [2].
> 
> Use the normal cursor blink default interval of 200 ms if
> ops->cur_blink_jiffies is not in the range specified in commit
> bd63364caa8d. Since invalid values are not used, specific system
> initialization timings should not cause lockups.
> 
> [1] https://bugs.launchpad.net/bugs/1574814
> [2] see commits: 2a17d7e80f1d, f235f664a8af, a1e533ec07d5

Acked-by: Pavel Machek <pavel@ucw.cz>

>  static void cursor_timer_handler(unsigned long dev_addr)
>  {
>  	struct fb_info *info = (struct fb_info *) dev_addr;
>  	struct fbcon_ops *ops = info->fbcon_par;
>  
>  	queue_work(system_power_efficient_wq, &info->queue);
> -	mod_timer(&ops->cursor_timer, jiffies + ops->cur_blink_jiffies);
> +	mod_timer(&ops->cursor_timer, jiffies +
> +	    cursor_blink_jiffies(ops->cur_blink_jiffies));
>  }
>  
>  static void fbcon_add_cursor_timer(struct fb_info *info)

And actually... perhaps mod_timer should have some check for too low
timeouts..?

WARN_ON?
									Pavel

-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

[toc] | [prev] | [next] | [standalone]


#1403778 — Re: [PATCH] fbcon: use default if cursor blink interval is not valid

FromScot Doyle <lkml14@scotdoyle.com>
Date2016-05-19 16:30 +0200
SubjectRe: [PATCH] fbcon: use default if cursor blink interval is not valid
Message-ID<rAx7E-Wa-5@gated-at.bofh.it>
In reply to#1403520
On Thu, 19 May 2016, Pavel Machek wrote:
> Hi!
> 
> > Two current [1] and three previous [2] systems locked during boot
> > because the cursor flash timer was set using an ops->cur_blink_jiffies
> > value of 0. Previous patches attempted to solve the problem by moving
> > variable initialization earlier in the setup sequence [2].
> > 
> > Use the normal cursor blink default interval of 200 ms if
> > ops->cur_blink_jiffies is not in the range specified in commit
> > bd63364caa8d. Since invalid values are not used, specific system
> > initialization timings should not cause lockups.
> > 
> > [1] https://bugs.launchpad.net/bugs/1574814
> > [2] see commits: 2a17d7e80f1d, f235f664a8af, a1e533ec07d5
> 
> Acked-by: Pavel Machek <pavel@ucw.cz>
> 
> >  static void cursor_timer_handler(unsigned long dev_addr)
> >  {
> >  	struct fb_info *info = (struct fb_info *) dev_addr;
> >  	struct fbcon_ops *ops = info->fbcon_par;
> >  
> >  	queue_work(system_power_efficient_wq, &info->queue);
> > -	mod_timer(&ops->cursor_timer, jiffies + ops->cur_blink_jiffies);
> > +	mod_timer(&ops->cursor_timer, jiffies +
> > +	    cursor_blink_jiffies(ops->cur_blink_jiffies));
> >  }
> >  
> >  static void fbcon_add_cursor_timer(struct fb_info *info)
> 
> And actually... perhaps mod_timer should have some check for too low
> timeouts..?
> 
> WARN_ON?
> 									Pavel


Interesting idea. I applied this patch to a couple systems and 
receive the same warning on both:

diff --git a/kernel/time/timer.c b/kernel/time/timer.c
index 73164c3..f6c0b69 100644
--- a/kernel/time/timer.c
+++ b/kernel/time/timer.c
@@ -788,6 +788,7 @@ __mod_timer(struct timer_list *timer, unsigned long expires,
 
 	timer_stats_timer_set_start_info(timer);
 	BUG_ON(!timer->function);
+	WARN_ONCE(expires == jiffies, "timer should expire in the future");
 
 	base = lock_timer_base(timer, &flags);
 
------

[    2.060474] ------------[ cut here ]------------
[    2.061613] WARNING: CPU: 0 PID: 164 at kernel/time/timer.c:791 mod_timer+0x233/0x240
[    2.062740] timer should expire in the future
[    2.062757] CPU: 0 PID: 164 Comm: kworker/0:2 Not tainted 4.6.0+ #7
[    2.065870] Hardware name: Toshiba Leon, BIOS          12/04/2013
[    2.067828] Workqueue: events_power_efficient hub_init_func3
[    2.069762]  0000000000000000 ffff88007443bbb8 ffffffff8139932b ffff88007443bc08
[    2.071701]  0000000000000000 ffff88007443bbf8 ffffffff8112e57c 0000031700000000
[    2.073655]  ffff88007486a0b0 00000000fffea2da ffff88007486a000 0000000000000202
[    2.075594] Call Trace:
[    2.077503]  [<ffffffff8139932b>] dump_stack+0x4d/0x72
[    2.079426]  [<ffffffff8112e57c>] __warn+0xcc/0xf0
[    2.081325]  [<ffffffff8112e5ef>] warn_slowpath_fmt+0x4f/0x60
[    2.083212]  [<ffffffff813ad5e5>] ? find_next_bit+0x15/0x20
[    2.085022]  [<ffffffff8139914f>] ? cpumask_next_and+0x2f/0x40
[    2.086696]  [<ffffffff81188a93>] mod_timer+0x233/0x240
[    2.088362]  [<ffffffff815fff02>] usb_hcd_submit_urb+0x3f2/0x8c0
[    2.090026]  [<ffffffff81601dc4>] ? urb_destroy+0x24/0x30
[    2.091698]  [<ffffffff81142ba8>] ? insert_work+0x58/0xb0
[    2.093349]  [<ffffffff81602297>] usb_submit_urb+0x287/0x530
[    2.094985]  [<ffffffff815f986d>] hub_activate+0x1fd/0x5d0
[    2.096625]  [<ffffffff81150188>] ? finish_task_switch+0x78/0x1f0
[    2.098268]  [<ffffffff815f9cca>] hub_init_func3+0x1a/0x20
[    2.099908]  [<ffffffff811438e0>] process_one_work+0x140/0x3e0
[    2.101539]  [<ffffffff81143bce>] worker_thread+0x4e/0x480
[    2.103173]  [<ffffffff81143b80>] ? process_one_work+0x3e0/0x3e0
[    2.104790]  [<ffffffff81143b80>] ? process_one_work+0x3e0/0x3e0
[    2.106259]  [<ffffffff81149829>] kthread+0xc9/0xe0
[    2.107731]  [<ffffffff81856152>] ret_from_fork+0x22/0x40
[    2.109215]  [<ffffffff81149760>] ? __kthread_parkme+0x70/0x70
[    2.110704] ---[ end trace 3519886a1a990d99 ]---

mod_timer is called from over a thousand places. Should timers always 
expire in the future?

[toc] | [prev] | [next] | [standalone]


#1403815 — Re: [PATCH] fbcon: use default if cursor blink interval is not valid

FromMing Lei <ming.lei@canonical.com>
Date2016-05-19 17:40 +0200
SubjectRe: [PATCH] fbcon: use default if cursor blink interval is not valid
Message-ID<rAydk-1Ak-17@gated-at.bofh.it>
In reply to#1403778
On Thu, May 19, 2016 at 10:22 PM, Scot Doyle <lkml14@scotdoyle.com> wrote:
> On Thu, 19 May 2016, Pavel Machek wrote:
>> Hi!
>>
>> > Two current [1] and three previous [2] systems locked during boot
>> > because the cursor flash timer was set using an ops->cur_blink_jiffies
>> > value of 0. Previous patches attempted to solve the problem by moving
>> > variable initialization earlier in the setup sequence [2].
>> >
>> > Use the normal cursor blink default interval of 200 ms if
>> > ops->cur_blink_jiffies is not in the range specified in commit
>> > bd63364caa8d. Since invalid values are not used, specific system
>> > initialization timings should not cause lockups.
>> >
>> > [1] https://bugs.launchpad.net/bugs/1574814
>> > [2] see commits: 2a17d7e80f1d, f235f664a8af, a1e533ec07d5
>>
>> Acked-by: Pavel Machek <pavel@ucw.cz>
>>
>> >  static void cursor_timer_handler(unsigned long dev_addr)
>> >  {
>> >     struct fb_info *info = (struct fb_info *) dev_addr;
>> >     struct fbcon_ops *ops = info->fbcon_par;
>> >
>> >     queue_work(system_power_efficient_wq, &info->queue);
>> > -   mod_timer(&ops->cursor_timer, jiffies + ops->cur_blink_jiffies);
>> > +   mod_timer(&ops->cursor_timer, jiffies +
>> > +       cursor_blink_jiffies(ops->cur_blink_jiffies));
>> >  }
>> >
>> >  static void fbcon_add_cursor_timer(struct fb_info *info)
>>
>> And actually... perhaps mod_timer should have some check for too low
>> timeouts..?
>>
>> WARN_ON?
>>                                                                       Pavel
>
>
> Interesting idea. I applied this patch to a couple systems and
> receive the same warning on both:

If 'jiffies' is passed to mod_timer() for same timer unusually OR
mod_timer() isn't called from the timer handler, it shoudln't cause
soft lockup.

In the case of fbcon, 'jiffies' is always passed to mod_timer() and
mod_timer() is called from the timer handler meantime, that is a
real lockup.

>
> diff --git a/kernel/time/timer.c b/kernel/time/timer.c
> index 73164c3..f6c0b69 100644
> --- a/kernel/time/timer.c
> +++ b/kernel/time/timer.c
> @@ -788,6 +788,7 @@ __mod_timer(struct timer_list *timer, unsigned long expires,
>
>         timer_stats_timer_set_start_info(timer);
>         BUG_ON(!timer->function);
> +       WARN_ONCE(expires == jiffies, "timer should expire in the future");
>
>         base = lock_timer_base(timer, &flags);
>
> ------
>
> [    2.060474] ------------[ cut here ]------------
> [    2.061613] WARNING: CPU: 0 PID: 164 at kernel/time/timer.c:791 mod_timer+0x233/0x240
> [    2.062740] timer should expire in the future
> [    2.062757] CPU: 0 PID: 164 Comm: kworker/0:2 Not tainted 4.6.0+ #7
> [    2.065870] Hardware name: Toshiba Leon, BIOS          12/04/2013
> [    2.067828] Workqueue: events_power_efficient hub_init_func3
> [    2.069762]  0000000000000000 ffff88007443bbb8 ffffffff8139932b ffff88007443bc08
> [    2.071701]  0000000000000000 ffff88007443bbf8 ffffffff8112e57c 0000031700000000
> [    2.073655]  ffff88007486a0b0 00000000fffea2da ffff88007486a000 0000000000000202
> [    2.075594] Call Trace:
> [    2.077503]  [<ffffffff8139932b>] dump_stack+0x4d/0x72
> [    2.079426]  [<ffffffff8112e57c>] __warn+0xcc/0xf0
> [    2.081325]  [<ffffffff8112e5ef>] warn_slowpath_fmt+0x4f/0x60
> [    2.083212]  [<ffffffff813ad5e5>] ? find_next_bit+0x15/0x20
> [    2.085022]  [<ffffffff8139914f>] ? cpumask_next_and+0x2f/0x40
> [    2.086696]  [<ffffffff81188a93>] mod_timer+0x233/0x240
> [    2.088362]  [<ffffffff815fff02>] usb_hcd_submit_urb+0x3f2/0x8c0
> [    2.090026]  [<ffffffff81601dc4>] ? urb_destroy+0x24/0x30
> [    2.091698]  [<ffffffff81142ba8>] ? insert_work+0x58/0xb0
> [    2.093349]  [<ffffffff81602297>] usb_submit_urb+0x287/0x530
> [    2.094985]  [<ffffffff815f986d>] hub_activate+0x1fd/0x5d0
> [    2.096625]  [<ffffffff81150188>] ? finish_task_switch+0x78/0x1f0
> [    2.098268]  [<ffffffff815f9cca>] hub_init_func3+0x1a/0x20
> [    2.099908]  [<ffffffff811438e0>] process_one_work+0x140/0x3e0
> [    2.101539]  [<ffffffff81143bce>] worker_thread+0x4e/0x480
> [    2.103173]  [<ffffffff81143b80>] ? process_one_work+0x3e0/0x3e0
> [    2.104790]  [<ffffffff81143b80>] ? process_one_work+0x3e0/0x3e0
> [    2.106259]  [<ffffffff81149829>] kthread+0xc9/0xe0
> [    2.107731]  [<ffffffff81856152>] ret_from_fork+0x22/0x40
> [    2.109215]  [<ffffffff81149760>] ? __kthread_parkme+0x70/0x70
> [    2.110704] ---[ end trace 3519886a1a990d99 ]---
>
> mod_timer is called from over a thousand places. Should timers always
> expire in the future?
>

[toc] | [prev] | [next] | [standalone]


#1403993 — Re: [PATCH] fbcon: use default if cursor blink interval is not valid

FromScot Doyle <lkml14@scotdoyle.com>
Date2016-05-20 00:30 +0200
SubjectRe: [PATCH] fbcon: use default if cursor blink interval is not valid
Message-ID<rAEC6-5K2-35@gated-at.bofh.it>
In reply to#1403428
On Thu, 19 May 2016, David Daney wrote:
> On 05/18/2016 09:21 PM, Scot Doyle wrote:
> > Two current [1] and three previous [2] systems locked during boot
> > because the cursor flash timer was set using an ops->cur_blink_jiffies
> > value of 0. Previous patches attempted to solve the problem by moving
> > variable initialization earlier in the setup sequence [2].
> > 
> > Use the normal cursor blink default interval of 200 ms if
> > ops->cur_blink_jiffies is not in the range specified in commit
> > bd63364caa8d. Since invalid values are not used, specific system
> > initialization timings should not cause lockups.
> > 
> 
> This patch just papers over the problem that you yourself introduced in commit
> bd63364caa8d ("vt: add cursor blink interval escape sequence").
> 
> As you know, I have a patch that fixes the problem at the source:
> https://lkml.org/lkml/2016/5/17/455
> 
> I don't like the idea of silently ignoring bad values passed in from other
> code (drivers/tty/vt/vt.c), and much less doing the check for bad values each
> time the timer expires rather than just once, where the bad value is first
> introduced.
> 
> I think it would be preferable to WARN() at the site the bad value is
> introduced, so that we can easily find the real source of the problem.
> Initialize cur_blink_jiffies to a sane default value, then if something
> attempts to set it to a value that would cause soft lockup, WARN and refuse to
> change it.

I agree this approach would be cleaner and am willing to give it a try
by submitting an alternative patch and ack'ing yours. Thanks for taking 
the time to critique my proposal.

[toc] | [prev] | [next] | [standalone]


#1404005 — [PATCH] fbcon: warn on invalid cursor blink intervals

FromScot Doyle <lkml14@scotdoyle.com>
Date2016-05-20 00:40 +0200
Subject[PATCH] fbcon: warn on invalid cursor blink intervals
Message-ID<rAELL-5Nf-15@gated-at.bofh.it>
In reply to#1403993
Two systems are locking on boot [1] because ops->cur_blink_jiffies
is set to zero from vc->vc_cur_blink_ms.

Ignore such invalid intervals and log a warning.

[1] https://bugs.launchpad.net/bugs/1574814

Suggested-by: David Daney <david.daney@cavium.com>
Signed-off-by: Scot Doyle <lkml14@scotdoyle.com>
Cc: <stable@vger.kernel.org> [v4.2]
---
 drivers/video/console/fbcon.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
index 6e92917..fad5b89 100644
--- a/drivers/video/console/fbcon.c
+++ b/drivers/video/console/fbcon.c
@@ -1095,7 +1095,13 @@ static void fbcon_init(struct vc_data *vc, int init)
 		con_copy_unimap(vc, svc);
 
 	ops = info->fbcon_par;
-	ops->cur_blink_jiffies = msecs_to_jiffies(vc->vc_cur_blink_ms);
+
+	if (vc->vc_cur_blink_ms >= 50)
+		ops->cur_blink_jiffies =
+		    msecs_to_jiffies(vc->vc_cur_blink_ms);
+	else
+		WARN_ONCE(1, "blink interval < 50 ms");
+
 	p->con_rotate = initial_rotation;
 	set_blitting_type(vc, info);
 
@@ -1309,7 +1315,11 @@ static void fbcon_cursor(struct vc_data *vc, int mode)
 	int y;
  	int c = scr_readw((u16 *) vc->vc_pos);
 
-	ops->cur_blink_jiffies = msecs_to_jiffies(vc->vc_cur_blink_ms);
+	if (vc->vc_cur_blink_ms >= 50)
+		ops->cur_blink_jiffies =
+		    msecs_to_jiffies(vc->vc_cur_blink_ms);
+	else
+		WARN_ONCE(1, "blink interval < 50 ms");
 
 	if (fbcon_is_inactive(vc, info) || vc->vc_deccm != 1)
 		return;
-- 
2.1.4

[toc] | [prev] | [next] | [standalone]


#1404060 — Re: [PATCH] fbcon: warn on invalid cursor blink intervals

FromJeremy Kerr <jk@ozlabs.org>
Date2016-05-20 03:30 +0200
SubjectRe: [PATCH] fbcon: warn on invalid cursor blink intervals
Message-ID<rAHqh-7sj-1@gated-at.bofh.it>
In reply to#1404005
Hi Scot,

> Two systems are locking on boot [1] because ops->cur_blink_jiffies
> is set to zero from vc->vc_cur_blink_ms.
> 
> Ignore such invalid intervals and log a warning.

This prevents a lockup on AST BMC machines, but (as expected) generates
a warning against the fbcon driver, which is a significantly better
result.

Tested-by: Jeremy Kerr <jk@ozlabs.org>

[now to sort out the issue in the ast driver...]

Cheers,


Jeremy

[toc] | [prev] | [next] | [standalone]


#1404069 — Re: [PATCH] fbcon: warn on invalid cursor blink intervals

FromMing Lei <ming.lei@canonical.com>
Date2016-05-20 04:20 +0200
SubjectRe: [PATCH] fbcon: warn on invalid cursor blink intervals
Message-ID<rAIcG-83P-3@gated-at.bofh.it>
In reply to#1404005
On Fri, May 20, 2016 at 6:31 AM, Scot Doyle <lkml14@scotdoyle.com> wrote:
> Two systems are locking on boot [1] because ops->cur_blink_jiffies
> is set to zero from vc->vc_cur_blink_ms.
>
> Ignore such invalid intervals and log a warning.
>
> [1] https://bugs.launchpad.net/bugs/1574814
>
> Suggested-by: David Daney <david.daney@cavium.com>
> Signed-off-by: Scot Doyle <lkml14@scotdoyle.com>
> Cc: <stable@vger.kernel.org> [v4.2]

Not sure this one is needed for stable because it justs dumps
a warning, and not set a valid period to ops->cur_blink_jiffies.

So I guess other fix patch is still required for the soft lockup issue, right?

Thanks,

> ---
>  drivers/video/console/fbcon.c | 14 ++++++++++++--
>  1 file changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
> index 6e92917..fad5b89 100644
> --- a/drivers/video/console/fbcon.c
> +++ b/drivers/video/console/fbcon.c
> @@ -1095,7 +1095,13 @@ static void fbcon_init(struct vc_data *vc, int init)
>                 con_copy_unimap(vc, svc);
>
>         ops = info->fbcon_par;
> -       ops->cur_blink_jiffies = msecs_to_jiffies(vc->vc_cur_blink_ms);
> +
> +       if (vc->vc_cur_blink_ms >= 50)
> +               ops->cur_blink_jiffies =
> +                   msecs_to_jiffies(vc->vc_cur_blink_ms);
> +       else
> +               WARN_ONCE(1, "blink interval < 50 ms");
> +
>         p->con_rotate = initial_rotation;
>         set_blitting_type(vc, info);
>
> @@ -1309,7 +1315,11 @@ static void fbcon_cursor(struct vc_data *vc, int mode)
>         int y;
>         int c = scr_readw((u16 *) vc->vc_pos);
>
> -       ops->cur_blink_jiffies = msecs_to_jiffies(vc->vc_cur_blink_ms);
> +       if (vc->vc_cur_blink_ms >= 50)
> +               ops->cur_blink_jiffies =
> +                   msecs_to_jiffies(vc->vc_cur_blink_ms);
> +       else
> +               WARN_ONCE(1, "blink interval < 50 ms");
>
>         if (fbcon_is_inactive(vc, info) || vc->vc_deccm != 1)
>                 return;
> --
> 2.1.4
>

[toc] | [prev] | [next] | [standalone]


#1404072 — Re: [PATCH] fbcon: warn on invalid cursor blink intervals

FromJeremy Kerr <jk@ozlabs.org>
Date2016-05-20 04:30 +0200
SubjectRe: [PATCH] fbcon: warn on invalid cursor blink intervals
Message-ID<rAIml-86S-5@gated-at.bofh.it>
In reply to#1404069
Hi Ming,

> Not sure this one is needed for stable because it justs dumps
> a warning, and not set a valid period to ops->cur_blink_jiffies.
> 
> So I guess other fix patch is still required for the soft lockup
> issue, right?

The main thing is that we don't set cur_blink_jiffies to the < 50ms
value. As far as I can tell, it means we'll still get the original
default, set in fbcon_startup():

	ops->cur_blink_jiffies = HZ / 5;

And so don't end up spinning on the timer expiry.

Cheers,


Jeremy

[toc] | [prev] | [next] | [standalone]


#1404080 — Re: [PATCH] fbcon: warn on invalid cursor blink intervals

FromMing Lei <ming.lei@canonical.com>
Date2016-05-20 04:50 +0200
SubjectRe: [PATCH] fbcon: warn on invalid cursor blink intervals
Message-ID<rAIFH-8db-3@gated-at.bofh.it>
In reply to#1404072
On Fri, May 20, 2016 at 10:26 AM, Jeremy Kerr <jk@ozlabs.org> wrote:
> Hi Ming,
>
>> Not sure this one is needed for stable because it justs dumps
>> a warning, and not set a valid period to ops->cur_blink_jiffies.
>>
>> So I guess other fix patch is still required for the soft lockup
>> issue, right?
>
> The main thing is that we don't set cur_blink_jiffies to the < 50ms
> value. As far as I can tell, it means we'll still get the original
> default, set in fbcon_startup():
>
>         ops->cur_blink_jiffies = HZ / 5;
>
> And so don't end up spinning on the timer expiry.

Jeremy, your theory is correct, thanks for your clarification! And my test
just shows that this patch does fix the soft lockup too, so

      Tested-by: Ming Lei <ming.lei@canonical.com>

Then looks there are two fix patches acked & tested:

     - the patch in this thread
     - another one "[PATCH] tty: vt: Fix soft lockup in fbcon cursor
blink timer."
     https://lkml.org/lkml/2016/5/17/455

So which one will be pushed to linus?

Thanks,
Ming

>
> Cheers,
>
>
> Jeremy

[toc] | [prev] | [next] | [standalone]


#1404132 — Re: [PATCH] fbcon: warn on invalid cursor blink intervals

FromJeremy Kerr <jk@ozlabs.org>
Date2016-05-20 07:10 +0200
SubjectRe: [PATCH] fbcon: warn on invalid cursor blink intervals
Message-ID<rAKRb-1jq-7@gated-at.bofh.it>
In reply to#1404080
Hi Ming,

>Then looks there are two fix patches acked & tested:
>
> - the patch in this thread
> - another one "[PATCH] tty: vt: Fix soft lockup in fbcon cursor
>blink timer."
> https://lkml.org/lkml/2016/5/17/455
>
>So which one will be pushed to linus?

Not that it's my call, but we may want both; the first as a safety
measure to prevent an invalid cur_blink_jiffies ever being set, and the
second one to actually fix the initialisation of vc_cur_blink_ms (and
address the warning introduced by the first).

I guess we could just go with the latter for stable...

Cheers,


Jeremy

[toc] | [prev] | [next] | [standalone]


#1404576 — Re: [PATCH] fbcon: warn on invalid cursor blink intervals

FromScot Doyle <lkml14@scotdoyle.com>
Date2016-05-20 18:30 +0200
SubjectRe: [PATCH] fbcon: warn on invalid cursor blink intervals
Message-ID<rAVtf-7Ld-15@gated-at.bofh.it>
In reply to#1404132
On Fri, 20 May 2016, Jeremy Kerr wrote:
> Hi Ming,
> 
> >Then looks there are two fix patches acked & tested:
> >
> > - the patch in this thread
> > - another one "[PATCH] tty: vt: Fix soft lockup in fbcon cursor
> >blink timer."
> > https://lkml.org/lkml/2016/5/17/455
> >
> >So which one will be pushed to linus?
> 
> Not that it's my call, but we may want both; the first as a safety
> measure to prevent an invalid cur_blink_jiffies ever being set, and the
> second one to actually fix the initialisation of vc_cur_blink_ms (and
> address the warning introduced by the first).

Tomi / Greg,

I'd suggest
- applying "tty: vt: Fix soft lockup in fbcon cursor blink timer." to 4.7 and stable[4.2]
- applying "fbcon: warn on invalid cursor blink intervals" to 4.7
- ignoring "fbcon: use default if cursor blink interval is not valid"

Note: the patches don't depend on each other


> I guess we could just go with the latter for stable...
>
> Cheers,
> 
> Jeremy

[toc] | [prev] | [next] | [standalone]


Page 1 of 2  [1] 2  Next page →

Back to top | Article view | linux.kernel


csiph-web