Staging: Panel: prevent driver from calling misc_deregister twice on same ressource
This patch prevents the driver from calling misc_deregister twice on the same ressouce when unloading the driver. Unloading the driver without this patch results in a Kernel BUG like this: Panel driver version 0.9.5 registered on parport0 (io=0x378). BUG: unable to handle kernel paging request at 0000000000100108 IP: [<ffffffff803c02ee>] misc_deregister+0x2d/0x90 PGD 6caff067 PUD 762b7067 PMD 0 Oops: 0002 [#1] PREEMPT SMP last sysfs file: /sys/devices/platform/w83627hf.656/in8_input ... This patch fixes this issue, although maybe not in the best way possible :) linux version v2.6.32-rc1 - linus git tree, Di 29. Sep 01:10:18 CEST 2009 Signed-off-by: Peter Huewe <peterhuewe@gmx.de> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
9fcfeab4e9
commit
0b0595bfda
|
@ -2071,11 +2071,15 @@ static void panel_detach(struct parport *port)
|
|||
return;
|
||||
}
|
||||
|
||||
if (keypad_enabled && keypad_initialized)
|
||||
if (keypad_enabled && keypad_initialized) {
|
||||
misc_deregister(&keypad_dev);
|
||||
keypad_initialized = 0;
|
||||
}
|
||||
|
||||
if (lcd_enabled && lcd_initialized)
|
||||
if (lcd_enabled && lcd_initialized) {
|
||||
misc_deregister(&lcd_dev);
|
||||
lcd_initialized = 0;
|
||||
}
|
||||
|
||||
parport_release(pprt);
|
||||
parport_unregister_device(pprt);
|
||||
|
@ -2211,13 +2215,16 @@ static void __exit panel_cleanup_module(void)
|
|||
del_timer(&scan_timer);
|
||||
|
||||
if (pprt != NULL) {
|
||||
if (keypad_enabled)
|
||||
if (keypad_enabled) {
|
||||
misc_deregister(&keypad_dev);
|
||||
keypad_initialized = 0;
|
||||
}
|
||||
|
||||
if (lcd_enabled) {
|
||||
panel_lcd_print("\x0cLCD driver " PANEL_VERSION
|
||||
"\nunloaded.\x1b[Lc\x1b[Lb\x1b[L-");
|
||||
misc_deregister(&lcd_dev);
|
||||
lcd_initialized = 0;
|
||||
}
|
||||
|
||||
/* TODO: free all input signals */
|
||||
|
|
Loading…
Reference in New Issue