59b015133c
sysfs_remove_group() waits for sysfs attributes to be removed, therefore we do not need to worry about driver-specific attributes being accessed after driver has been detached from the device. In fact, attempts to take serio->drv_mutex in attribute methods may lead to the following deadlock: sysfs_read_file() fill_read_buffer() sysfs_get_active_two() psmouse_attr_show_helper() serio_pin_driver() serio_disconnect_driver() mutex_lock(&serio->drv_mutex); <--------> mutex_lock(&serio_drv_mutex); psmouse_disconnect() sysfs_remove_group(... psmouse_attr_group); .... sysfs_deactivate(); wait_for_completion(); Fix this by removing calls to serio_[un]pin_driver() and functions themselves and using driver-private mutexes to serialize access to attribute's set() methods that may change device state. Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru> |
||
---|---|---|
.. | ||
alps.c | ||
alps.h | ||
amimouse.c | ||
appletouch.c | ||
atarimouse.c | ||
bcm5974.c | ||
elantech.c | ||
elantech.h | ||
gpio_mouse.c | ||
hgpk.c | ||
hgpk.h | ||
inport.c | ||
Kconfig | ||
lifebook.c | ||
lifebook.h | ||
logibm.c | ||
logips2pp.c | ||
logips2pp.h | ||
Makefile | ||
maplemouse.c | ||
pc110pad.c | ||
psmouse-base.c | ||
psmouse.h | ||
pxa930_trkball.c | ||
rpcmouse.c | ||
sentelic.c | ||
sentelic.h | ||
sermouse.c | ||
synaptics_i2c.c | ||
synaptics.c | ||
synaptics.h | ||
touchkit_ps2.c | ||
touchkit_ps2.h | ||
trackpoint.c | ||
trackpoint.h | ||
vsxxxaa.c |