• Dmitry Torokhov's avatar
    Input: wacom - fix runtime PM related deadlock · f6cd3783
    Dmitry Torokhov authored
    When runtime PM is enabled by default for input devices, X hangs in
    wacom open:
    [<ffffffff814a00ea>] mutex_lock+0x1a/0x40
    [<ffffffffa02bc94b>] wacom_resume+0x3b/0x90 [wacom]
    [<ffffffff81327a32>] usb_resume_interface+0xd2/0x190
    [<ffffffff81327b5d>] usb_resume_both+0x6d/0x110
    [<ffffffff81327c24>] usb_runtime_resume+0x24/0x40
    [<ffffffff8130a2cf>] __pm_runtime_resume+0x26f/0x450
    [<ffffffff8130a23a>] __pm_runtime_resume+0x1da/0x450
    [<ffffffff8130a53a>] pm_runtime_resume+0x2a/0x50
    [<ffffffff81328176>] usb_autopm_get_interface+0x26/0x60
    [<ffffffffa02bc626>] wacom_open+0x36/0x90 [wacom]
    
    wacom_open() takes wacom->lock and calls usb_autopm_get_interface(),
    which in turn calls wacom_resume() which tries to acquire the lock
    again.
    
    The fix is to call usb_autopm_get_interface() first, before we take
    the lock.
    
    Since we do not do usb_autopm_put_interface() until wacom_close()
    is called runtime PM is effectively disabled for the driver, however
    changing it now would risk regressions so the complete fix will
    have to wait till the next merge window.
    Reported-by: default avatarJiri Slaby <jslaby@suse.cz>
    Acked-by: default avatarOliver Neukum <oneukum@suse.de>
    Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
    f6cd3783
wacom_sys.c 15 KB