vgacon.c: add cond reschedule points in vgacon_do_font_op
authorMarcelo Tosatti <mtosatti@redhat.com>
Thu, 20 Jun 2013 21:05:56 +0000 (18:05 -0300)
committerBen Hutchings <ben@decadent.org.uk>
Sat, 27 Jul 2013 04:34:18 +0000 (05:34 +0100)
commit809feb1735e5f4210ba455108ca91cb55b7b8610
tree9d4748be4f746841a88ca50c872210984b28c57e
parent695742a1522eb8e7ed0231e85aec51bf92c4af30
vgacon.c: add cond reschedule points in vgacon_do_font_op

commit 7e6d72c15ff4cc0c27573901bb05f9eddbd71ed4 upstream.

Booting a 64-vcpu KVM guest, with CONFIG_PREEMPT_VOLUNTARY,
can result in a soft lockup:

BUG: soft lockup - CPU#41 stuck for 67s! [setfont:1505]
 RIP: 0010:[<ffffffff812c48da>]
[<ffffffff812c48da>] vgacon_do_font_op.clone.0+0x1ba/0x550

This is due to the 8192 (cmapsz) IO operations taking longer than expected
due to lock contention in QEMU.

Add conditional resched points in between writes allowing other tasks to
execute.

Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
[bwh: Backported to 3.2: add #include <linux/sched.h>, already present
 upstream]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
drivers/video/console/vgacon.c