android_kernel_sony_sdm845/drivers/input/misc
Repository files (latest commit first)
Filename Latest commit message Latest commit date
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