From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753616AbcAXBVB (ORCPT ); Sat, 23 Jan 2016 20:21:01 -0500 Received: from v094114.home.net.pl ([79.96.170.134]:61596 "HELO v094114.home.net.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1753301AbcAXBU6 (ORCPT ); Sat, 23 Jan 2016 20:20:58 -0500 From: "Rafael J. Wysocki" To: Marek Szyprowski Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, Ulf Hansson , Kevin Hilman , Anand Moon , Bartlomiej Zolnierkiewicz , Daniel Kurtz , Nicolas Boichat Subject: Re: [PATCH RESEND] power: genpd: fix lockdep issue for all subdomains Date: Sun, 24 Jan 2016 02:21:46 +0100 Message-ID: <2908677.zkL13xpsuk@vostro.rjw.lan> User-Agent: KMail/4.11.5 (Linux/4.4.0; KDE/4.11.5; x86_64; ; ) In-Reply-To: <1453281222-19055-1-git-send-email-m.szyprowski@samsung.com> References: <1453281222-19055-1-git-send-email-m.szyprowski@samsung.com> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="utf-8" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wednesday, January 20, 2016 10:13:42 AM Marek Szyprowski wrote: > During genpd_poweron, genpd->lock is acquired recursively for each > parent (master) domain, which are separate objects. This confuses > lockdep, which considers every operation on genpd->lock as being done on > the same lock class. This leads to the following false positive warning: > > ============================================= > [ INFO: possible recursive locking detected ] > 4.4.0-rc4-xu3s #32 Not tainted > --------------------------------------------- > swapper/0/1 is trying to acquire lock: > (&genpd->lock){+.+...}, at: [] __genpd_poweron+0x64/0x108 > > but task is already holding lock: > (&genpd->lock){+.+...}, at: [] genpd_dev_pm_attach+0x168/0x1b8 > > other info that might help us debug this: > Possible unsafe locking scenario: > > CPU0 > ---- > lock(&genpd->lock); > lock(&genpd->lock); > > *** DEADLOCK *** > > May be due to missing lock nesting notation > > 3 locks held by swapper/0/1: > #0: (&dev->mutex){......}, at: [] __driver_attach+0x48/0x98 > #1: (&dev->mutex){......}, at: [] __driver_attach+0x58/0x98 > #2: (&genpd->lock){+.+...}, at: [] genpd_dev_pm_attach+0x168/0x1b8 > > stack backtrace: > CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.4.0-rc4-xu3s #32 > Hardware name: SAMSUNG EXYNOS (Flattened Device Tree) > [] (unwind_backtrace) from [] (show_stack+0x10/0x14) > [] (show_stack) from [] (dump_stack+0x84/0xc4) > [] (dump_stack) from [] (__lock_acquire+0x1f88/0x215c) > [] (__lock_acquire) from [] (lock_acquire+0xa4/0xd0) > [] (lock_acquire) from [] (mutex_lock_nested+0x70/0x4d4) > [] (mutex_lock_nested) from [] (__genpd_poweron+0x64/0x108) > [] (__genpd_poweron) from [] (genpd_dev_pm_attach+0x170/0x1b8) > [] (genpd_dev_pm_attach) from [] (platform_drv_probe+0x2c/0xac) > [] (platform_drv_probe) from [] (driver_probe_device+0x208/0x2fc) > [] (driver_probe_device) from [] (__driver_attach+0x94/0x98) > [] (__driver_attach) from [] (bus_for_each_dev+0x68/0x9c) > [] (bus_for_each_dev) from [] (bus_add_driver+0x1a0/0x218) > [] (bus_add_driver) from [] (driver_register+0x78/0xf8) > [] (driver_register) from [] (exynos_drm_register_drivers+0x28/0x74) > [] (exynos_drm_register_drivers) from [] (exynos_drm_init+0x6c/0xc4) > [] (exynos_drm_init) from [] (do_one_initcall+0x90/0x1dc) > [] (do_one_initcall) from [] (kernel_init_freeable+0x158/0x1f8) > [] (kernel_init_freeable) from [] (kernel_init+0x8/0xe8) > [] (kernel_init) from [] (ret_from_fork+0x14/0x24) > > This patch replaces mutex_lock with mutex_lock_nested() and uses > recursion depth to annotate each genpd->lock operation with separate > lockdep subclass. > > Reported-by: Anand Moon > Signed-off-by: Marek Szyprowski > Tested-by: Anand Moon > Tested-by: Tobias Jakobi > Acked-by: Ulf Hansson Applied (with a minor subject change), thanks! Rafael