Re: [PATCH v2] uinput: Use wait_for_completion_interruptible_timeout in uinput_request_submit

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Dmitry,

On 3/10/19 7:18 PM, Dmitry Torokhov wrote:
> Hi Marcos,
> 
> On Tue, Mar 5, 2019 at 8:53 AM Marcos Paulo de Souza
> <marcos.souza.org@xxxxxxxxx> wrote:
>>
>> Humble ping :)
>>
> 
> Sorry for not responding. I would like to better understand the nature
> of the lockdep complaint before we start making more changes there.

I'm attaching the lockdep report with the current master from yesterday, commit 065b6c4c913d3986c2118acb7e7fb364ce4fb625. Even without my change, the lockdep is already there in current master.

Thanks,
Marcos

> 
> Thanks!
> 
[   40.183668] ======================================================
[   40.188147] WARNING: possible circular locking dependency detected
[   40.192633] 5.0.0+ #33 Not tainted
[   40.195199] ------------------------------------------------------
[   40.199483] fftest/243 is trying to acquire lock:
[   40.202862] 0000000029628de4 (&newdev->mutex){+.+.}, at: uinput_request_submit.part.7+0x1a/0xf0 [uinput]
[   40.209480]
[   40.209480] but task is already holding lock:
[   40.214609] 00000000897272c7 (&ff->mutex){+.+.}, at: input_ff_upload+0xa6/0x250
[   40.219801]
[   40.219801] which lock already depends on the new lock.
[   40.219801]
[   40.226418]
[   40.226418] the existing dependency chain (in reverse order) is:
[   40.231630]
[   40.231630] -> #3 (&ff->mutex){+.+.}:
[   40.235484]        __mutex_lock+0x7d/0x9a0
[   40.238681]        input_ff_flush+0x23/0x60
[   40.242145]        input_flush_device+0x3b/0x60
[   40.245528]        evdev_flush+0x54/0x60
[   40.248546]        filp_close+0x25/0x70
[   40.251349]        __x64_sys_close+0x19/0x40
[   40.254648]        do_syscall_64+0x4b/0x180
[   40.258431]        entry_SYSCALL_64_after_hwframe+0x49/0xbe
[   40.262372]
[   40.262372] -> #2 (&dev->mutex#2){+.+.}:
[   40.266534]        __mutex_lock+0x7d/0x9a0
[   40.270447]        input_register_handle+0x25/0xc0
[   40.273977]        kbd_connect+0x44/0x90
[   40.276676]        input_attach_handler+0x73/0xb0
[   40.280227]        input_register_device+0x470/0x4e0
[   40.283905]        acpi_button_add+0x179/0x470
[   40.287103]        acpi_device_probe+0x43/0x110
[   40.290353]        really_probe+0x1c3/0x2c0
[   40.293644]        driver_probe_device+0x4a/0xe0
[   40.297157]        device_driver_attach+0x4b/0x50
[   40.301204]        __driver_attach+0x69/0xb0
[   40.304569]        bus_for_each_dev+0x74/0xc0
[   40.307533]        bus_add_driver+0x174/0x1f0
[   40.311135]        driver_register+0x56/0xe0
[   40.314694]        do_one_initcall+0x58/0x2ae
[   40.318084]        kernel_init_freeable+0x1ca/0x256
[   40.321460]        kernel_init+0x5/0x100
[   40.324340]        ret_from_fork+0x3a/0x50
[   40.326800]
[   40.326800] -> #1 (input_mutex){+.+.}:
[   40.329922]        __mutex_lock+0x7d/0x9a0
[   40.332525]        input_register_device+0x41e/0x4e0
[   40.335554]        uinput_ioctl_handler.isra.9+0x557/0x980 [uinput]
[   40.338831]        do_vfs_ioctl+0xa0/0x6e0
[   40.340765]        ksys_ioctl+0x6b/0x80
[   40.343015]        __x64_sys_ioctl+0x11/0x20
[   40.345469]        do_syscall_64+0x4b/0x180
[   40.347261]        entry_SYSCALL_64_after_hwframe+0x49/0xbe
[   40.349131]
[   40.349131] -> #0 (&newdev->mutex){+.+.}:
[   40.350835]        lock_acquire+0xa7/0x1b0
[   40.352141]        __mutex_lock+0x7d/0x9a0
[   40.353237]        uinput_request_submit.part.7+0x1a/0xf0 [uinput]
[   40.354855]        uinput_dev_upload_effect+0x55/0x80 [uinput]
[   40.356393]        input_ff_upload+0x1c0/0x250
[   40.357544]        evdev_ioctl_handler+0x388/0xc10
[   40.358775]        do_vfs_ioctl+0xa0/0x6e0
[   40.359834]        ksys_ioctl+0x6b/0x80
[   40.360836]        __x64_sys_ioctl+0x11/0x20
[   40.362206]        do_syscall_64+0x4b/0x180
[   40.363473]        entry_SYSCALL_64_after_hwframe+0x49/0xbe
[   40.364904]
[   40.364904] other info that might help us debug this:
[   40.364904]
[   40.366889] Chain exists of:
[   40.366889]   &newdev->mutex --> &dev->mutex#2 --> &ff->mutex
[   40.366889]
[   40.369360]  Possible unsafe locking scenario:
[   40.369360]
[   40.370799]        CPU0                    CPU1
[   40.371904]        ----                    ----
[   40.373017]   lock(&ff->mutex);
[   40.373783]                                lock(&dev->mutex#2);
[   40.375166]                                lock(&ff->mutex);
[   40.376488]   lock(&newdev->mutex);
[   40.377446]
[   40.377446]  *** DEADLOCK ***
[   40.377446]
[   40.379303] 2 locks held by fftest/243:
[   40.380557]  #0: 000000004fe326a8 (&evdev->mutex){+.+.}, at: evdev_ioctl_handler+0x48/0xc10
[   40.382916]  #1: 00000000897272c7 (&ff->mutex){+.+.}, at: input_ff_upload+0xa6/0x250
[   40.384863]
[   40.384863] stack backtrace:
[   40.385955] CPU: 0 PID: 243 Comm: fftest Not tainted 5.0.0+ #33
[   40.387701] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.11.0-0-g63451fc-prebuilt.qemu-project.org 04/01/2014
[   40.391758] Call Trace:
[   40.392649]  dump_stack+0x67/0x9b
[   40.393774]  print_circular_bug.isra.38+0x191/0x1f0
[   40.395130]  check_prev_add.constprop.49+0x95c/0xce0
[   40.396536]  ? __lock_acquire+0x1222/0x1310
[   40.397744]  __lock_acquire+0x1222/0x1310
[   40.399045]  lock_acquire+0xa7/0x1b0
[   40.400182]  ? uinput_request_submit.part.7+0x1a/0xf0 [uinput]
[   40.401802]  ? uinput_request_submit.part.7+0x1a/0xf0 [uinput]
[   40.403779]  __mutex_lock+0x7d/0x9a0
[   40.405015]  ? uinput_request_submit.part.7+0x1a/0xf0 [uinput]
[   40.406844]  ? find_held_lock+0x2d/0x90
[   40.408071]  ? uinput_request_reserve_slot+0x78/0x140 [uinput]
[   40.410501]  ? uinput_request_submit.part.7+0x1a/0xf0 [uinput]
[   40.412597]  uinput_request_submit.part.7+0x1a/0xf0 [uinput]
[   40.414445]  uinput_dev_upload_effect+0x55/0x80 [uinput]
[   40.416138]  ? find_held_lock+0x2d/0x90
[   40.417382]  input_ff_upload+0x1c0/0x250
[   40.418654]  evdev_ioctl_handler+0x388/0xc10
[   40.420041]  do_vfs_ioctl+0xa0/0x6e0
[   40.421158]  ksys_ioctl+0x6b/0x80
[   40.422209]  __x64_sys_ioctl+0x11/0x20
[   40.423392]  do_syscall_64+0x4b/0x180
[   40.424558]  entry_SYSCALL_64_after_hwframe+0x49/0xbe
[   40.426180] RIP: 0033:0x7fadcce90467
[   40.427393] Code: b3 66 90 48 8b 05 31 4a 2c 00 64 c7 00 26 00 00 00 48 c7 c0 ff ff ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 b8 10 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 01 4a 2c 00 f7 d8 64 89 01 48
[   40.434055] RSP: 002b:00007ffcc31971d8 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
[   40.436457] RAX: ffffffffffffffda RBX: 00007ffcc3197250 RCX: 00007fadcce90467
[   40.438718] RDX: 00007ffcc3197310 RSI: 0000000040304580 RDI: 0000000000000003
[   40.440969] RBP: 0000000000000003 R08: 00007fadcd157880 R09: 00007fadcd360500
[   40.443264] R10: 00005569d9f48140 R11: 0000000000000246 R12: 00005569d9f47a80
[   40.445941] R13: 00007ffcc31974b0 R14: 0000000000000000 R15: 0000000000000000

[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux