Dmitry Torokhov
c46c4af7a1
Input: uinput - avoid FF flush when destroying device
commit e8b95728f724797f958912fd9b765a695595d3a6 upstream.
Normally, when input device supporting force feedback effects is being
destroyed, we try to "flush" currently playing effects, so that the
physical device does not continue vibrating (or executing other effects).
Unfortunately this does not work well for uinput as flushing of the effects
deadlocks with the destroy action:
- if device is being destroyed because the file descriptor is being closed,
then there is noone to even service FF requests;
- if device is being destroyed because userspace sent UI_DEV_DESTROY,
while theoretically it could be possible to service FF requests,
userspace is unlikely to do so (they'd need to make sure FF handling
happens on a separate thread) even if kernel solves the issue with FF
ioctls deadlocking with UI_DEV_DESTROY ioctl on udev->mutex.
To avoid lockups like the one below, let's install a custom input device
flush handler, and avoid trying to flush force feedback effects when we
destroying the device, and instead rely on uinput to shut off the device
properly.
NMI watchdog: Watchdog detected hard LOCKUP on cpu 3
...
<<EOE>> [<ffffffff817a0307>] _raw_spin_lock_irqsave+0x37/0x40
[<ffffffff810e633d>] complete+0x1d/0x50
[<ffffffffa00ba08c>] uinput_request_done+0x3c/0x40 [uinput]
[<ffffffffa00ba587>] uinput_request_submit.part.7+0x47/0xb0 [uinput]
[<ffffffffa00bb62b>] uinput_dev_erase_effect+0x5b/0x76 [uinput]
[<ffffffff815d91ad>] erase_effect+0xad/0xf0
[<ffffffff815d929d>] flush_effects+0x4d/0x90
[<ffffffff815d4cc0>] input_flush_device+0x40/0x60
[<ffffffff815daf1c>] evdev_cleanup+0xac/0xc0
[<ffffffff815daf5b>] evdev_disconnect+0x2b/0x60
[<ffffffff815d74ac>] __input_unregister_device+0xac/0x150
[<ffffffff815d75f7>] input_unregister_device+0x47/0x70
[<ffffffffa00bac45>] uinput_destroy_device+0xb5/0xc0 [uinput]
[<ffffffffa00bb2de>] uinput_ioctl_handler.isra.9+0x65e/0x740 [uinput]
[<ffffffff811231ab>] ? do_futex+0x12b/0xad0
[<ffffffffa00bb3f8>] uinput_ioctl+0x18/0x20 [uinput]
[<ffffffff81241248>] do_vfs_ioctl+0x298/0x480
[<ffffffff81337553>] ? security_file_ioctl+0x43/0x60
[<ffffffff812414a9>] SyS_ioctl+0x79/0x90
[<ffffffff817a04ee>] entry_SYSCALL_64_fastpath+0x12/0x71
Reported-by: Rodrigo Rivas Costa <rodrigorivascosta@gmail.com>
Reported-by: Clément VUCHENER <clement.vuchener@gmail.com>
Fixes: https://bugzilla.kernel.org/show_bug.cgi?id=193741
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
2021-01-23 15:38:17 +01:00 |
| .. |
|
88pm80x_onkey.c
|
|
|
|
88pm860x_onkey.c
|
|
|
|
ab8500-ponkey.c
|
Input: ab8500-ponkey - Fix module autoload for OF platform driver
|
2015-09-03 10:56:19 -07:00 |
|
ad714x-i2c.c
|
Input: ad714x - convert to using managed resources
|
2015-09-19 11:42:39 -07:00 |
|
ad714x-spi.c
|
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
|
2015-11-06 11:57:41 -08:00 |
|
ad714x.c
|
Input: ad714x - convert to using managed resources
|
2015-09-19 11:42:39 -07:00 |
|
ad714x.h
|
Input: ad714x - convert to using managed resources
|
2015-09-19 11:42:39 -07:00 |
|
adxl34x-i2c.c
|
|
|
|
adxl34x-spi.c
|
spi: Drop owner assignment from spi_drivers
|
2015-10-28 10:30:17 +09:00 |
|
adxl34x.c
|
Input: adxl34x - clean up a data type in adxl34x_probe()
|
2020-11-24 13:03:01 +01:00 |
|
adxl34x.h
|
|
|
|
apanel.c
|
Input: apanel - spelling mistake - "skiping" -> "skipping"
|
2016-06-23 10:44:01 -07:00 |
|
arizona-haptics.c
|
Input: arizona-haptic - don't assign input_dev parent
|
2016-04-17 05:24:52 -07:00 |
|
ati_remote2.c
|
Input: ati_remote2 - fix crashes on detecting device with invalid descriptor
|
2016-03-23 17:29:29 -07:00 |
|
atlas_btns.c
|
|
|
|
atmel_captouch.c
|
Input: add Atmel Captouch Button driver
|
2016-05-18 15:08:19 -07:00 |
|
axp20x-pek.c
|
|
|
|
bfin_rotary.c
|
|
|
|
bma150.c
|
Input: bma150 - register input device after setting private data
|
2019-02-20 10:18:32 +01:00 |
|
cm109.c
|
Input: cm109 - do not stomp on control URB
|
2020-12-29 13:44:47 +01:00 |
|
cma3000_d0x.c
|
|
|
|
cma3000_d0x.h
|
|
|
|
cma3000_d0x_i2c.c
|
|
|
|
cobalt_btns.c
|
|
|
|
da9052_onkey.c
|
|
|
|
da9055_onkey.c
|
|
|
|
da9063_onkey.c
|
Input: da9063 - fix capability and drop KEY_SLEEP
|
2019-10-29 09:15:20 +01:00 |
|
dm355evm_keys.c
|
|
|
|
drv260x.c
|
Input: drv260x - fix initializing overdrive voltage
|
2018-04-29 11:31:56 +02:00 |
|
drv2665.c
|
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
|
2015-09-04 12:02:11 -07:00 |
|
drv2667.c
|
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
|
2015-09-04 12:02:11 -07:00 |
|
e3x0-button.c
|
|
|
|
gp2ap002a00f.c
|
|
|
|
gpio-beeper.c
|
|
|
|
gpio_decoder.c
|
Input: add generic input driver to read encoded GPIO lines
|
2016-08-29 20:24:23 -07:00 |
|
gpio_tilt_polled.c
|
|
|
|
hisi_powerkey.c
|
Input: add powerkey driver for HISI 65xx SoC
|
2016-06-23 13:45:54 -07:00 |
|
hp_sdc_rtc.c
|
Input: hp_sdc_rtc - fix y2038 problem in proc_show
|
2015-10-22 23:31:28 -07:00 |
|
ideapad_slidebar.c
|
|
|
|
ims-pcu.c
|
Input: ims-psu - check if CDC union descriptor is sane
|
2017-11-18 11:22:24 +01:00 |
|
ixp4xx-beeper.c
|
|
|
|
Kconfig
|
Input: tps65218-pwrbutton - add support for tps65217 variant
|
2016-09-10 10:47:49 -07:00 |
|
keyspan_remote.c
|
Input: keyspan-remote - fix control-message timeouts
|
2020-01-29 10:24:38 +01:00 |
|
kxtj9.c
|
Input: kxtj9 - remove unneeded retval variable
|
2015-10-02 11:44:17 -07:00 |
|
m68kspkr.c
|
|
|
|
Makefile
|
Input: add generic input driver to read encoded GPIO lines
|
2016-08-29 20:24:23 -07:00 |
|
max8925_onkey.c
|
|
|
|
max8997_haptic.c
|
pwm: Changes for v4.7-rc1
|
2016-05-25 10:40:15 -07:00 |
|
max77693-haptic.c
|
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
|
2016-10-07 09:12:19 -07:00 |
|
mc13783-pwrbutton.c
|
|
|
|
mma8450.c
|
|
|
|
mpu3050.c
|
|
|
|
palmas-pwrbutton.c
|
|
|
|
pcap_keys.c
|
|
|
|
pcf8574_keypad.c
|
|
|
|
pcf50633-input.c
|
|
|
|
pcspkr.c
|
|
|
|
pm8xxx-vibrator.c
|
|
|
|
pm8941-pwrkey.c
|
Input: pm8941-pwrkey - remove unneded semicolon
|
2015-09-19 11:39:03 -07:00 |
|
pmic8xxx-pwrkey.c
|
Input: pmic8xxx-pwrkey - fix algorithm for converting trigger delay
|
2016-04-17 05:24:53 -07:00 |
|
powermate.c
|
Input: powermate - fix oops with malicious USB descriptors
|
2016-03-14 09:36:49 -07:00 |
|
pwm-beeper.c
|
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
|
2016-05-27 19:14:35 -07:00 |
|
rb532_button.c
|
MIPS: Remove all the uses of custom gpio.h
|
2015-09-03 12:08:02 +02:00 |
|
regulator-haptic.c
|
Input: regulator-haptic - fix spelling mistake: "dveice" -> "device"
|
2016-06-23 10:43:57 -07:00 |
|
retu-pwrbutton.c
|
|
|
|
rotary_encoder.c
|
Input: rotary_encoder - support binary encoding of states
|
2016-07-27 18:26:10 -07:00 |
|
sgi_btns.c
|
|
|
|
sirfsoc-onkey.c
|
Input: sirfsoc-onkey - allow modular build
|
2016-01-27 15:55:14 -08:00 |
|
soc_button_array.c
|
|
|
|
sparcspkr.c
|
Input: sparcspkr - use platform_register/unregister_drivers()
|
2015-12-02 10:02:50 -08:00 |
|
tps65218-pwrbutton.c
|
Input: tps65218-pwrbutton - add support for tps65217 variant
|
2016-09-10 10:47:49 -07:00 |
|
twl4030-pwrbutton.c
|
Input: twl4030-pwrbutton - use correct device for irq request
|
2018-03-24 11:00:20 +01:00 |
|
twl4030-vibra.c
|
Input: twl4030-vibra - fix sibling-node lookup
|
2018-01-23 19:57:07 +01:00 |
|
twl6040-vibra.c
|
Input: twl6040-vibra - fix child-node lookup
|
2018-01-23 19:57:07 +01:00 |
|
uinput.c
|
Input: uinput - avoid FF flush when destroying device
|
2021-01-23 15:38:17 +01:00 |
|
wistron_btns.c
|
|
|
|
wm831x-on.c
|
|
|
|
xen-kbdfront.c
|
Input: xen-kbdfront - prefer xenbus_write() over xenbus_printf() where possible
|
2016-07-13 17:27:24 -07:00 |
|
yealink.c
|
Input: yealink - validate number of endpoints before using them
|
2017-03-30 09:41:23 +02:00 |
|
yealink.h
|
|
|