[Bugme-new] [Bug 16613] New: i8042 kernel module failed to load after unloading
bugzilla-daemon at bugzilla.kernel.org
bugzilla-daemon at bugzilla.kernel.org
Tue Aug 17 10:01:28 PDT 2010
https://bugzilla.kernel.org/show_bug.cgi?id=16613
Summary: i8042 kernel module failed to load after unloading
Product: Drivers
Version: 2.5
Kernel Version: 2.6.35.2 2.6.36-rc1
Platform: All
OS/Version: Linux
Tree: Mainline
Status: NEW
Severity: high
Priority: P1
Component: Input Devices
AssignedTo: drivers_input-devices at kernel-bugs.osdl.org
ReportedBy: vvscore at gmail.com
Regression: Yes
[1.] One line summary of the problem:
i8042 kernel module failed to load after unloading
[2.] Full description of the problem/report:
i8042 is compiled as dynamic module for the purpose of deactivation keyboard
controller
handling by i8042 and using alternative specialized kernel module instead
The scenario works fine on 2.6.30 kernel (steps 3-7 could be repeated many
times after boot)
1) i8042 is loaded at boot stage
2) boot procedure completes
3) i8042 is unloaded before starting usermode program
/sys/devices/platform/i8042 directory disappeares
4) specialized kernel module is loaded to service usermode program
5) usermode program does its chores and exits
6) specialized kernel module is unloaded
7) i8042 is loaded to return system to the usual way of life
/sys/devices/platform/i8042 directory appeares again
After upgrade to 2.6.35.2 (also tested on 2.6.36-rc1) things went wrong:
1) i8042 is loaded at boot stage
2) boot procedure completes
3) i8042 is unloaded before starting usermode program
rmmod psmouse
rmmod atkbd
rmmod libps2
rmmod i8042
!!! At this point /sys/devices/platform/i8042 directory DOES NOT disappeare
Skipping steps 4,5,6 for the clarity of the experiment
7) trying to load i8042 again
modprobe i8042
i8042 loading FAILES with the following error:
Aug 17 20:05:42 localhost kernel: ------------[ cut here ]------------
Aug 17 20:05:42 localhost kernel: WARNING: at fs/sysfs/dir.c:451
sysfs_add_one+0x5f/0x70()
Aug 17 20:05:42 localhost kernel: Hardware name: VT8601
Aug 17 20:05:42 localhost kernel: sysfs: cannot create duplicate filename
'/devices/platform/i8042'
See full kernel error report below
[3.] Keywords (i.e., modules, networking, kernel):
modules i8042 sysfs
[4.] Kernel version (from /proc/version):
Linux version 2.6.35.2 (root at localhost.localdomain) (gcc version 4.3.2 20081105
(Red Hat 4.3.2-7) (GCC) ) #1 SMP PREEMPT Mon Aug 16 16:29:03 MSD 2010
[5.] Output of Oops.. message (if applicable) with symbolic information
resolved (see Documentation/oops-tracing.txt)
/var/log/messages ------------------------
Aug 17 20:05:42 localhost kernel: PNP: PS/2 Controller [PNP0303] at 0x60,0x64
irq 1
Aug 17 20:05:42 localhost kernel: PNP: PS/2 appears to have AUX port disabled,
if this is incorrect please boot with i8042.nopnp
Aug 17 20:05:42 localhost kernel: ------------[ cut here ]------------
Aug 17 20:05:42 localhost kernel: WARNING: at fs/sysfs/dir.c:451
sysfs_add_one+0x5f/0x70()
Aug 17 20:05:42 localhost kernel: Hardware name: VT8601
Aug 17 20:05:42 localhost kernel: sysfs: cannot create duplicate filename
'/devices/platform/i8042'
Aug 17 20:05:42 localhost kernel: Modules linked in: i8042(+) iptable_filter
ip_tables 8139too pata_via libata [last unloaded: i8042]
Aug 17 20:05:42 localhost kernel: Pid: 2025, comm: modprobe Not tainted
2.6.35.2 #1
Aug 17 20:05:42 localhost kernel: Call Trace:
Aug 17 20:05:42 localhost kernel: [<c01272e2>] ?
warn_slowpath_common+0x68/0x93
Aug 17 20:05:42 localhost kernel: [<c0127372>] ? warn_slowpath_fmt+0x28/0x2c
Aug 17 20:05:42 localhost kernel: [<c01bac09>] ? sysfs_add_one+0x5f/0x70
Aug 17 20:05:42 localhost kernel: [<c01bb35a>] ? create_dir+0x53/0x83
Aug 17 20:05:42 localhost kernel: [<c01bb400>] ? sysfs_create_dir+0x76/0x8d
Aug 17 20:05:42 localhost kernel: [<c02322b4>] ?
kobject_add_internal+0xb5/0x14e
Aug 17 20:05:42 localhost kernel: [<c023246c>] ? kobject_add+0x44/0x47
Aug 17 20:05:42 localhost kernel: [<c02b1491>] ? device_add+0x8e/0x45a
Aug 17 20:05:42 localhost kernel: [<c02323c2>] ?
kobject_set_name_vargs+0x45/0x4c
Aug 17 20:05:42 localhost kernel: [<c02b4002>] ?
platform_device_add+0xdf/0x11d
Aug 17 20:05:42 localhost kernel: [<c02b41a2>] ?
platform_create_bundle+0x65/0x93
Aug 17 20:05:42 localhost kernel: [<c816050f>] ? i8042_probe+0x0/0x58b [i8042]
Aug 17 20:05:42 localhost kernel: [<c8160067>] ? i8042_init+0x0/0x332 [i8042]
Aug 17 20:05:42 localhost kernel: [<c8160366>] ? i8042_init+0x2ff/0x332
[i8042]
Aug 17 20:05:42 localhost kernel: [<c010112d>] ? do_one_initcall+0x44/0x120
Aug 17 20:05:42 localhost kernel: [<c014828a>] ? sys_init_module+0x77/0x193
Aug 17 20:05:42 localhost kernel: [<c041c635>] ? syscall_call+0x7/0xb
Aug 17 20:05:42 localhost kernel: ---[ end trace 8636451dbd740ccc ]---
Aug 17 20:05:42 localhost kernel: kobject_add_internal failed for i8042 with
-EEXIST, don't try to register things with the same name in the same directory.
Aug 17 20:05:42 localhost kernel: Pid: 2025, comm: modprobe Tainted: G W
2.6.35.2 #1
Aug 17 20:05:42 localhost kernel: Call Trace:
Aug 17 20:05:42 localhost kernel: [<c023233d>] ?
kobject_add_internal+0x13e/0x14e
Aug 17 20:05:42 localhost kernel: [<c023246c>] ? kobject_add+0x44/0x47
Aug 17 20:05:42 localhost kernel: [<c02b1491>] ? device_add+0x8e/0x45a
Aug 17 20:05:42 localhost kernel: [<c02323c2>] ?
kobject_set_name_vargs+0x45/0x4c
Aug 17 20:05:42 localhost kernel: [<c02b4002>] ?
platform_device_add+0xdf/0x11d
Aug 17 20:05:42 localhost kernel: [<c02b41a2>] ?
platform_create_bundle+0x65/0x93
Aug 17 20:05:42 localhost kernel: [<c816050f>] ? i8042_probe+0x0/0x58b [i8042]
Aug 17 20:05:42 localhost kernel: [<c8160067>] ? i8042_init+0x0/0x332 [i8042]
Aug 17 20:05:43 localhost kernel: [<c8160366>] ? i8042_init+0x2ff/0x332
[i8042]
Aug 17 20:05:43 localhost kernel: [<c010112d>] ? do_one_initcall+0x44/0x120
Aug 17 20:05:43 localhost kernel: [<c014828a>] ? sys_init_module+0x77/0x193
Aug 17 20:05:43 localhost kernel: [<c041c635>] ? syscall_call+0x7/0xb
------------------------
[6.] A small shell script or example program which triggers the
problem (if possible)
----------------
#!/bin/sh
rmmod psmouse
rmmod atkbd
rmmod libps2
rmmod i8042
echo "Here comes the trouble (press any key)"
read
modprobe i8042
----------------
[7.] Environment
[7.1.] Software (add the output of the ver_linux script here)
Linux localhost 2.6.35.2 #1 SMP PREEMPT Mon Aug 16 16:29:03 MSD 2010 i686 i686
i386 GNU/Linux
Gnu C ./ver_linux:
binutils 2.13.90.0.18
util-linux 2.11y
mount support
module-init-tools 3.6
e2fsprogs 1.41.4
Linux C Library 2.3.2
Dynamic linker (ldd) 2.3.2
Procps 3.2.7
Net-tools 1.60
Kbd 1.15
Sh-utils 4.5.3
Modules Loaded iptable_filter ip_tables 8139too pata_via libata
[7.2.] Processor information (from /proc/cpuinfo):
rocessor : 0
vendor_id : CentaurHauls
cpu family : 6
model : 7
model name : VIA Samuel 2
stepping : 3
cpu MHz : 532.615
cache size : 64 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu de tsc msr cx8 mtrr pge mmx 3dnow up
bogomips : 1065.23
clflush size : 32
cache_alignment : 32
address sizes : 32 bits physical, 32 bits virtual
power management:
[7.3.] Module information (from /proc/modules):
psmouse 23896 0 - Live 0xc813e000
iptable_filter 1002 0 - Live 0xc812a000
ip_tables 8403 1 iptable_filter, Live 0xc811e000
8139too 16612 0 - Live 0xc8107000
pata_via 6440 3 - Live 0xc80af000
libata 127723 1 pata_via, Live 0xc8080000
atkbd 13678 0 - Live 0xc8033000
libps2 3684 2 psmouse,atkbd, Live 0xc8024000
i8042 12611 1 libps2, Live 0xc800f000
Kernel configuration (see attachment):
kernel-config-2.6.30
kernel-config-2.6.35.2
kernel-config-2.6.36-rc1
linux-2.6.30/drivers/input/serio/i8042.c:
static void __exit i8042_exit(void)
{
platform_device_unregister(i8042_platform_device);
platform_driver_unregister(&i8042_driver);
i8042_platform_exit();
panic_blink = NULL;
}
linux-2.6.35.2/drivers/input/serio/i8042.c:
static void __exit i8042_exit(void)
{
platform_driver_unregister(&i8042_driver);
platform_device_unregister(i8042_platform_device);
i8042_platform_exit();
panic_blink = NULL;
}
The order of
platform_driver_unregister(&i8042_driver)
and
platform_device_unregister(i8042_platform_device);
has been changed
Workaround:
If i8042_exit() from the linux-2.6.35.2drivers/input/serio/i8042.c
modified as it was done in 2.6.30 kernel:
first called platform_device_unregister() and then platform_driver_unregister()
everything start to work in fine 2.6.32.5 as it was in 2.6.30 kernel
--
Configure bugmail: https://bugzilla.kernel.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
More information about the Bugme-new
mailing list