Received: by 10.192.165.148 with SMTP id m20csp4228869imm; Mon, 30 Apr 2018 14:19:00 -0700 (PDT) X-Google-Smtp-Source: AB8JxZqe/aXT0Opk9LXj3XyCngDP2kwxKK4wDvo1UFU109BzJp7fsLt0YMjqwC0ynTnGSjehG4K7 X-Received: by 2002:a65:4301:: with SMTP id j1-v6mr1507571pgq.356.1525123140843; Mon, 30 Apr 2018 14:19:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525123140; cv=none; d=google.com; s=arc-20160816; b=hRAwaJ82idMP5GwUzgsPVbyRP/L74EZuWhXpTdTUHdsUL0goxM07jQSlSDgQgkSW33 ZkoKtNdeczfaUh3F/S9vkphPanEwm/cq1TXg9wLnazIgUmYWXyskPLgVfLl3s5EJ/mMx iS1g8LNClJA/MX5Fn6RJC9Q3beXGqHyrKW5wTfACthaD0KIRV52mvN/0vZxRRMuPOIKI AOSwASVwvxRBT14Psac3yuiE6720EWf79z1lgorHtiylukiyG23QN4ytRcC+oL95WglO xCZEalU9dyS5J8JS3JAWouKwWYgnabOSmHJA2rUXM5Lktjh9FGwkjjphFGmqqmcTZsvI fgJQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature:arc-authentication-results; bh=93u4wmRB9hnJyNLuC/GiKamXh6oYg8SC5+sGBuQTtVk=; b=Iq06j2S7oPPpgYAvJLRLXIzkPUNlOxuq9qDC8V+4g9JELuM4ZggOWkh776lm5jD8NN RGeTqNHRJjkQLQauo5XrdsYFl2oUVhIpUU1kUkUAq5mo8hMCRMlKKly4XqTwUenxWQph XjJyJfv29FKs8I4izE0yGXshGphgbcmpsjZtcpsvheoLpgEq04TLMtCA3IfceFu5qYWr eTkReW1RmvkMe9ZxRc6KUcb3Zlmjdg0FQ0jFYXhkXLo1UEMGc1XOIlHWfsdGKBCZkGmT MrapVCA6UbE/tlHCozRMrAB6GTljX4WCg45lGBn5EScQ10ZCJiYxp4cQOXKfPDAcvjAb aXeg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=ZCqQe04n; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n3-v6si3809914pgp.344.2018.04.30.14.18.46; Mon, 30 Apr 2018 14:19:00 -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=@gmail.com header.s=20161025 header.b=ZCqQe04n; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755264AbeD3VSA (ORCPT + 99 others); Mon, 30 Apr 2018 17:18:00 -0400 Received: from mail-pf0-f193.google.com ([209.85.192.193]:38220 "EHLO mail-pf0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753482AbeD3VR6 (ORCPT ); Mon, 30 Apr 2018 17:17:58 -0400 Received: by mail-pf0-f193.google.com with SMTP id o76so7701099pfi.5; Mon, 30 Apr 2018 14:17:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=93u4wmRB9hnJyNLuC/GiKamXh6oYg8SC5+sGBuQTtVk=; b=ZCqQe04nPSdNfUMQxOHE9eBOoPkSwCgGm3bxGfdQBF1AfQwVmZZSvBoT6G0cANJ9f8 VsfYF2vQzWCr/PW3m4VdvYlhojWwnDOnYcBNAkBCcMmPr0+gXNhH11wADUroDW+z1EbZ OpbpfySZJv/iVBndchYZQn6jqqTHVpEQWDN7RD0IUD1HC6wWlqgV4MwOyJxyDZx/kLF7 GPPuxvYO7lizFyQKGt2BpTKrD5y72iivGOop5TWFclYj2xGd/flFfvkQv0oBMtN0PDi/ INh6brFdQDYTkIQJIYRKyKdzibAZqJAZ4C3bEt8IYSXG1izVOD/p2WeDsOE/IYygF2EN 2KHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=93u4wmRB9hnJyNLuC/GiKamXh6oYg8SC5+sGBuQTtVk=; b=saju6muMzJdiECm/v7SuFZR878DYiX6wB9WulC6JSFUJ+sGIy80c2EKHWTTyUuQzvq CnrAzIKoSRdf7Q/OlzhNtcwf4SG9GivW4oy4L/DIBk4y47tLex4p5kg51YH3bKrkr49G 5UQnljg+VAw/yWILVndLHx2ej+lZ4nnTECSFr8lutKR0haIfmgMWCFRE6Ba9rdTpaS5R 9wCdRDIXoP3k364HAQt+1YBCE4FXTSo1/AN1Oxl5wbW8FLOceWfiJt4cMcwnh5IkjO2I fgN7V9x/aBZBRXO2MyIUBZD40BG/U7m1ykRdAAEaAQ8d3NTVn5Xycff6q1vErmmC0TLk oLQw== X-Gm-Message-State: ALQs6tCqDLpy9tmgqhFAH58cHIunBV/wG+CsbQpFNizt727E8H31qzjv mrkxq9c+v+yuUEgt/e8eAC0= X-Received: by 2002:a63:774e:: with SMTP id s75-v6mr11143891pgc.162.1525123077329; Mon, 30 Apr 2018 14:17:57 -0700 (PDT) Received: from dtor-ws ([2620:0:1000:1511:8de6:27a8:ed13:2ef5]) by smtp.gmail.com with ESMTPSA id t14sm5897280pfa.31.2018.04.30.14.17.55 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 30 Apr 2018 14:17:56 -0700 (PDT) Date: Mon, 30 Apr 2018 14:17:54 -0700 From: Dmitry Torokhov To: Daniel Vetter Cc: Intel Graphics Development , LKML , Daniel Vetter , Benjamin Tissoires , Arvind Yadav , Stephen Lyons , linux-input@vger.kernel.org Subject: Re: [PATCH] input/psmouse: Don't hold the mutex while calling ->disconnect Message-ID: <20180430211754.GB54182@dtor-ws> References: <20180430195649.17445-1-daniel.vetter@ffwll.ch> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180430195649.17445-1-daniel.vetter@ffwll.ch> User-Agent: Mutt/1.9.2 (2017-12-15) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Daniel, On Mon, Apr 30, 2018 at 09:56:49PM +0200, Daniel Vetter wrote: > 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 > Cc: Stephen Lyons > Cc: linux-input@vger.kernel.org > --- > 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 8900c3166ebf..06ccd8e22f3c 100644 > --- a/drivers/input/mouse/psmouse-base.c > +++ b/drivers/input/mouse/psmouse-base.c > @@ -1484,8 +1484,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); Why do you think it is proper to drop this mutex? It is introduced for a reason. I think the trace you are seeing is due to: commit 988cd7afb3f37598891ca70b4c6eb914c338c46a Author: Tejun Heo Date: Mon Feb 3 14:02:58 2014 -0500 kernfs: remove kernfs_addrm_cxt where we started taking kernfs_mutex when adding/removing sysfs files. Ultimately I think we may have to change switching protocol to a work item to be done asynchronously from writing to sysfs attribute. Thanks. -- Dmitry