Received: by 10.192.165.148 with SMTP id m20csp456565imm; Wed, 25 Apr 2018 02:17:34 -0700 (PDT) X-Google-Smtp-Source: AIpwx48Wacchn2BnmNjUCuq+Qt+Gi94q17Ir0akrVTX3yklIV9flqQBoNadaMcbS+SwGRlSDbbnH X-Received: by 10.99.113.78 with SMTP id b14mr23003725pgn.76.1524647854398; Wed, 25 Apr 2018 02:17:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524647854; cv=none; d=google.com; s=arc-20160816; b=Otd8jATQ05gilds0tnzAhwEaXadjBWDZlahZ/J294x5L6qocF9BgOkSZOxnKf/BgYN eNH7q9wdJJ8gal4pVOiYqTIFZSTLcX7ng9pc5Pj1BKiX/wRg/VohBVMR+j3f7QSxBhSY m1L0CpKvqZnu9+K1UwTNMsdD/TNq7ztJ1wvB31D3d+IWhR+rQhTD9iXPynVGgZDMs1wl 4jmbke72Hs8EYIFB42flM55F+QhjPwgc7DQOP2NLAm8kao+Nz3AZdM2GqpDxwdYiIvqO 7eVBOfpml57L7aJqWIdPz1qaZGKmCULeWtPzTND+wADyYoFsC/W85UDFlXGi8+Nu1Y3K OlQA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=vmnFPAqWGyBxlr7d5necN5CpJPdsPheUHKE2fdGueNA=; b=EbGAxcjHWqtQmeh9qk1uzCLWxQsgI0KpZyDod5hW3JTBNuN65DRVBWqm+SW1Y2TIC2 OWvi/db8PJn+wpbdHkkpl2rfAAWLg6Fhe+04inRQjroC3wQwHeWlQbZL4FUqozYl33iA baKrH8bwml2Bo06kA3Wwbr2WDsDqXye67aXkDx5EKVS577qqd4Tr3NQ1TvA/bEf61Ksb a6lyRnEfX7iKt+yGLZG0s8XpB7oTBhW1l+leQ1h/UhxsQLMwglewtR8NLGb5PQ2rTSOk qkzDQOy/KOMgU3m+8rNuSmUzXIzNRaOYJ9UfKj3c1fvgTaPK7pqwBA7vZCpq46h96M0X Nq+w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ffwll.ch header.s=google header.b=frI7fuzs; 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 f7si13211294pgq.207.2018.04.25.02.17.19; Wed, 25 Apr 2018 02:17:34 -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=frI7fuzs; 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 S1751346AbeDYJQH (ORCPT + 99 others); Wed, 25 Apr 2018 05:16:07 -0400 Received: from mail-io0-f193.google.com ([209.85.223.193]:36053 "EHLO mail-io0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750969AbeDYJQE (ORCPT ); Wed, 25 Apr 2018 05:16:04 -0400 Received: by mail-io0-f193.google.com with SMTP id d73-v6so666432iog.3 for ; Wed, 25 Apr 2018 02:16:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=vmnFPAqWGyBxlr7d5necN5CpJPdsPheUHKE2fdGueNA=; b=frI7fuzsIz4OvSXcrvRLvNUgysU2hyK8lcILX29Z7BdCM8JXxqgjPv6RsQOO2dDSRP ADtN4SMJe/0WwHiksXxFHo39KV1ExXXECotLyap8ezUgA0Rxh44GBUF85tmr7r6HoIpR heVmHtv38qQG7Lj1bCZElXUQr7buhH0iTnlII= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=vmnFPAqWGyBxlr7d5necN5CpJPdsPheUHKE2fdGueNA=; b=slckJhPVkQelWD+tOKkGgjMKx+Ur1CWF9I4kqCeoz1repaekhwefCjEZPeoUSB/aHg weGq2IAJ0fiyx72lAnEbi5gVGlSeswWNqHF60jNA0vK4v7ZClVJCAa3WVGGAAgfA8eGC Oo0veqvEc33Klx73hDKysN68Q6Qr2f19V2Gh9q7byjNw++Ca7C5bfQBXoRLgIanertwy Ygp7T4QoW45h7ZVfCFZU8bK163A3z6+H5zXegmTEwDYc6+LDE9RMZqlfMCUsY/bCGUNA DrQc//6q9DiUa56mFpy/2bHv8FGlc2sn2qBBxrQ7CRimG+pEcCjrS7kwkWlQ6L/G1AlC UKiA== X-Gm-Message-State: ALQs6tDR5atCgdAMyeB0qX+eC57fivJBxuAgefQYTx6Dy+jUusGWVRCF 6uvkMVPCzO7Q8pH6mnAtVVcrC1Y0CvBHhqvTk/0Paw== X-Received: by 2002:a6b:10a0:: with SMTP id 32-v6mr20697773ioq.78.1524647764248; Wed, 25 Apr 2018 02:16:04 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a4f:5b42:0:0:0:0:0 with HTTP; Wed, 25 Apr 2018 02:16:03 -0700 (PDT) X-Originating-IP: [2a02:168:5635:0:39d2:f87e:2033:9f6] In-Reply-To: <20180320085158.1954-1-daniel.vetter@ffwll.ch> References: <20180320085158.1954-1-daniel.vetter@ffwll.ch> From: Daniel Vetter Date: Wed, 25 Apr 2018 11:16:03 +0200 Message-ID: Subject: Re: [PATCH] input/psmouse: Don't hold the mutex while calling ->disconnect To: Intel Graphics Development Cc: LKML , Daniel Vetter , Daniel Vetter , Dmitry Torokhov , Benjamin Tissoires , Arvind Yadav Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Ping. -Daniel On Tue, Mar 20, 2018 at 9:51 AM, 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 > --- > 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 > -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch