From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-23.3 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3D559C433DB for ; Mon, 15 Feb 2021 18:42:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id DCB7A64E13 for ; Mon, 15 Feb 2021 18:42:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229802AbhBOSlt (ORCPT ); Mon, 15 Feb 2021 13:41:49 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50698 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230507AbhBOSia (ORCPT ); Mon, 15 Feb 2021 13:38:30 -0500 Received: from mail-yb1-xb31.google.com (mail-yb1-xb31.google.com [IPv6:2607:f8b0:4864:20::b31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C53B1C061756 for ; Mon, 15 Feb 2021 10:37:48 -0800 (PST) Received: by mail-yb1-xb31.google.com with SMTP id 133so8087790ybd.5 for ; Mon, 15 Feb 2021 10:37:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=dlG7WSBTmTt0VpZB7OCV0qVL7K8LEJDd0nI5vTKhQZg=; b=btS7zOsd8wzWdOEdLz2gpNybzWGD/BAdcRlSgW6lyo+d1eTDlo6Apq86ia5o0yvLol ppNdfSG9Ew07RangzW5JjgXQTYWEJEMBS1EC/xzXNmeZuU/GmzelkZsTTN/ls7pnKGv7 M2JilzX+pX7HcaEPfsdGyWLo/ganbfaiisPmzPwHMH6NonEsOA9X85PVMfhfmbz43akz AEe8aueXHiFPpdSsaeQJmX0UTql6yGPgx7lgFMbam7wNCucfYyvpJd8dsY8/OdXZmlHv bkPDYvdNutZddnwMgv58clq+g3ZJkXrKxn3cjKmbDL47DQSeD8hoPaovvo/StdVOscKo HgJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=dlG7WSBTmTt0VpZB7OCV0qVL7K8LEJDd0nI5vTKhQZg=; b=I81qUwBwCW9iaaFkv3gkTHh5bxr8z+4jG1SVvzXIK3IelDrkMdvZiut31rxEQF+e+Z 7ElBWQNp2n68s74n4kbcjz7SummEw7QDDno2Js16omkJp7shMEZwfVfZrsG1FwHYt4AG et7twkDmXHWA/Sw7MYtQDQGqcgbwpjER40ToeHUw+PLiokwNy/6xHHfErg6AczncugpV rEepuG+fJ+9Cqdg1mWa3i7Zo9D5a+/Q+6WU0/C+Q46IcO11XrQvK2xoPxnDw3k+zCd0a KgRIKA169FsAN7Xw0FjN6V6WPOq3UYakSNLCeUko6vNATCSZujfXFn7Te2BQQun2+fa+ aYlw== X-Gm-Message-State: AOAM531TuegOtTCbTt61ssNdPUuv8K2ujWIptYqPAYvgen46QMDA2sD8 2Lw4t+AxLmU1dMP4wUrrVaRA0aiBryPqMX8dNTQ3uA== X-Google-Smtp-Source: ABdhPJyrNN8exbyo9T1MkxxXLxlRiWI1Wl1nf3PhjP4mVD6FrDEXdUPlDEuRTLmkptHAKrq7S6AmU78+qu5pBAVCeIw= X-Received: by 2002:a25:8b8b:: with SMTP id j11mr22476525ybl.310.1613414267730; Mon, 15 Feb 2021 10:37:47 -0800 (PST) MIME-Version: 1.0 References: <20210215151405.2551143-1-geert+renesas@glider.be> In-Reply-To: <20210215151405.2551143-1-geert+renesas@glider.be> From: Saravana Kannan Date: Mon, 15 Feb 2021 10:37:11 -0800 Message-ID: Subject: Re: [PATCH] staging: board: Fix uninitialized spinlock when attaching genpd To: Geert Uytterhoeven Cc: Greg Kroah-Hartman , Bartosz Golaszewski , "Rafael J . Wysocki" , Kevin Hilman , Ulf Hansson , Magnus Damm , Linux-Renesas , Linux PM , LKML Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Feb 15, 2021 at 7:14 AM Geert Uytterhoeven wrote: > > On Armadillo-800-EVA with CONFIG_DEBUG_SPINLOCK=y: > > BUG: spinlock bad magic on CPU#0, swapper/1 > lock: lcdc0_device+0x10c/0x308, .magic: 00000000, .owner: /-1, .owner_cpu: 0 > CPU: 0 PID: 1 Comm: swapper Not tainted 5.11.0-rc5-armadillo-00036-gbbca04be7a80-dirty #287 > Hardware name: Generic R8A7740 (Flattened Device Tree) > [] (unwind_backtrace) from [] (show_stack+0x10/0x14) > [] (show_stack) from [] (do_raw_spin_lock+0x20/0x94) > [] (do_raw_spin_lock) from [] (dev_pm_get_subsys_data+0x8c/0x11c) > [] (dev_pm_get_subsys_data) from [] (genpd_add_device+0x78/0x2b8) > [] (genpd_add_device) from [] (of_genpd_add_device+0x34/0x4c) > [] (of_genpd_add_device) from [] (board_staging_register_device+0x11c/0x148) > [] (board_staging_register_device) from [] (board_staging_register_devices+0x24/0x28) > > of_genpd_add_device() is called before platform_device_register(), as it > needs to attach the genpd before the device is probed. But the spinlock > is only initialized when the device is registered. > > Fix this by open-coding the spinlock initialization, cfr. > device_pm_init_common() in the internal drivers/base code, and in the > SuperH early platform code. > > Signed-off-by: Geert Uytterhoeven > --- > Exposed by fw_devlinks changing probe order. > Masked before due to an unrelated wait context check failure, which > disabled any further spinlock checks. > https://lore.kernel.org/linux-acpi/CAMuHMdVL-1RKJ5u-HDVA4F4w_+8yGvQQuJQBcZMsdV4yXzzfcw@mail.gmail.com > --- > drivers/staging/board/board.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/drivers/staging/board/board.c b/drivers/staging/board/board.c > index cb6feb34dd401ae3..604612937f038e92 100644 > --- a/drivers/staging/board/board.c > +++ b/drivers/staging/board/board.c > @@ -136,6 +136,7 @@ int __init board_staging_register_clock(const struct board_staging_clk *bsc) > static int board_staging_add_dev_domain(struct platform_device *pdev, > const char *domain) > { > + struct device *dev = &pdev->dev; > struct of_phandle_args pd_args; > struct device_node *np; > > @@ -148,7 +149,11 @@ static int board_staging_add_dev_domain(struct platform_device *pdev, > pd_args.np = np; > pd_args.args_count = 0; > > - return of_genpd_add_device(&pd_args, &pdev->dev); > + /* Cfr. device_pm_init_common() */ What's Cfr? > + spin_lock_init(&dev->power.lock); > + dev->power.early_init = true; Also, I tried looking up, but it's not exactly what this flag represents other than the fact the spinlock has been initialized? Which is weird to me. So maybe Rafael can double check this? -Saravana > + > + return of_genpd_add_device(&pd_args, dev); > } > #else > static inline int board_staging_add_dev_domain(struct platform_device *pdev, > -- > 2.25.1 >