forked from Minki/linux
aef7db4bd5
Fix infinite recursive notifier in the fbdev layer. This causes recursive locking. Dmitry Baryshkov found the problem and confirmed that the patch fixes the bug. After doing # echo 1 > /sys/class/graphics/fb0/blank I got the following in my kernel log: ============================================= [ INFO: possible recursive locking detected ] 2.6.27-rc6-00086-gda63874-dirty #97 --------------------------------------------- echo/1564 is trying to acquire lock: ((fb_notifier_list).rwsem){..--}, at: [<c005a384>] __blocking_notifier_call_chain+0x38/0x6c but task is already holding lock: ((fb_notifier_list).rwsem){..--}, at: [<c005a384>] __blocking_notifier_call_chain+0x38/0x6c other info that might help us debug this: 2 locks held by echo/1564: #0: (&buffer->mutex){--..}, at: [<c00ddde0>] sysfs_write_file+0x30/0x80 #1: ((fb_notifier_list).rwsem){..--}, at: [<c005a384>] __blocking_notifier_call_chain+0x38/0x6c stack backtrace: [<c0029fe4>] (dump_stack+0x0/0x14) from [<c0060ce0>] (print_deadlock_bug+0xa4/0xd0) [<c0060c3c>] (print_deadlock_bug+0x0/0xd0) from [<c0060e54>] (check_deadlock+0x148/0x17c) r6:c397a1e0 r5:c397a530 r4:c04fcf98 [<c0060d0c>] (check_deadlock+0x0/0x17c) from [<c00637e8>] (validate_chain+0x3c4/0x4f0) [<c0063424>] (validate_chain+0x0/0x4f0) from [<c0063efc>] (__lock_acquire+0x5e8/0x6b4) [<c0063914>] (__lock_acquire+0x0/0x6b4) from [<c006402c>] (lock_acquire+0x64/0x78) [<c0063fc8>] (lock_acquire+0x0/0x78) from [<c0316ca8>] (down_read+0x4c/0x60) r7:00000009 r6:ffffffff r5:c0427a40 r4:c005a384 [<c0316c5c>] (down_read+0x0/0x60) from [<c005a384>] (__blocking_notifier_call_chain+0x38/0x6c) r5:c0427a40 r4:c0427a74 [<c005a34c>] (__blocking_notifier_call_chain+0x0/0x6c) from [<c005a3d8>] (blocking_notifier_call_chain+0x20/0x28) r8:00000009 r7:c086d640 r6:c3967940 r5:00000000 r4:c38984b8 [<c005a3b8>] (blocking_notifier_call_chain+0x0/0x28) from [<c014baa0>] (fb_notifier_call_chain+0x1c/0x24) [<c014ba84>] (fb_notifier_call_chain+0x0/0x24) from [<c014c18c>] (fb_blank+0x64/0x70) [<c014c128>] (fb_blank+0x0/0x70) from [<c0155978>] (fbcon_blank+0x114/0x1bc) r5:00000001 r4:c38984b8 [<c0155864>] (fbcon_blank+0x0/0x1bc) from [<c0170ea8>] (do_blank_screen+0x1e0/0x2a0) [<c0170cc8>] (do_blank_screen+0x0/0x2a0) from [<c0154024>] (fbcon_fb_blanked+0x74/0x94) r5:c3967940 r4:00000001 [<c0153fb0>] (fbcon_fb_blanked+0x0/0x94) from [<c0154228>] (fbcon_event_notify+0x100/0x12c) r5:fffffffe r4:c39bc194 [<c0154128>] (fbcon_event_notify+0x0/0x12c) from [<c005a0d4>] (notifier_call_chain+0x38/0x7c) [<c005a09c>] (notifier_call_chain+0x0/0x7c) from [<c005a3a0>] (__blocking_notifier_call_chain+0x54/0x6c) r8:c3b51ea0 r7:00000009 r6:ffffffff r5:c0427a40 r4:c0427a74 [<c005a34c>] (__blocking_notifier_call_chain+0x0/0x6c) from [<c005a3d8>] (blocking_notifier_call_chain+0x20/0x28) r8:00000001 r7:c3a7e000 r6:00000000 r5:00000000 r4:c38984b8 [<c005a3b8>] (blocking_notifier_call_chain+0x0/0x28) from [<c014baa0>] (fb_notifier_call_chain+0x1c/0x24) [<c014ba84>] (fb_notifier_call_chain+0x0/0x24) from [<c014c18c>] (fb_blank+0x64/0x70) [<c014c128>] (fb_blank+0x0/0x70) from [<c014e450>] (store_blank+0x54/0x7c) r5:c38984b8 r4:c3b51ec4 [<c014e3fc>] (store_blank+0x0/0x7c) from [<c017981c>] (dev_attr_store+0x28/0x2c) r8:00000001 r7:c042bf80 r6:c39eba10 r5:c3967c30 r4:c38e0140 [<c01797f4>] (dev_attr_store+0x0/0x2c) from [<c00ddaac>] (flush_write_buffer+0x54/0x68) [<c00dda58>] (flush_write_buffer+0x0/0x68) from [<c00dde08>] (sysfs_write_file+0x58/0x80) r8:c3b51f78 r7:c3bcb070 r6:c39eba10 r5:00000001 r4:00000001 [<c00dddb0>] (sysfs_write_file+0x0/0x80) from [<c009de04>] (vfs_write+0xb8/0x148) [<c009dd4c>] (vfs_write+0x0/0x148) from [<c009e384>] (sys_write+0x44/0x70) r7:00000004 r6:c3bcb070 r5:00000000 r4:00000000 [<c009e340>] (sys_write+0x0/0x70) from [<c0025d00>] (ret_fast_syscall+0x0/0x2c) r6:4001b000 r5:00000001 r4:401dc658 Signed-off-by: Krzysztof Helt <krzysztof.h1@wp.pl> Reported-by: Dmitry Baryshkov <dbaryshkov@gmail.com> Testted-by: Dmitry Baryshkov <dbaryshkov@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
||
---|---|---|
.. | ||
aty | ||
backlight | ||
console | ||
display | ||
geode | ||
i810 | ||
intelfb | ||
kyro | ||
logo | ||
matrox | ||
mbx | ||
nvidia | ||
omap | ||
pnx4008 | ||
riva | ||
savage | ||
sis | ||
vermilion | ||
68328fb.c | ||
acornfb.c | ||
acornfb.h | ||
am200epd.c | ||
amba-clcd.c | ||
amifb.c | ||
arcfb.c | ||
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 | ||
au1100fb.c | ||
au1100fb.h | ||
au1200fb.c | ||
au1200fb.h | ||
bf54x-lq043fb.c | ||
bfin-t350mcqb-fb.c | ||
bt431.h | ||
bt455.h | ||
bw2.c | ||
c2p.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 | ||
clps711xfb.c | ||
cobalt_lcdfb.c | ||
controlfb.c | ||
controlfb.h | ||
cyber2000fb.c | ||
cyber2000fb.h | ||
cyblafb.c | ||
dnfb.c | ||
edid.h | ||
efifb.c | ||
epson1355fb.c | ||
fb_ddc.c | ||
fb_defio.c | ||
fb_draw.h | ||
fb_notify.c | ||
fb_sys_fops.c | ||
fbcmap.c | ||
fbcvt.c | ||
fbmem.c | ||
fbmon.c | ||
fbsysfs.c | ||
ffb.c | ||
fm2fb.c | ||
fsl-diu-fb.c | ||
fsl-diu-fb.h | ||
g364fb.c | ||
gbefb.c | ||
gxt4500.c | ||
hecubafb.c | ||
hgafb.c | ||
hitfb.c | ||
hpfb.c | ||
igafb.c | ||
imacfb.c | ||
imsttfb.c | ||
imxfb.c | ||
imxfb.h | ||
Kconfig | ||
leo.c | ||
macfb.c | ||
macmodes.c | ||
macmodes.h | ||
Makefile | ||
maxinefb.c | ||
metronomefb.c | ||
modedb.c | ||
n411.c | ||
neofb.c | ||
offb.c | ||
output.c | ||
p9100.c | ||
platinumfb.c | ||
platinumfb.h | ||
pm2fb.c | ||
pm3fb.c | ||
pmag-aa-fb.c | ||
pmag-ba-fb.c | ||
pmagb-b-fb.c | ||
ps3fb.c | ||
pvr2fb.c | ||
pxafb.c | ||
pxafb.h | ||
q40fb.c | ||
s1d13xxxfb.c | ||
s3c2410fb.c | ||
s3c2410fb.h | ||
s3fb.c | ||
sa1100fb.c | ||
sa1100fb.h | ||
sbuslib.c | ||
sbuslib.h | ||
sgivwfb.c | ||
sh7760fb.c | ||
sh_mobile_lcdcfb.c | ||
skeletonfb.c | ||
sm501fb.c | ||
sstfb.c | ||
sticore.h | ||
stifb.c | ||
sunxvr500.c | ||
sunxvr2500.c | ||
svgalib.c | ||
syscopyarea.c | ||
sysfillrect.c | ||
sysimgblt.c | ||
tcx.c | ||
tdfxfb.c | ||
tgafb.c | ||
tridentfb.c | ||
uvesafb.c | ||
valkyriefb.c | ||
valkyriefb.h | ||
vesafb.c | ||
vfb.c | ||
vga16fb.c | ||
vgastate.c | ||
vt8623fb.c | ||
w100fb.c | ||
w100fb.h | ||
xen-fbfront.c | ||
xilinxfb.c |