1
linux/drivers/video
Dave Airlie d8636a2717 fbcon: fix race condition between console lock and cursor timer (v1.1)
So we've had a fair few reports of fbcon handover breakage between
efi/vesafb and i915 surface recently, so I dedicated a couple of
days to finding the problem.

Essentially the last thing we saw was the conflicting framebuffer
message and that was all.

So after much tracing with direct netconsole writes (printks
under console_lock not so useful), I think I found the race.

Thread A (driver load)    Thread B (timer thread)
  unbind_con_driver ->              |
  bind_con_driver ->                |
  vc->vc_sw->con_deinit ->          |
  fbcon_deinit ->                   |
  console_lock()                    |
      |                             |
      |                       fbcon_flashcursor timer fires
      |                       console_lock() <- blocked for A
      |
      |
fbcon_del_cursor_timer ->
  del_timer_sync
  (BOOM)

Of course because all of this is under the console lock,
we never see anything, also since we also just unbound the active
console guess what we never see anything.

Hopefully this fixes the problem for anyone seeing vesafb->kms
driver handoff.

v1.1: add comment suggestion from Alan.

Cc: stable@vger.kernel.org
Signed-off-by: Dave Airlie <airlied@redhat.com>
2012-08-22 14:00:35 +10:00
..
aty fbdev updates for 3.6 2012-08-01 10:45:12 -07:00
backlight Merge branch 'akpm' (Andrew's patch-bomb) 2012-07-30 17:25:34 -07:00
console fbcon: fix race condition between console lock and cursor timer (v1.1) 2012-08-22 14:00:35 +10:00
exynos fbdev updates for 3.6 2012-08-01 10:45:12 -07:00
geode
i810
intelfb drivers/video/intelfb/intelfbdrv.c: add missing agp_backend_release 2012-05-13 13:05:24 +00:00
kyro kyrofb: fix on x86_64 2012-04-08 14:27:08 +00:00
logo
matrox i2c: Split I2C_M_NOSTART support out of I2C_FUNC_PROTOCOL_MANGLING 2012-05-30 10:55:34 +02:00
mb862xx video: mb862xxfbdrv.c: local functions should not be exposed globally 2012-05-08 16:57:30 +00:00
mbx drivers/video: use correct __devexit_p annotation 2012-06-09 12:51:11 +00:00
msm video: msm: Fix section mismatches in mddi.c 2012-04-18 17:10:34 +00:00
nvidia
omap OMAPFB: remove unused FB_OMAP_BOOTLOADER_INIT config option 2012-04-23 10:48:09 +03:00
omap2 Merge branch 'for-florian' of git://gitorious.org/linux-omap-dss2/linux into fbdev-next 2012-07-25 08:55:46 +00:00
pnx4008
riva riva/fbdev: fix several -Wuninitialized 2012-02-13 02:59:14 +00:00
savage Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2012-07-24 13:34:56 -07:00
sis Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2012-07-24 13:34:56 -07:00
vermilion
via video/via: Convert to kstrtou8_from_user 2012-05-08 17:00:12 +00:00
68328fb.c
acornfb.c
acornfb.h
amba-clcd.c
amifb.c Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
arcfb.c video: Fix typo in drivers/video 2012-07-24 12:58:15 +02:00
arkfb.c
asiliantfb.c
atafb_iplan2p2.c
atafb_iplan2p4.c
atafb_iplan2p8.c
atafb_mfb.c
atafb_utils.h
atafb.c
atafb.h
atmel_lcdfb.c video: Fix typo in drivers/video 2012-07-24 12:58:15 +02:00
au1100fb.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2012-05-22 19:22:50 -07:00
au1100fb.h
au1200fb.c fbdev: fix au1*fb builds 2012-04-08 14:27:09 +00:00
au1200fb.h
auo_k190x.c video: auo_k190x: add code shared by controller drivers 2012-04-29 19:35:35 +00:00
auo_k190x.h video: auo_k190x: add code shared by controller drivers 2012-04-29 19:35:35 +00:00
auo_k1900fb.c video: auo_k190x: add driver for AUO-K1900 variant 2012-04-29 19:35:40 +00:00
auo_k1901fb.c video: auo_k190x: add driver for AUO-K1901 variant 2012-04-29 19:35:42 +00:00
bf54x-lq043fb.c video: use gpio_request_one 2012-01-28 20:50:11 +00:00
bf537-lq035.c video: use gpio_request_one 2012-01-28 20:50:11 +00:00
bfin_adv7393fb.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2012-07-24 13:34:56 -07:00
bfin_adv7393fb.h
bfin-lq035q1-fb.c blackfin: fix compile error in bfin-lq035q1-fb.c 2012-04-26 14:46:51 -04:00
bfin-t350mcqb-fb.c
broadsheetfb.c drivers/video: use correct __devexit_p annotation 2012-06-09 12:51:11 +00:00
bt431.h Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
bt455.h Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
bw2.c
c2p_core.h
c2p_iplan2.c
c2p_planar.c
c2p.h
carminefb_regs.h
carminefb.c
carminefb.h
cfbcopyarea.c
cfbfillrect.c
cfbimgblt.c
cg3.c
cg6.c
cg14.c
chipsfb.c
cirrusfb.c video: Fix typo in drivers/video 2012-07-24 12:58:15 +02:00
clps711xfb.c ARM: clps711x: Using a single definition for the PHYS and VIRT registers offset 2012-05-11 16:18:01 +02:00
cobalt_lcdfb.c cobalt_lcdfb: LCD panel framebuffer support for SEAD-3 platform. 2012-04-29 19:34:05 +00:00
controlfb.c
controlfb.h
cyber2000fb.c Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
cyber2000fb.h
da8xx-fb.c da8xx-fb: fix compile issue due to missing include 2012-07-29 16:47:40 +00:00
dnfb.c Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
edid.h
efifb.c vga: fix build when fbdev is a module 2012-04-24 09:50:21 +01:00
ep93xx-fb.c drivers/video/ep93xx-fb.c: clean up error-handling code 2012-04-21 21:47:49 +00:00
epson1355fb.c fb: epson1355fb: Fix section mismatch 2012-07-24 20:54:35 +00:00
fb_ddc.c
fb_defio.c fb_defio: Push file_update_time() into fb_deferred_io_mkwrite() 2012-07-31 01:02:44 +04:00
fb_draw.h fbdev: Make pixel_to_pat() failure mode more friendly 2012-07-29 12:25:06 +00:00
fb_notify.c
fb_sys_fops.c
fb-puv3.c
fbcmap.c
fbcvt.c
fbmem.c fbdev: add events for early fb event support 2012-05-29 16:22:28 -07:00
fbmon.c
fbsysfs.c fb: handle NULL pointers in framebuffer release 2012-05-29 13:00:03 +00:00
ffb.c
fm2fb.c
fsl-diu-fb.c drivers/video: fsl-diu-fb: don't initialize the THRESHOLDS registers 2012-05-13 13:08:56 +00:00
g364fb.c
gbefb.c
grvga.c grvga: Fix error handling issues 2012-07-08 14:03:17 +00:00
gxt4500.c
hecubafb.c
hgafb.c
hitfb.c
hpfb.c
i740_reg.h Resurrect Intel740 driver: i740fb 2012-02-15 04:31:21 +00:00
i740fb.c video: Fix typo in drivers/video 2012-07-24 12:58:15 +02:00
igafb.c
imsttfb.c
imxfb.c video imxfb: do not depend on grouped clocks 2012-04-25 17:03:37 +02:00
jz4740_fb.c
Kconfig video: auo_k190x: add driver for AUO-K1901 variant 2012-04-29 19:35:42 +00:00
leo.c
macfb.c
macmodes.c
macmodes.h
Makefile video: auo_k190x: add driver for AUO-K1901 variant 2012-04-29 19:35:42 +00:00
maxinefb.c
metronomefb.c
modedb.c
mx3fb.c mx3fb: avoid screen flash when panning with fb_set_var 2012-06-27 06:59:51 +00:00
mxsfb.c video: mxsfb: add simple device tree probe 2012-07-03 13:22:37 +08:00
n411.c
neofb.c Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
nuc900fb.c
nuc900fb.h
offb.c
output.c
p9100.c
platinumfb.c
platinumfb.h
pm2fb.c
pm3fb.c
pmag-aa-fb.c
pmag-ba-fb.c Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
pmagb-b-fb.c Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
ps3fb.c
pvr2fb.c drivers/video/pvr2fb.c: ensure arguments to request_irq and free_irq are compatible 2012-03-13 23:17:31 +00:00
pxa3xx-gcu.c video: pxa3xx-gcu: Simplify the logic to exit while loop in pxa3xx_gcu_wait_idle 2012-04-09 16:18:15 +00:00
pxa3xx-gcu.h
pxa168fb.c drivers/video/pxa168fb.c: use devm_ functions 2012-02-24 00:49:59 +00:00
pxa168fb.h
pxafb.c video: pxafb: add clk_prepare/clk_unprepare calls 2012-03-21 10:29:01 +00:00
pxafb.h
q40fb.c Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
s1d13xxxfb.c
s3c2410fb.c
s3c2410fb.h
s3c-fb.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2012-07-24 13:34:56 -07:00
s3fb.c s3fb: Add Virge/MX (86C260) 2012-07-08 14:03:50 +00:00
sa1100fb.c FB: sa11x0: convert to use platform resource and ioremap() 2012-02-24 09:39:59 +00:00
sa1100fb.h FB: sa11x0: convert to use platform resource and ioremap() 2012-02-24 09:39:59 +00:00
sbuslib.c
sbuslib.h
sgivwfb.c
sh7760fb.c
sh_mipi_dsi.c fbdev: sh_mipi_dsi: fix a section mismatch 2012-06-20 10:02:53 +02:00
sh_mobile_hdmi.c fbdev: sh_mobile_hdmi: add HDMI Control Register support 2012-05-13 13:07:59 +00:00
sh_mobile_lcdcfb.c fbdev: sh_mobile_lcdc: Fix vertical panning step 2012-07-29 01:17:07 +00:00
sh_mobile_lcdcfb.h fbdev: sh_mobile_lcdc: Fix pan offset computation in YUV mode 2012-07-19 12:15:26 +02:00
sh_mobile_meram.c sh_mobile_meram: Add direct MERAM allocation API 2012-07-19 02:05:22 +02:00
skeletonfb.c skeletonfb: fixed module exit function typo. 2012-04-15 21:44:02 +00:00
sm501fb.c
smscufx.c fbdev updates for 3.6 2012-08-01 10:45:12 -07:00
sstfb.c
sticore.h
stifb.c
sunxvr500.c video: Fix typo in drivers/video 2012-07-24 12:58:15 +02:00
sunxvr1000.c
sunxvr2500.c
svgalib.c
syscopyarea.c
sysfillrect.c
sysimgblt.c
tcx.c
tdfxfb.c
tgafb.c
tmiofb.c
tridentfb.c
udlfb.c fbdev updates for 3.5 2012-06-01 16:57:51 -07:00
uvesafb.c connector/userns: replace netlink uses of cap_raised() with capable() 2012-05-10 23:21:39 -04:00
valkyriefb.c
valkyriefb.h
vesafb.c
vfb.c
vga16fb.c
vgastate.c
vt8500lcdfb.c
vt8500lcdfb.h
vt8623fb.c
w100fb.c video: w100fb: Reduce sleep mode battery discharge 2012-07-08 14:03:02 +00:00
w100fb.h
wm8505fb_regs.h
wm8505fb.c
wmt_ge_rops.c
wmt_ge_rops.h
xen-fbfront.c drivers/video/xen-fbfront.c: add missing cleanup code 2012-05-07 06:41:56 -04:00
xilinxfb.c