From: jeffy <jeffy.chen@rock-chips.com>
To: Bjorn Helgaas <helgaas@kernel.org>, Shawn Lin <shawn.lin@rock-chips.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>,
linux-pci@vger.kernel.org, linux-rockchip@lists.infradead.org,
Brian Norris <briannorris@chromium.org>,
Tejun Heo <tj@kernel.org>,
Dmitry Torokhov <dmitry.torokhov@gmail.com>,
Michael Turquette <mturquette@baylibre.com>,
Stephen Boyd <sboyd@codeaurora.org>,
linux-clk@vger.kernel.org
Subject: Re: [PATCH v5 04/10] PCI: rockchip: fix system hang up if activating CONFIG_DEBUG_SHIRQ
Date: Fri, 25 Aug 2017 09:05:43 +0800 [thread overview]
Message-ID: <599F77E7.4040604@rock-chips.com> (raw)
In-Reply-To: <20170824202111.GS31858@bhelgaas-glaptop.roam.corp.google.com>
Hi Bjorn,
On 08/25/2017 04:21 AM, Bjorn Helgaas wrote:
>> >In order to fix this, we remove all the clock-disabling from
>> >the error handle path and driver's remove function. And replying
>> >on the devm_add_action_or_reset to fire the clock-disabling at
>> >the appropriate time. Also split out rockchip_pcie_setup_irq
>> >and move requesting irq after enabling clks to avoid this kind
> Thanks for splitting out the refactoring stuff. That really makes
> this patch much simpler.
>
> IIUC, this really has nothing to do with CONFIG_DEBUG_SHIRQ. It may
> be true that you've only*seen* the problem with CONFIG_DEBUG_SHIRQ
> enabled, but all that config option does is take a situation that
> could happen at any time (another device sharing the IRQ generating an
> interrupt), and force it to happen. So it's just a way to expose an
> existing driver problem.
yes, and i'm wondering would it make more sense to somehow ignore those
irqs(triggered by other devices, and we don't really need to care since
we already unregistered) than trying to hold all needed resources(clks &
power domains & some other resources maybe) for that?
maybe we can just make sure the irq handler unregistered when we stop
caring about the irqs? or maybe add a flag to tell the irq handler to
stop processing them?
>
> The real problem is apparently that rockchip_pcie_subsys_irq_handler()
> relies on some clock being enabled, but we're leaving it registered at
> a time when the clock has already been disabled.
>
> You fixed that by using devm_add_action_or_reset() to tell devm to
> disable the clocks*after* releasing the IRQ.
>
> That sort of makes sense, but devm_add_action_or_reset() is a little
> obscure, and this feels like a hole in the devm framework. Seems like
> it would be nice if there were some sort of devm wrapper for
> clk_prepare_enable() so this would happen automatically.
>
> This pattern:
>
> clk = devm_clk_get(...);
> if (IS_ERR(clk)) {
> dev_warn("no clock for ...");
> return PTR_ERR(clk);
> }
>
> ret = clk_prepare_enable(clk);
> if (ret) {
> dev_warn("failed to enable ...");
> return err;
> }
>
> is quite common ("git grep -A10 devm_clk_get | grep clk_prepare_enable
> | wc -l" finds over 400 occurrences). Should there be something to
> simplify this a little?
>
> I also wonder about other PCI host drivers that use both
> clk_prepare_enable() and devm_request_irq(). Maybe Rockchip is
> "special" in that it seems the driver must turn on a clock before it
> can even talk to the host controller, whereas maybe other drivers can
> always talk to the host controller, but need to turn on clocks
> downstream from the controller. I didn't audit them, but I'm
> concerned that some of them might have this same problem.
>
next prev parent reply other threads:[~2017-08-25 1:05 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-23 7:01 [PATCH v5 0/10] Some cleanup and bug fix for pcie-rockchip Shawn Lin
2017-08-23 7:02 ` [PATCH v5 01/10] PCI: rockchip: spilt out rockchip_pcie_setup_irq Shawn Lin
2017-08-23 7:02 ` [PATCH v5 02/10] PCI: rockchip: spilt out rockchip_pcie_enable_clocks Shawn Lin
2017-08-23 7:02 ` [PATCH v5 03/10] PCI: rockchip: spilt out rockchip_pcie_disable_clocks Shawn Lin
2017-08-23 7:02 ` [PATCH v5 04/10] PCI: rockchip: fix system hang up if activating CONFIG_DEBUG_SHIRQ Shawn Lin
2017-08-24 20:21 ` Bjorn Helgaas
2017-08-24 21:10 ` Dmitry Torokhov
2017-08-25 1:44 ` Brian Norris
2017-08-25 1:05 ` jeffy [this message]
2017-08-25 1:38 ` Shawn Lin
2017-08-23 7:02 ` [PATCH v5 05/10] PCI: rockchip: spilt out rockchip_pcie_deinit_phys Shawn Lin
2017-08-23 7:02 ` [PATCH v5 06/10] PCI: rockchip: fix missing phy manipulation for legacy phy Shawn Lin
2017-08-25 21:18 ` Bjorn Helgaas
2017-08-23 7:03 ` [PATCH v5 07/10] PCI: rockchip: Clean up PHY if driver probe or resume fails Shawn Lin
2017-08-23 7:03 ` [PATCH v5 08/10] PCI: rockchip: disable vpcie0v9 for resume_noirq error handling path Shawn Lin
2017-08-23 7:03 ` [PATCH v5 09/10] PCI: rockchip: remove irq domain if failing to probe Shawn Lin
2017-08-23 7:03 ` [PATCH v5 10/10] PCI: rockchip: umap io space " Shawn Lin
2017-08-25 21:38 ` [PATCH v5 0/10] Some cleanup and bug fix for pcie-rockchip Bjorn Helgaas
2017-08-28 2:22 ` Shawn Lin
2017-08-28 18:33 ` Bjorn Helgaas
2017-08-29 0:47 ` Shawn Lin
2017-08-29 18:25 ` Bjorn Helgaas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=599F77E7.4040604@rock-chips.com \
--to=jeffy.chen@rock-chips.com \
--cc=bhelgaas@google.com \
--cc=briannorris@chromium.org \
--cc=dmitry.torokhov@gmail.com \
--cc=helgaas@kernel.org \
--cc=linux-clk@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-rockchip@lists.infradead.org \
--cc=mturquette@baylibre.com \
--cc=sboyd@codeaurora.org \
--cc=shawn.lin@rock-chips.com \
--cc=tj@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.