projects
/
openwrt
/
staging
/
blogic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
28c0ada
)
extcon: Unregister compat class at module unload to fix oops
author
Peter Huewe
<peterhuewe@gmx.de>
Mon, 24 Sep 2012 06:32:31 +0000
(15:32 +0900)
committer
MyungJoo Ham
<myungjoo.ham@samsung.com>
Tue, 23 Oct 2012 07:32:11 +0000
(16:32 +0900)
If you compile extcon with CONFIG_ANDROID and then load and unload the
module you get a simple oops as the driver does not unregister its
compat class and thus cannot register it again.
Full trace:
root@(none):~# modprobe extcon_class
root@(none):~# rmmod extcon_class
root@(none):~# modprobe extcon_class
------------[ cut here ]------------
WARNING: at fs/sysfs/dir.c:536 sysfs_add_one+0xde/0x100()
sysfs: cannot create duplicate filename '/class/switch'
Modules linked in: extcon_class(+) [last unloaded: extcon_class]
Call Trace:
9f451a00
: [<
602a58bc
>] printk+0x0/0xa8
9f451a18
: [<
60039b43
>] warn_slowpath_common+0x93/0xd0
9f451a28
: [<
6012c6de
>] sysfs_add_one+0xde/0x100
9f451a50
: [<
601d3d90
>] strcat+0x0/0x40
9f451a68
: [<
60039cdc
>] warn_slowpath_fmt+0x9c/0xa0
9f451a90
: [<
6002fe32
>] unblock_signals+0x0/0x84
9f451ab0
: [<
60039c40
>] warn_slowpath_fmt+0x0/0xa0
9f451ac0
: [<
6002fe32
>] unblock_signals+0x0/0x84
9f451ae8
: [<
6012bd97
>] sysfs_pathname.isra.10+0x57/0x70
9f451b00
: [<
601d3d90
>] strcat+0x0/0x40
9f451b18
: [<
6012bd97
>] sysfs_pathname.isra.10+0x57/0x70
9f451b48
: [<
6012c6de
>] sysfs_add_one+0xde/0x100
9f451b78
: [<
6012c96f
>] create_dir+0x8f/0x100
9f451bc0
: [<
a0861000
>] extcon_class_init+0x0/0x12 [extcon_class]
9f451bd8
: [<
6012cda6
>] sysfs_create_dir+0xa6/0x1c0
9f451be8
: [<
601d89f1
>] kvasprintf+0x81/0xa0
9f451bf8
: [<
601cf0f0
>] kobject_get+0x0/0x50
9f451c18
: [<
601cf396
>] kobject_add_internal+0x96/0x280
9f451c60
: [<
a0861000
>] extcon_class_init+0x0/0x12 [extcon_class]
9f451c78
: [<
601cfb93
>] kobject_add+0xd3/0x140
9f451cc0
: [<
601cfac0
>] kobject_add+0x0/0x140
9f451cd0
: [<
6002fe32
>] unblock_signals+0x0/0x84
9f451cf8
: [<
6002fffc
>] set_signals+0x29/0x3f
9f451d28
: [<
600c1de1
>] kmem_cache_alloc+0xe1/0x100
9f451d78
: [<
601cffa0
>] kobject_create_and_add+0x50/0xa0
9f451da8
: [<
601fbe76
>] class_compat_register+0x56/0x80
9f451dc8
: [<
a085d118
>] create_extcon_class+0x88/0xd0 [extcon_class]
9f451de8
: [<
a0861010
>] extcon_class_init+0x10/0x12 [extcon_class]
9f451df8
: [<
600189a8
>] do_one_initcall+0x48/0x1f0
9f451e20
: [<
60061920
>] blocking_notifier_call_chain+0x0/0x20
9f451e30
: [<
60061920
>] blocking_notifier_call_chain+0x0/0x20
9f451e58
: [<
6007e3c3
>] sys_init_module+0xa3/0x280
9f451e88
: [<
6001e2ad
>] handle_syscall+0x8d/0x90
9f451ea8
: [<
60033370
>] userspace+0x405/0x531
9f451ee8
: [<
6001e380
>] copy_chunk_to_user+0x0/0x40
9f451ef8
: [<
6001e5cd
>] do_op_one_page+0x14d/0x220
9f451fd8
: [<
6001a355
>] fork_handler+0x95/0xa0
---[ end trace
dd512cc03fe1c367
]---
------------[ cut here ]------------
WARNING: at lib/kobject.c:196 kobject_add_internal+0x26e/0x280()
kobject_add_internal failed for switch with -EEXIST, don't try to
register things with the same name in the same directory.
Modules linked in: extcon_class(+) [last unloaded: extcon_class]
Call Trace:
9f451ad0
: [<
602a58bc
>] printk+0x0/0xa8
9f451ae8
: [<
60039b43
>] warn_slowpath_common+0x93/0xd0
9f451af8
: [<
601cf56e
>] kobject_add_internal+0x26e/0x280
9f451b18
: [<
601cf140
>] kobject_put+0x0/0x70
9f451b20
: [<
a0861000
>] extcon_class_init+0x0/0x12 [extcon_class]
9f451b38
: [<
60039cdc
>] warn_slowpath_fmt+0x9c/0xa0
9f451b88
: [<
60039c40
>] warn_slowpath_fmt+0x0/0xa0
9f451bc0
: [<
a0861000
>] extcon_class_init+0x0/0x12 [extcon_class]
9f451bd8
: [<
6012cda6
>] sysfs_create_dir+0xa6/0x1c0
9f451be8
: [<
601d89f1
>] kvasprintf+0x81/0xa0
9f451bf8
: [<
601cf0f0
>] kobject_get+0x0/0x50
9f451c18
: [<
601cf56e
>] kobject_add_internal+0x26e/0x280
9f451c60
: [<
a0861000
>] extcon_class_init+0x0/0x12 [extcon_class]
9f451c78
: [<
601cfb93
>] kobject_add+0xd3/0x140
9f451cc0
: [<
601cfac0
>] kobject_add+0x0/0x140
9f451cd0
: [<
6002fe32
>] unblock_signals+0x0/0x84
9f451cf8
: [<
6002fffc
>] set_signals+0x29/0x3f
9f451d28
: [<
600c1de1
>] kmem_cache_alloc+0xe1/0x100
9f451d78
: [<
601cffa0
>] kobject_create_and_add+0x50/0xa0
9f451da8
: [<
601fbe76
>] class_compat_register+0x56/0x80
9f451dc8
: [<
a085d118
>] create_extcon_class+0x88/0xd0 [extcon_class]
9f451de8
: [<
a0861010
>] extcon_class_init+0x10/0x12 [extcon_class]
9f451df8
: [<
600189a8
>] do_one_initcall+0x48/0x1f0
9f451e20
: [<
60061920
>] blocking_notifier_call_chain+0x0/0x20
9f451e30
: [<
60061920
>] blocking_notifier_call_chain+0x0/0x20
9f451e58
: [<
6007e3c3
>] sys_init_module+0xa3/0x280
9f451e88
: [<
6001e2ad
>] handle_syscall+0x8d/0x90
9f451ea8
: [<
60033370
>] userspace+0x405/0x531
9f451ee8
: [<
6001e380
>] copy_chunk_to_user+0x0/0x40
9f451ef8
: [<
6001e5cd
>] do_op_one_page+0x14d/0x220
9f451fd8
: [<
6001a355
>] fork_handler+0x95/0xa0
---[ end trace
dd512cc03fe1c368
]---
kobject_create_and_add: kobject_add error: -17
------------[ cut here ]------------
WARNING: at drivers/extcon/extcon_class.c:545
create_extcon_class+0xbc/0xd0 [extcon_class]()
cannot allocate
Modules linked in: extcon_class(+) [last unloaded: extcon_class]
Call Trace:
9f451c80
: [<
602a58bc
>] printk+0x0/0xa8
9f451c98
: [<
60039b43
>] warn_slowpath_common+0x93/0xd0
9f451ca0
: [<
6002fe32
>] unblock_signals+0x0/0x84
9f451ca8
: [<
a085d14c
>] create_extcon_class+0xbc/0xd0 [extcon_class]
9f451cd0
: [<
a0861000
>] extcon_class_init+0x0/0x12 [extcon_class]
9f451ce8
: [<
60039cdc
>] warn_slowpath_fmt+0x9c/0xa0
9f451d20
: [<
6002fe32
>] unblock_signals+0x0/0x84
9f451d28
: [<
60039c40
>] warn_slowpath_fmt+0x0/0xa0
9f451d48
: [<
6002fffc
>] set_signals+0x29/0x3f
9f451d58
: [<
601cf172
>] kobject_put+0x32/0x70
9f451d78
: [<
600c22c3
>] kfree+0xb3/0x100
9f451da8
: [<
601fbe9a
>] class_compat_register+0x7a/0x80
9f451dc8
: [<
a085d14c
>] create_extcon_class+0xbc/0xd0 [extcon_class]
9f451de8
: [<
a0861010
>] extcon_class_init+0x10/0x12 [extcon_class]
9f451df8
: [<
600189a8
>] do_one_initcall+0x48/0x1f0
9f451e20
: [<
60061920
>] blocking_notifier_call_chain+0x0/0x20
9f451e30
: [<
60061920
>] blocking_notifier_call_chain+0x0/0x20
9f451e58
: [<
6007e3c3
>] sys_init_module+0xa3/0x280
9f451e88
: [<
6001e2ad
>] handle_syscall+0x8d/0x90
9f451ea8
: [<
60033370
>] userspace+0x405/0x531
9f451ee8
: [<
6001e380
>] copy_chunk_to_user+0x0/0x40
9f451ef8
: [<
6001e5cd
>] do_op_one_page+0x14d/0x220
9f451fd8
: [<
6001a355
>] fork_handler+0x95/0xa0
---[ end trace
dd512cc03fe1c369
]---
FATAL: Error inserting extcon_class
(/lib/modules/
3.6.0-rc6-00178-g811315f
/kernel/drivers/extcon/extcon_class.ko):
Cannot allocate memory
This patch fixes this.
Cc: stable@vger.kernel.org
Signed-off-by: Peter Huewe <peterhuewe@gmx.de>
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
drivers/extcon/extcon-class.c
patch
|
blob
|
history
diff --git
a/drivers/extcon/extcon-class.c
b/drivers/extcon/extcon-class.c
index 1ce76a8d777b8f1e80cc6769f1b04dcc10954d0d..63715cdfe9888d4e19669ea65e2026f425629f1a 100644
(file)
--- a/
drivers/extcon/extcon-class.c
+++ b/
drivers/extcon/extcon-class.c
@@
-819,6
+819,9
@@
module_init(extcon_class_init);
static void __exit extcon_class_exit(void)
{
+#if defined(CONFIG_ANDROID)
+ class_compat_unregister(switch_class);
+#endif
class_destroy(extcon_class);
}
module_exit(extcon_class_exit);