Received: by 10.213.65.68 with SMTP id h4csp230174imn; Tue, 20 Mar 2018 01:53:35 -0700 (PDT) X-Google-Smtp-Source: AG47ELu9SyTUQdjxwy5FB+c6f3TpHqLiXj1uEP4uSy8aX3PuqhFh29j9UKkVGZs7RVULl2/aXpSg X-Received: by 2002:a17:902:b48c:: with SMTP id y12-v6mr15793468plr.313.1521536015462; Tue, 20 Mar 2018 01:53:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1521536015; cv=none; d=google.com; s=arc-20160816; b=j9W3mLXFzE2G8caqu5Bw42IJMXGUa35ff01x2wU4A/Y4jAgiSsLugZO/dVU90JccY4 qhlHvn0Bq5emyFR2QozoSFYoMI74lKLYui4C1hkVDqdRcMfXyuvmy6Ro0sIXXqf3BWS1 rlgDdXrh+yytDJmSBoz3VhIZxm1UscMFshBwRPW24h+RvfvPpieGLqQnxpMzgVebbXfN GoPvpCYMwp9rqFXO008UzK3V1tHrleXUatm0YOZ89fFTbQAuJ/xDc6NqIu6E6VIL7Tyc 0F+DG8EX8icqvCSRXBrH1SKKJgmqiv2QTW2A1iK4NYvKzGg+F6zwE5HzmJSmScyTtu+N 4Vag== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=JD6bBPMBCjF/mkqKbEpYjkbaFKB5rLrMDYf6DbKow9M=; b=azAufNSgoHJ5lAHXMJy15Wr+Qc/f4qsvoAuKFTVJ0FFYcZ6dCfoXw+JgBH3zX7fA+e tI76RZVNQNUtzPGiSms+k6Ey38HcmqRch1z9NY61CiremqHd1fg4NR6vUyUdhmxLkUBO 54f359uAYURG3Gvsl7wi4UmlWXvKhgg7FhP1VfXqe7iTelfQa6lMF+6VgYSdyPkhO6B+ lxNg32JGSBmmKXlS68SzPVh5zfK9f3qmXjDDPBrWoSGZeX/0+FbnioMYY3qoEcy4TH2x 2XcO7tLpQ1vw0BjZKsVLpWKg4CbKyNu1t6N4omTbjm5VD7XxLJ79d8Yuf1QNU198mpII 9OaQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ffwll.ch header.s=google header.b=WWkM/FX1; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g13-v6si1064238pln.61.2018.03.20.01.53.18; Tue, 20 Mar 2018 01:53:35 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@ffwll.ch header.s=google header.b=WWkM/FX1; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752232AbeCTIwJ (ORCPT + 99 others); Tue, 20 Mar 2018 04:52:09 -0400 Received: from mail-wm0-f67.google.com ([74.125.82.67]:51698 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751408AbeCTIwG (ORCPT ); Tue, 20 Mar 2018 04:52:06 -0400 Received: by mail-wm0-f67.google.com with SMTP id h21so1764972wmd.1 for ; Tue, 20 Mar 2018 01:52:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=from:to:cc:subject:date:message-id; bh=JD6bBPMBCjF/mkqKbEpYjkbaFKB5rLrMDYf6DbKow9M=; b=WWkM/FX1l+rEBhmV0vJD3yzE+PTMvr0EmFeuZ9YpYgIj+8615+KvCa387UazHSBY4R EyRlGTuyewbGakReW52O1S6OrsnYrxINbGQvdz4pAdkVqGbSn0Cl2Ek1Jwla2v8pG8PN nQLtto1+8KxLTygj9G2yjmLQtkfX17eP0sQVw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=JD6bBPMBCjF/mkqKbEpYjkbaFKB5rLrMDYf6DbKow9M=; b=R6VwmmUyfeHCeF6VYu+hMk4scx2pRWrZEEG0tUcVtfxFeHO8mKkeiq8e70rVizev2I zeaCSsvxWuYbF8Axu/49Pt+7mV2sc1hANvE5kx6jJXoz+U9DQWaOG7FxW1T7ozI//vIF 9o96riSc1DjhT35YaDDUDvIr1oLH5JoWTneaq4lVYhKVEC/qGgb2EQLvtWMwkP+P4BYS 9a7DSLB9H4I3lp07KgZoP2aQBjr/uJ1uSQdQ6HGIdjATwZfgtwS3MVMXB4IsvON8gEKn wzqxWTqe/sPEXpHFgwZXLL55FDGOOdyAW37IprHa0qeLx1KUr+tFEiaHFikj/oaHLIOq KrQA== X-Gm-Message-State: AElRT7HfwS1dXKnaTyJJi4CXMRRDRpfgpszen5v4WUAkUqtZoCJP54PK PbAXJpSwuuagvCVjRisBoHbJlg== X-Received: by 10.80.177.81 with SMTP id l17mr15349641edd.65.1521535924993; Tue, 20 Mar 2018 01:52:04 -0700 (PDT) Received: from phenom.ffwll.local (212-51-149-109.fiber7.init7.net. [212.51.149.109]) by smtp.gmail.com with ESMTPSA id s27sm1682601edm.78.2018.03.20.01.52.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 20 Mar 2018 01:52:03 -0700 (PDT) From: Daniel Vetter To: Intel Graphics Development Cc: LKML , Daniel Vetter , Daniel Vetter , Dmitry Torokhov , Benjamin Tissoires , Arvind Yadav Subject: [PATCH] input/psmouse: Don't hold the mutex while calling ->disconnect Date: Tue, 20 Mar 2018 09:51:58 +0100 Message-Id: <20180320085158.1954-1-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 2.16.2 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org At least trackpoint_disconnect wants to remove some sysfs files, and we can't remove sysfs files while holding psmouse_mutex: ====================================================== WARNING: possible circular locking dependency detected 4.16.0-rc5-g613eb885b69e-drmtip_1+ #1 Tainted: G U ------------------------------------------------------ kworker/0:3/102 is trying to acquire lock: (kn->count#130){++++}, at: [<000000009679748b>] kernfs_remove_by_name_ns+0x3b/0x80 but task is already holding lock: (psmouse_mutex){+.+.}, at: [<0000000014f44bcc>] psmouse_disconnect+0x62/0x160 which lock already depends on the new lock. the existing dependency chain (in reverse order) is: -> #1 (psmouse_mutex){+.+.}: psmouse_attr_set_helper+0x28/0x140 kernfs_fop_write+0xfe/0x180 __vfs_write+0x1e/0x130 vfs_write+0xbd/0x1b0 SyS_write+0x40/0xa0 do_syscall_64+0x65/0x1a0 entry_SYSCALL_64_after_hwframe+0x42/0xb7 -> #0 (kn->count#130){++++}: __kernfs_remove+0x243/0x2b0 kernfs_remove_by_name_ns+0x3b/0x80 remove_files.isra.0+0x2b/0x60 sysfs_remove_group+0x38/0x80 sysfs_remove_groups+0x24/0x40 trackpoint_disconnect+0x2c/0x50 psmouse_disconnect+0x8f/0x160 serio_disconnect_driver+0x28/0x40 serio_driver_remove+0xc/0x10 device_release_driver_internal+0x15b/0x230 serio_handle_event+0x1c8/0x260 process_one_work+0x215/0x620 worker_thread+0x48/0x3a0 kthread+0xfb/0x130 ret_from_fork+0x3a/0x50 other info that might help us debug this: Possible unsafe locking scenario: CPU0 CPU1 ---- ---- lock(psmouse_mutex); lock(kn->count#130); lock(psmouse_mutex); lock(kn->count#130); *** DEADLOCK *** 6 locks held by kworker/0:3/102: #0: ((wq_completion)"events_long"){+.+.}, at: [<000000002e408bfa>] process_one_work+0x191/0x620 #1: (serio_event_work){+.+.}, at: [<000000002e408bfa>] process_one_work+0x191/0x620 #2: (serio_mutex){+.+.}, at: [<00000000c8a49847>] serio_handle_event+0x23/0x260 #3: (&dev->mutex){....}, at: [<00000000b55eee75>] device_release_driver_internal+0x2f/0x230 #4: (&serio->drv_mutex){+.+.}, at: [<000000009719f997>] serio_disconnect_driver+0x16/0x40 #5: (psmouse_mutex){+.+.}, at: [<0000000014f44bcc>] psmouse_disconnect+0x62/0x160 stack backtrace: CPU: 0 PID: 102 Comm: kworker/0:3 Tainted: G U 4.16.0-rc5-g613eb885b69e-drmtip_1+ #1 Hardware name: LENOVO 74591P0/74591P0, BIOS 6DET28WW (1.05 ) 07/30/2008 Workqueue: events_long serio_handle_event Call Trace: dump_stack+0x5f/0x86 print_circular_bug.isra.18+0x1d0/0x2c0 __lock_acquire+0x14ae/0x1b60 ? kernfs_remove_by_name_ns+0x20/0x80 ? lock_acquire+0xaf/0x200 lock_acquire+0xaf/0x200 ? kernfs_remove_by_name_ns+0x3b/0x80 __kernfs_remove+0x243/0x2b0 ? kernfs_remove_by_name_ns+0x3b/0x80 ? kernfs_name_hash+0xd/0x70 ? kernfs_find_ns+0x7e/0x100 kernfs_remove_by_name_ns+0x3b/0x80 remove_files.isra.0+0x2b/0x60 sysfs_remove_group+0x38/0x80 sysfs_remove_groups+0x24/0x40 trackpoint_disconnect+0x2c/0x50 psmouse_disconnect+0x8f/0x160 serio_disconnect_driver+0x28/0x40 serio_driver_remove+0xc/0x10 device_release_driver_internal+0x15b/0x230 serio_handle_event+0x1c8/0x260 process_one_work+0x215/0x620 worker_thread+0x48/0x3a0 ? _raw_spin_unlock_irqrestore+0x4c/0x60 kthread+0xfb/0x130 ? process_one_work+0x620/0x620 ? _kthread_create_on_node+0x30/0x30 ret_from_fork+0x3a/0x50 Signed-off-by: Daniel Vetter Cc: Dmitry Torokhov Cc: Benjamin Tissoires Cc: Daniel Vetter Cc: Arvind Yadav --- drivers/input/mouse/psmouse-base.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c index 8ac9e03c05b4..6e09a5d6e58a 100644 --- a/drivers/input/mouse/psmouse-base.c +++ b/drivers/input/mouse/psmouse-base.c @@ -1467,8 +1467,10 @@ static void psmouse_disconnect(struct serio *serio) psmouse_deactivate(parent); } + mutex_unlock(&psmouse_mutex); if (psmouse->disconnect) psmouse->disconnect(psmouse); + mutex_lock(&psmouse_mutex); if (parent && parent->pt_deactivate) parent->pt_deactivate(parent); -- 2.16.2