Krzysztof Helt
aef7db4bd5
fbdev: fix recursive notifier and locking when fbdev console is blanked
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>
|
2008-10-03 18:22:17 -07:00 |
| .. |
|
aty
|
radeonfb: fix accel engine hangs
|
2008-08-12 16:07:28 -07:00 |
|
backlight
|
[ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach
|
2008-08-07 09:55:48 +01:00 |
|
console
|
fbdev: fix recursive notifier and locking when fbdev console is blanked
|
2008-10-03 18:22:17 -07:00 |
|
display
|
fbdev: fix race in device_create
|
2008-05-20 13:31:53 -07:00 |
|
geode
|
lxfb: fix console blanking
|
2008-07-24 10:47:40 -07:00 |
|
i810
|
i810fb: fix console switch regression
|
2008-03-19 18:53:36 -07:00 |
|
intelfb
|
i2c: Let framebuffer drivers set their I2C bus class to DDC
|
2008-07-14 22:38:28 +02:00 |
|
kyro
|
|
|
|
logo
|
video/logo: add support for Blackfin/Linux logo for framebuffer console
|
2008-05-14 19:11:14 -07:00 |
|
matrox
|
matrox maven: convert to a new-style i2c driver
|
2008-08-12 16:07:29 -07:00 |
|
mbx
|
mbxfb: fix incorrect argument type
|
2008-03-10 18:01:20 -07:00 |
|
nvidia
|
video: replace remaining __FUNCTION__ occurrences
|
2008-04-28 08:58:42 -07:00 |
|
omap
|
[ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach
|
2008-08-07 09:55:48 +01:00 |
|
pnx4008
|
[ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach
|
2008-08-07 09:55:48 +01:00 |
|
riva
|
video: replace remaining __FUNCTION__ occurrences
|
2008-04-28 08:58:42 -07:00 |
|
savage
|
savagefb: speed up the I2C bus
|
2008-04-28 08:58:38 -07:00 |
|
sis
|
video/sis/: remove compat code
|
2008-07-24 10:47:37 -07:00 |
|
vermilion
|
removed unused #include <linux/version.h>'s
|
2008-08-23 12:14:12 -07:00 |
|
68328fb.c
|
|
|
|
acornfb.c
|
[ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach
|
2008-08-07 09:55:48 +01:00 |
|
acornfb.h
|
|
|
|
am200epd.c
|
[ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach
|
2008-08-07 09:55:48 +01:00 |
|
amba-clcd.c
|
|
|
|
amifb.c
|
drivers/video/amifb.c cleanups
|
2008-07-24 10:47:40 -07:00 |
|
arcfb.c
|
|
|
|
arkfb.c
|
removed unused #include <linux/version.h>'s
|
2008-08-23 12:14:12 -07:00 |
|
asiliantfb.c
|
|
|
|
atafb.c
|
atafb: test virtual screen range before subtraction on unsigned
|
2008-07-24 10:47:37 -07:00 |
|
atafb.h
|
|
|
|
atafb_iplan2p2.c
|
|
|
|
atafb_iplan2p4.c
|
|
|
|
atafb_iplan2p8.c
|
|
|
|
atafb_mfb.c
|
|
|
|
atafb_utils.h
|
|
|
|
atmel_lcdfb.c
|
atmel_lcdfb: disable LCD and DMA engines when suspending
|
2008-09-13 14:41:52 -07:00 |
|
au1100fb.c
|
|
|
|
au1100fb.h
|
|
|
|
au1200fb.c
|
|
|
|
au1200fb.h
|
|
|
|
bf54x-lq043fb.c
|
Blackfin arch: move include/asm-blackfin header files to arch/blackfin
|
2008-08-27 10:51:02 +08:00 |
|
bfin-t350mcqb-fb.c
|
lcd: add lcd_device to check_fb() entry in lcd_ops
|
2008-07-24 10:47:40 -07:00 |
|
bt431.h
|
|
|
|
bt455.h
|
|
|
|
bw2.c
|
sparc video: remove open boot prom code
|
2008-05-08 21:37:30 -07:00 |
|
c2p.c
|
export c2p
|
2008-07-20 17:24:39 -07:00 |
|
c2p.h
|
|
|
|
carminefb.c
|
fbdev: add the carmine FB driver
|
2008-07-24 10:47:34 -07:00 |
|
carminefb.h
|
fbdev: add the carmine FB driver
|
2008-07-24 10:47:34 -07:00 |
|
carminefb_regs.h
|
fbdev: add the carmine FB driver
|
2008-07-24 10:47:34 -07:00 |
|
cfbcopyarea.c
|
fb: add support for foreign endianness
|
2008-04-28 08:58:35 -07:00 |
|
cfbfillrect.c
|
fb: add support for foreign endianness
|
2008-04-28 08:58:35 -07:00 |
|
cfbimgblt.c
|
video: replace remaining __FUNCTION__ occurrences
|
2008-04-28 08:58:42 -07:00 |
|
cg3.c
|
sparc video: remove open boot prom code
|
2008-05-08 21:37:30 -07:00 |
|
cg6.c
|
sparc video: remove open boot prom code
|
2008-05-08 21:37:30 -07:00 |
|
cg14.c
|
sparc video: remove open boot prom code
|
2008-05-08 21:37:30 -07:00 |
|
chipsfb.c
|
PM: Introduce PM_EVENT_HIBERNATE callback state
|
2008-02-23 10:40:04 -08:00 |
|
cirrusfb.c
|
cirrusfb: check_par fixes
|
2008-09-02 19:21:38 -07:00 |
|
clps711xfb.c
|
[ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach
|
2008-08-07 09:55:48 +01:00 |
|
cobalt_lcdfb.c
|
fbdev: add new Cobalt LCD framebuffer driver
|
2008-07-24 10:47:40 -07:00 |
|
controlfb.c
|
|
|
|
controlfb.h
|
|
|
|
cyber2000fb.c
|
[ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach
|
2008-08-07 09:55:48 +01:00 |
|
cyber2000fb.h
|
|
|
|
cyblafb.c
|
|
|
|
dnfb.c
|
m68k: dnfb doesnt check for Apollo
|
2008-05-18 13:28:49 -07:00 |
|
edid.h
|
|
|
|
efifb.c
|
|
|
|
epson1355fb.c
|
[ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach
|
2008-08-07 09:55:48 +01:00 |
|
fb_ddc.c
|
i2c: Let framebuffer drivers set their I2C bus class to DDC
|
2008-07-14 22:38:28 +02:00 |
|
fb_defio.c
|
fbdefio: add set_page_dirty handler to deferred IO FB
|
2008-08-20 15:40:32 -07:00 |
|
fb_draw.h
|
fb: add support for foreign endianness
|
2008-04-28 08:58:35 -07:00 |
|
fb_notify.c
|
|
|
|
fb_sys_fops.c
|
|
|
|
fbcmap.c
|
|
|
|
fbcvt.c
|
|
|
|
fbmem.c
|
fbdefio: add set_page_dirty handler to deferred IO FB
|
2008-08-20 15:40:32 -07:00 |
|
fbmon.c
|
fbdev: width and height are unsigned
|
2008-07-24 10:47:39 -07:00 |
|
fbsysfs.c
|
|
|
|
ffb.c
|
sparc video: remove open boot prom code
|
2008-05-08 21:37:30 -07:00 |
|
fm2fb.c
|
|
|
|
fsl-diu-fb.c
|
freescale DIU: bug fix: add sanity check for AOI position
|
2008-08-15 08:35:43 -07:00 |
|
fsl-diu-fb.h
|
fbdev: powerpc: driver for Freescale 8610 and 5121 DIU
|
2008-04-28 08:58:40 -07:00 |
|
g364fb.c
|
|
|
|
gbefb.c
|
gbefb: cmap FIFO timeout
|
2008-07-30 09:41:47 -07:00 |
|
gxt4500.c
|
fbdev: use DIV_ROUND_UP or roundup
|
2008-04-28 08:58:35 -07:00 |
|
hecubafb.c
|
fbdev: platforming hecubafb and n411
|
2008-04-28 08:58:41 -07:00 |
|
hgafb.c
|
hgafb: convert to new platform driver API
|
2008-07-24 10:47:39 -07:00 |
|
hitfb.c
|
video: Fix up hp6xx driver build regressions.
|
2008-07-30 02:16:12 +09:00 |
|
hpfb.c
|
m68k: Return -ENODEV if no device is found
|
2008-05-18 13:28:50 -07:00 |
|
igafb.c
|
drivers/video: add missing pci_dev_get
|
2008-02-06 10:41:16 -08:00 |
|
imacfb.c
|
|
|
|
imsttfb.c
|
video: replace remaining __FUNCTION__ occurrences
|
2008-04-28 08:58:42 -07:00 |
|
imxfb.c
|
[ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach
|
2008-08-07 09:55:48 +01:00 |
|
imxfb.h
|
|
|
|
Kconfig
|
video: sh7760fb: SH7760/SH7763 LCDC framebuffer driver
|
2008-07-24 10:47:41 -07:00 |
|
leo.c
|
sparc: get leo framebuffer working
|
2008-06-10 14:13:09 -07:00 |
|
macfb.c
|
make macfb_setup() static
|
2008-07-26 12:00:12 -07:00 |
|
macmodes.c
|
|
|
|
macmodes.h
|
|
|
|
Makefile
|
video: Kill off leaked CONFIG_FB_SH7343VOU reference.
|
2008-07-29 06:39:26 +09:00 |
|
maxinefb.c
|
|
|
|
metronomefb.c
|
video: use get/put_unaligned_* helpers
|
2008-04-29 08:06:28 -07:00 |
|
modedb.c
|
fbdev: export symbol fb_mode_option
|
2008-06-06 11:29:12 -07:00 |
|
n411.c
|
fbdev: platforming hecubafb and n411
|
2008-04-28 08:58:41 -07:00 |
|
neofb.c
|
neofb: drop the xtimings structure
|
2008-07-24 10:47:41 -07:00 |
|
offb.c
|
fbdev: Teaches offb about palette on radeon r5xx/r6xx
|
2008-07-22 10:39:36 +10:00 |
|
output.c
|
|
|
|
p9100.c
|
sparc video: remove open boot prom code
|
2008-05-08 21:37:30 -07:00 |
|
platinumfb.c
|
platinumfb: Use linux/of_{device,platform}.h instead of asm
|
2008-06-09 13:46:38 +10:00 |
|
platinumfb.h
|
|
|
|
pm2fb.c
|
pm2fb: free cmap memory on module remove
|
2008-08-20 15:40:31 -07:00 |
|
pm3fb.c
|
video: replace remaining __FUNCTION__ occurrences
|
2008-04-28 08:58:42 -07:00 |
|
pmag-aa-fb.c
|
fbcon: fix color generation for monochrome framebuffer
|
2008-02-06 10:41:18 -08:00 |
|
pmag-ba-fb.c
|
|
|
|
pmagb-b-fb.c
|
|
|
|
ps3fb.c
|
powerpc/ps3: Add a sub-match id to ps3_system_bus
|
2008-07-22 10:39:33 +10:00 |
|
pvr2fb.c
|
sh: More header path fixups for mach dir refactoring.
|
2008-07-29 22:10:01 +09:00 |
|
pxafb.c
|
[ARM] pxafb: fix the warning of incorrect lccr when lcd_conn is specified
|
2008-08-16 16:39:16 +01:00 |
|
pxafb.h
|
pxafb: convert ctrlr_sem in a mutex
|
2008-07-24 10:47:37 -07:00 |
|
q40fb.c
|
|
|
|
s1d13xxxfb.c
|
|
|
|
s3c2410fb.c
|
[ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach
|
2008-08-07 09:55:48 +01:00 |
|
s3c2410fb.h
|
S3C2410: clean out changelog header and tidy
|
2008-05-24 09:56:13 -07:00 |
|
s3fb.c
|
removed unused #include <linux/version.h>'s
|
2008-08-23 12:14:12 -07:00 |
|
sa1100fb.c
|
[ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach
|
2008-08-07 09:55:48 +01:00 |
|
sa1100fb.h
|
sa1100fb: convert ctrlr_sem in a mutex
|
2008-07-24 10:47:37 -07:00 |
|
sbuslib.c
|
sparc video: remove open boot prom code
|
2008-05-08 21:37:30 -07:00 |
|
sbuslib.h
|
sparc video: remove open boot prom code
|
2008-05-08 21:37:30 -07:00 |
|
sgivwfb.c
|
x86, VisWS: turn into generic arch, move definitions
|
2008-07-10 18:55:40 +02:00 |
|
sh7760fb.c
|
sh7760fb: write colormap value to hardware
|
2008-07-28 16:30:21 -07:00 |
|
sh_mobile_lcdcfb.c
|
video: export sh_mobile_lcdc panel size
|
2008-08-11 20:17:55 +09:00 |
|
skeletonfb.c
|
skeletonfb: update to correct platform driver usage
|
2008-07-24 10:47:39 -07:00 |
|
sm501fb.c
|
sm501: fixup allocation code to be 64bit resource compliant
|
2008-07-24 10:47:40 -07:00 |
|
sstfb.c
|
video: replace remaining __FUNCTION__ occurrences
|
2008-04-28 08:58:42 -07:00 |
|
sticore.h
|
video/console/stico{n,re}.c: make code static
|
2008-07-26 12:00:12 -07:00 |
|
stifb.c
|
video/stifb.c: make 2 functions static
|
2008-07-26 12:00:12 -07:00 |
|
sunxvr500.c
|
sparc video: remove open boot prom code
|
2008-05-08 21:37:30 -07:00 |
|
sunxvr2500.c
|
sparc video: remove open boot prom code
|
2008-05-08 21:37:30 -07:00 |
|
svgalib.c
|
|
|
|
syscopyarea.c
|
fb: add support for foreign endianness
|
2008-04-28 08:58:35 -07:00 |
|
sysfillrect.c
|
fb: add support for foreign endianness
|
2008-04-28 08:58:35 -07:00 |
|
sysimgblt.c
|
video: replace remaining __FUNCTION__ occurrences
|
2008-04-28 08:58:42 -07:00 |
|
tcx.c
|
sparc video: remove open boot prom code
|
2008-05-08 21:37:30 -07:00 |
|
tdfxfb.c
|
tdfxfb: fix frame buffer name overrun
|
2008-09-02 19:21:39 -07:00 |
|
tgafb.c
|
|
|
|
tridentfb.c
|
tridentfb: remove warning message that cyblafb driver should be used
|
2008-07-24 10:47:36 -07:00 |
|
uvesafb.c
|
uvesafb: change mode parameter to mode_option
|
2008-07-24 10:47:37 -07:00 |
|
valkyriefb.c
|
|
|
|
valkyriefb.h
|
|
|
|
vesafb.c
|
|
|
|
vfb.c
|
vfb: only enable if explicitly requested when compiled in
|
2008-07-24 10:47:39 -07:00 |
|
vga16fb.c
|
vga16fb: source code improvement
|
2008-07-24 10:47:38 -07:00 |
|
vgastate.c
|
|
|
|
vt8623fb.c
|
removed unused #include <linux/version.h>'s
|
2008-08-23 12:14:12 -07:00 |
|
w100fb.c
|
w100fb: add 80 MHz modeline
|
2008-07-04 10:40:08 -07:00 |
|
w100fb.h
|
|
|
|
xen-fbfront.c
|
xen pvfb: Dynamic mode support (screen resizing)
|
2008-05-27 10:11:36 +02:00 |
|
xilinxfb.c
|
removed unused #include <linux/version.h>'s
|
2008-08-23 12:14:12 -07:00 |