linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3] PCI: hosts: mark pcie/pci (msi) irq cascade handler as IRQF_NO_THREAD
@ 2015-12-10 19:18 Grygorii Strashko
  2016-01-06 22:18 ` Bjorn Helgaas
  2016-01-07  9:18 ` Lucas Stach
  0 siblings, 2 replies; 8+ messages in thread
From: Grygorii Strashko @ 2015-12-10 19:18 UTC (permalink / raw)
  To: Sebastian Andrzej Siewior, linux-pci, Bjorn Helgaas
  Cc: tony, nsekhar, linux-arm-kernel, linux-samsung-soc, linux-tegra,
	linux-sh, linux-omap, linux-kernel, Grygorii Strashko,
	Kishon Vijay Abraham I, Jingoo Han, Kukjin Kim,
	Krzysztof Kozlowski, Richard Zhu, Lucas Stach, Thierry Reding,
	Stephen Warren, Alexandre Courbot, Simon Horman, Pratyush Anand,
	Michal Simek, Sören Brinkmann

On -RT and if kernel is booting with "threadirqs" cmd line parameter
pcie/pci (msi) irq cascade handlers (like dra7xx_pcie_msi_irq_handler())
will be forced threaded and, as result, will generate warnings like:

WARNING: CPU: 1 PID: 82 at kernel/irq/handle.c:150 handle_irq_event_percpu+0x14c/0x174()
irq 460 handler irq_default_primary_handler+0x0/0x14 enabled interrupts
Backtrace:
 (warn_slowpath_common) from [<c0043758>] (warn_slowpath_fmt+0x38/0x40)
 (warn_slowpath_fmt) from [<c0085fd0>] (handle_irq_event_percpu+0x14c/0x174)
 (handle_irq_event_percpu) from [<c008607c>] (handle_irq_event+0x84/0xb8)
 (handle_irq_event) from [<c0089240>] (handle_simple_irq+0x90/0x118)
 (handle_simple_irq) from [<c0085514>] (generic_handle_irq+0x30/0x44)
 (generic_handle_irq) from [<c034a7d4>] (dra7xx_pcie_msi_irq_handler+0x7c/0x8c)
 (dra7xx_pcie_msi_irq_handler) from [<c0086f08>] (irq_forced_thread_fn+0x28/0x5c)
 (irq_forced_thread_fn) from [<c00871dc>] (irq_thread+0x128/0x204)

This happens because all of them invoke generic_handle_irq() from the
requsted handler. generic_handle_irq grabs raw_locks and this needs to
run in raw-irq context.

This issue was originally reproduced on TI dra7-evem, but, as was
identified during dicussion [1], other PCI(e) hosts can also suffer
from this issue. So let's fix all them at once and mark pcie/pci (msi)
irq cascade handlers IRQF_NO_THREAD explicitly.

[1] https://lkml.org/lkml/2015/11/20/356

Cc: Kishon Vijay Abraham I <kishon@ti.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Jingoo Han <jingoohan1@gmail.com>
Cc: Kukjin Kim <kgene@kernel.org>
Cc: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Cc: Richard Zhu <Richard.Zhu@freescale.com>
Cc: Lucas Stach <l.stach@pengutronix.de>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Stephen Warren <swarren@wwwdotorg.org>
Cc: Alexandre Courbot <gnurou@gmail.com>
Cc: Simon Horman <horms@verge.net.au>
Cc: Pratyush Anand <pratyush.anand@gmail.com>
Cc: Michal Simek <michal.simek@xilinx.com>
Cc: "Sören Brinkmann" <soren.brinkmann@xilinx.com>
Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>
---
Changes in v3:
 - change applied to all affected pci(e) host drivers in drivers/pci/hosts.
   After some invsetigation I've decided to not touch arch code - it is not easy
   to identify all places which need to be fixed. 
   if it's still required - i can send separate patches for 
   arch/mips/pci/msi-octeon.c and arch/sparc/kernel/pci_msi.c.
Links
v2: https://lkml.org/lkml/2015/11/20/356
v1: https://lkml.org/lkml/2015/11/5/593
ref: https://lkml.org/lkml/2015/11/3/660

 drivers/pci/host/pci-dra7xx.c     | 13 ++++++++++++-
 drivers/pci/host/pci-exynos.c     |  3 ++-
 drivers/pci/host/pci-imx6.c       |  3 ++-
 drivers/pci/host/pci-tegra.c      |  2 +-
 drivers/pci/host/pcie-rcar.c      |  6 ++++--
 drivers/pci/host/pcie-spear13xx.c |  3 ++-
 drivers/pci/host/pcie-xilinx.c    |  3 ++-
 7 files changed, 25 insertions(+), 8 deletions(-)

diff --git a/drivers/pci/host/pci-dra7xx.c b/drivers/pci/host/pci-dra7xx.c
index 8c36880..0415192 100644
--- a/drivers/pci/host/pci-dra7xx.c
+++ b/drivers/pci/host/pci-dra7xx.c
@@ -301,8 +301,19 @@ static int __init dra7xx_add_pcie_port(struct dra7xx_pcie *dra7xx,
 		return -EINVAL;
 	}
 
+	/*
+	 * Mark dra7xx_pcie_msi IRQ as IRQF_NO_THREAD
+	 * On -RT and if kernel is booting with "threadirqs" cmd line parameter
+	 * the dra7xx_pcie_msi_irq_handler() will be forced threaded but,
+	 * in the same time, it's IRQ dispatcher and calls generic_handle_irq(),
+	 * which, in turn, will be resolved to handle_simple_irq() call.
+	 * The handle_simple_irq() expected to be called with IRQ disabled, as
+	 * result kernle will display warning:
+	 * "irq XXX handler YYY+0x0/0x14 enabled interrupts".
+	 */
 	ret = devm_request_irq(&pdev->dev, pp->irq,
-			       dra7xx_pcie_msi_irq_handler, IRQF_SHARED,
+			       dra7xx_pcie_msi_irq_handler,
+			       IRQF_SHARED | IRQF_NO_THREAD,
 			       "dra7-pcie-msi",	pp);
 	if (ret) {
 		dev_err(&pdev->dev, "failed to request irq\n");
diff --git a/drivers/pci/host/pci-exynos.c b/drivers/pci/host/pci-exynos.c
index 01095e1..d997d22 100644
--- a/drivers/pci/host/pci-exynos.c
+++ b/drivers/pci/host/pci-exynos.c
@@ -522,7 +522,8 @@ static int __init exynos_add_pcie_port(struct pcie_port *pp,
 
 		ret = devm_request_irq(&pdev->dev, pp->msi_irq,
 					exynos_pcie_msi_irq_handler,
-					IRQF_SHARED, "exynos-pcie", pp);
+					IRQF_SHARED | IRQF_NO_THREAD,
+					"exynos-pcie", pp);
 		if (ret) {
 			dev_err(&pdev->dev, "failed to request msi irq\n");
 			return ret;
diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c
index 22e8224..9ce7cd1 100644
--- a/drivers/pci/host/pci-imx6.c
+++ b/drivers/pci/host/pci-imx6.c
@@ -537,7 +537,8 @@ static int __init imx6_add_pcie_port(struct pcie_port *pp,
 
 		ret = devm_request_irq(&pdev->dev, pp->msi_irq,
 				       imx6_pcie_msi_handler,
-				       IRQF_SHARED, "mx6-pcie-msi", pp);
+				       IRQF_SHARED | IRQF_NO_THREAD,
+				       "mx6-pcie-msi", pp);
 		if (ret) {
 			dev_err(&pdev->dev, "failed to request MSI irq\n");
 			return ret;
diff --git a/drivers/pci/host/pci-tegra.c b/drivers/pci/host/pci-tegra.c
index 3018ae5..3032311 100644
--- a/drivers/pci/host/pci-tegra.c
+++ b/drivers/pci/host/pci-tegra.c
@@ -1288,7 +1288,7 @@ static int tegra_pcie_enable_msi(struct tegra_pcie *pcie)
 
 	msi->irq = err;
 
-	err = request_irq(msi->irq, tegra_pcie_msi_irq, 0,
+	err = request_irq(msi->irq, tegra_pcie_msi_irq, IRQF_NO_THREAD,
 			  tegra_msi_irq_chip.name, pcie);
 	if (err < 0) {
 		dev_err(&pdev->dev, "failed to request IRQ: %d\n", err);
diff --git a/drivers/pci/host/pcie-rcar.c b/drivers/pci/host/pcie-rcar.c
index f4fa6c5..414c336 100644
--- a/drivers/pci/host/pcie-rcar.c
+++ b/drivers/pci/host/pcie-rcar.c
@@ -720,14 +720,16 @@ static int rcar_pcie_enable_msi(struct rcar_pcie *pcie)
 
 	/* Two irqs are for MSI, but they are also used for non-MSI irqs */
 	err = devm_request_irq(&pdev->dev, msi->irq1, rcar_pcie_msi_irq,
-			       IRQF_SHARED, rcar_msi_irq_chip.name, pcie);
+			       IRQF_SHARED | IRQF_NO_THREAD,
+			       rcar_msi_irq_chip.name, pcie);
 	if (err < 0) {
 		dev_err(&pdev->dev, "failed to request IRQ: %d\n", err);
 		goto err;
 	}
 
 	err = devm_request_irq(&pdev->dev, msi->irq2, rcar_pcie_msi_irq,
-			       IRQF_SHARED, rcar_msi_irq_chip.name, pcie);
+			       IRQF_SHARED | IRQF_NO_THREAD,
+			       rcar_msi_irq_chip.name, pcie);
 	if (err < 0) {
 		dev_err(&pdev->dev, "failed to request IRQ: %d\n", err);
 		goto err;
diff --git a/drivers/pci/host/pcie-spear13xx.c b/drivers/pci/host/pcie-spear13xx.c
index b95b756..a6cd823 100644
--- a/drivers/pci/host/pcie-spear13xx.c
+++ b/drivers/pci/host/pcie-spear13xx.c
@@ -279,7 +279,8 @@ static int spear13xx_add_pcie_port(struct pcie_port *pp,
 		return -ENODEV;
 	}
 	ret = devm_request_irq(dev, pp->irq, spear13xx_pcie_irq_handler,
-			       IRQF_SHARED, "spear1340-pcie", pp);
+			       IRQF_SHARED | IRQF_NO_THREAD,
+			       "spear1340-pcie", pp);
 	if (ret) {
 		dev_err(dev, "failed to request irq %d\n", pp->irq);
 		return ret;
diff --git a/drivers/pci/host/pcie-xilinx.c b/drivers/pci/host/pcie-xilinx.c
index 3c7a0d5..4cfa463 100644
--- a/drivers/pci/host/pcie-xilinx.c
+++ b/drivers/pci/host/pcie-xilinx.c
@@ -781,7 +781,8 @@ static int xilinx_pcie_parse_dt(struct xilinx_pcie_port *port)
 
 	port->irq = irq_of_parse_and_map(node, 0);
 	err = devm_request_irq(dev, port->irq, xilinx_pcie_intr_handler,
-			       IRQF_SHARED, "xilinx-pcie", port);
+			       IRQF_SHARED | IRQF_NO_THREAD,
+			       "xilinx-pcie", port);
 	if (err) {
 		dev_err(dev, "unable to request irq %d\n", port->irq);
 		return err;
-- 
2.6.4


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH v3] PCI: hosts: mark pcie/pci (msi) irq cascade handler as IRQF_NO_THREAD
  2015-12-10 19:18 [PATCH v3] PCI: hosts: mark pcie/pci (msi) irq cascade handler as IRQF_NO_THREAD Grygorii Strashko
@ 2016-01-06 22:18 ` Bjorn Helgaas
  2016-01-13 13:39   ` Sebastian Andrzej Siewior
  2016-01-07  9:18 ` Lucas Stach
  1 sibling, 1 reply; 8+ messages in thread
From: Bjorn Helgaas @ 2016-01-06 22:18 UTC (permalink / raw)
  To: Grygorii Strashko
  Cc: Sebastian Andrzej Siewior, linux-pci, Bjorn Helgaas, tony,
	nsekhar, linux-arm-kernel, linux-samsung-soc, linux-tegra,
	linux-sh, linux-omap, linux-kernel, Kishon Vijay Abraham I,
	Jingoo Han, Kukjin Kim, Krzysztof Kozlowski, Richard Zhu,
	Lucas Stach, Thierry Reding, Stephen Warren, Alexandre Courbot,
	Simon Horman, Pratyush Anand, Michal Simek, Sören Brinkmann

Hi Grygorii,

On Thu, Dec 10, 2015 at 09:18:20PM +0200, Grygorii Strashko wrote:
> On -RT and if kernel is booting with "threadirqs" cmd line parameter
> pcie/pci (msi) irq cascade handlers (like dra7xx_pcie_msi_irq_handler())
> will be forced threaded and, as result, will generate warnings like:
> 
> WARNING: CPU: 1 PID: 82 at kernel/irq/handle.c:150 handle_irq_event_percpu+0x14c/0x174()
> irq 460 handler irq_default_primary_handler+0x0/0x14 enabled interrupts
> Backtrace:
>  (warn_slowpath_common) from [<c0043758>] (warn_slowpath_fmt+0x38/0x40)
>  (warn_slowpath_fmt) from [<c0085fd0>] (handle_irq_event_percpu+0x14c/0x174)
>  (handle_irq_event_percpu) from [<c008607c>] (handle_irq_event+0x84/0xb8)
>  (handle_irq_event) from [<c0089240>] (handle_simple_irq+0x90/0x118)
>  (handle_simple_irq) from [<c0085514>] (generic_handle_irq+0x30/0x44)
>  (generic_handle_irq) from [<c034a7d4>] (dra7xx_pcie_msi_irq_handler+0x7c/0x8c)
>  (dra7xx_pcie_msi_irq_handler) from [<c0086f08>] (irq_forced_thread_fn+0x28/0x5c)
>  (irq_forced_thread_fn) from [<c00871dc>] (irq_thread+0x128/0x204)
> 
> This happens because all of them invoke generic_handle_irq() from the
> requsted handler. generic_handle_irq grabs raw_locks and this needs to
> run in raw-irq context.
> 
> This issue was originally reproduced on TI dra7-evem, but, as was
> identified during dicussion [1], other PCI(e) hosts can also suffer
> from this issue. So let's fix all them at once and mark pcie/pci (msi)
> irq cascade handlers IRQF_NO_THREAD explicitly.
> 
> [1] https://lkml.org/lkml/2015/11/20/356
> 
> Cc: Kishon Vijay Abraham I <kishon@ti.com>
> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Cc: Jingoo Han <jingoohan1@gmail.com>
> Cc: Kukjin Kim <kgene@kernel.org>
> Cc: Krzysztof Kozlowski <k.kozlowski@samsung.com>
> Cc: Richard Zhu <Richard.Zhu@freescale.com>
> Cc: Lucas Stach <l.stach@pengutronix.de>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: Stephen Warren <swarren@wwwdotorg.org>
> Cc: Alexandre Courbot <gnurou@gmail.com>
> Cc: Simon Horman <horms@verge.net.au>
> Cc: Pratyush Anand <pratyush.anand@gmail.com>
> Cc: Michal Simek <michal.simek@xilinx.com>
> Cc: "Sören Brinkmann" <soren.brinkmann@xilinx.com>
> Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
> Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>
> ---
> Changes in v3:
>  - change applied to all affected pci(e) host drivers in drivers/pci/hosts.
>    After some invsetigation I've decided to not touch arch code - it is not easy
>    to identify all places which need to be fixed. 
>    if it's still required - i can send separate patches for 
>    arch/mips/pci/msi-octeon.c and arch/sparc/kernel/pci_msi.c.
> Links
> v2: https://lkml.org/lkml/2015/11/20/356
> v1: https://lkml.org/lkml/2015/11/5/593
> ref: https://lkml.org/lkml/2015/11/3/660
> 
>  drivers/pci/host/pci-dra7xx.c     | 13 ++++++++++++-
>  drivers/pci/host/pci-exynos.c     |  3 ++-
>  drivers/pci/host/pci-imx6.c       |  3 ++-
>  drivers/pci/host/pci-tegra.c      |  2 +-
>  drivers/pci/host/pcie-rcar.c      |  6 ++++--
>  drivers/pci/host/pcie-spear13xx.c |  3 ++-
>  drivers/pci/host/pcie-xilinx.c    |  3 ++-
>  7 files changed, 25 insertions(+), 8 deletions(-)

I applied this to pci/host for v4.5, thanks.  I added a stable tag.
I haven't seen any acks from the host driver guys, but I will still add
them if I see any in the next few days.

Bjorn

> diff --git a/drivers/pci/host/pci-dra7xx.c b/drivers/pci/host/pci-dra7xx.c
> index 8c36880..0415192 100644
> --- a/drivers/pci/host/pci-dra7xx.c
> +++ b/drivers/pci/host/pci-dra7xx.c
> @@ -301,8 +301,19 @@ static int __init dra7xx_add_pcie_port(struct dra7xx_pcie *dra7xx,
>  		return -EINVAL;
>  	}
>  
> +	/*
> +	 * Mark dra7xx_pcie_msi IRQ as IRQF_NO_THREAD
> +	 * On -RT and if kernel is booting with "threadirqs" cmd line parameter
> +	 * the dra7xx_pcie_msi_irq_handler() will be forced threaded but,
> +	 * in the same time, it's IRQ dispatcher and calls generic_handle_irq(),
> +	 * which, in turn, will be resolved to handle_simple_irq() call.
> +	 * The handle_simple_irq() expected to be called with IRQ disabled, as
> +	 * result kernle will display warning:
> +	 * "irq XXX handler YYY+0x0/0x14 enabled interrupts".
> +	 */
>  	ret = devm_request_irq(&pdev->dev, pp->irq,
> -			       dra7xx_pcie_msi_irq_handler, IRQF_SHARED,
> +			       dra7xx_pcie_msi_irq_handler,
> +			       IRQF_SHARED | IRQF_NO_THREAD,
>  			       "dra7-pcie-msi",	pp);
>  	if (ret) {
>  		dev_err(&pdev->dev, "failed to request irq\n");
> diff --git a/drivers/pci/host/pci-exynos.c b/drivers/pci/host/pci-exynos.c
> index 01095e1..d997d22 100644
> --- a/drivers/pci/host/pci-exynos.c
> +++ b/drivers/pci/host/pci-exynos.c
> @@ -522,7 +522,8 @@ static int __init exynos_add_pcie_port(struct pcie_port *pp,
>  
>  		ret = devm_request_irq(&pdev->dev, pp->msi_irq,
>  					exynos_pcie_msi_irq_handler,
> -					IRQF_SHARED, "exynos-pcie", pp);
> +					IRQF_SHARED | IRQF_NO_THREAD,
> +					"exynos-pcie", pp);
>  		if (ret) {
>  			dev_err(&pdev->dev, "failed to request msi irq\n");
>  			return ret;
> diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c
> index 22e8224..9ce7cd1 100644
> --- a/drivers/pci/host/pci-imx6.c
> +++ b/drivers/pci/host/pci-imx6.c
> @@ -537,7 +537,8 @@ static int __init imx6_add_pcie_port(struct pcie_port *pp,
>  
>  		ret = devm_request_irq(&pdev->dev, pp->msi_irq,
>  				       imx6_pcie_msi_handler,
> -				       IRQF_SHARED, "mx6-pcie-msi", pp);
> +				       IRQF_SHARED | IRQF_NO_THREAD,
> +				       "mx6-pcie-msi", pp);
>  		if (ret) {
>  			dev_err(&pdev->dev, "failed to request MSI irq\n");
>  			return ret;
> diff --git a/drivers/pci/host/pci-tegra.c b/drivers/pci/host/pci-tegra.c
> index 3018ae5..3032311 100644
> --- a/drivers/pci/host/pci-tegra.c
> +++ b/drivers/pci/host/pci-tegra.c
> @@ -1288,7 +1288,7 @@ static int tegra_pcie_enable_msi(struct tegra_pcie *pcie)
>  
>  	msi->irq = err;
>  
> -	err = request_irq(msi->irq, tegra_pcie_msi_irq, 0,
> +	err = request_irq(msi->irq, tegra_pcie_msi_irq, IRQF_NO_THREAD,
>  			  tegra_msi_irq_chip.name, pcie);
>  	if (err < 0) {
>  		dev_err(&pdev->dev, "failed to request IRQ: %d\n", err);
> diff --git a/drivers/pci/host/pcie-rcar.c b/drivers/pci/host/pcie-rcar.c
> index f4fa6c5..414c336 100644
> --- a/drivers/pci/host/pcie-rcar.c
> +++ b/drivers/pci/host/pcie-rcar.c
> @@ -720,14 +720,16 @@ static int rcar_pcie_enable_msi(struct rcar_pcie *pcie)
>  
>  	/* Two irqs are for MSI, but they are also used for non-MSI irqs */
>  	err = devm_request_irq(&pdev->dev, msi->irq1, rcar_pcie_msi_irq,
> -			       IRQF_SHARED, rcar_msi_irq_chip.name, pcie);
> +			       IRQF_SHARED | IRQF_NO_THREAD,
> +			       rcar_msi_irq_chip.name, pcie);
>  	if (err < 0) {
>  		dev_err(&pdev->dev, "failed to request IRQ: %d\n", err);
>  		goto err;
>  	}
>  
>  	err = devm_request_irq(&pdev->dev, msi->irq2, rcar_pcie_msi_irq,
> -			       IRQF_SHARED, rcar_msi_irq_chip.name, pcie);
> +			       IRQF_SHARED | IRQF_NO_THREAD,
> +			       rcar_msi_irq_chip.name, pcie);
>  	if (err < 0) {
>  		dev_err(&pdev->dev, "failed to request IRQ: %d\n", err);
>  		goto err;
> diff --git a/drivers/pci/host/pcie-spear13xx.c b/drivers/pci/host/pcie-spear13xx.c
> index b95b756..a6cd823 100644
> --- a/drivers/pci/host/pcie-spear13xx.c
> +++ b/drivers/pci/host/pcie-spear13xx.c
> @@ -279,7 +279,8 @@ static int spear13xx_add_pcie_port(struct pcie_port *pp,
>  		return -ENODEV;
>  	}
>  	ret = devm_request_irq(dev, pp->irq, spear13xx_pcie_irq_handler,
> -			       IRQF_SHARED, "spear1340-pcie", pp);
> +			       IRQF_SHARED | IRQF_NO_THREAD,
> +			       "spear1340-pcie", pp);
>  	if (ret) {
>  		dev_err(dev, "failed to request irq %d\n", pp->irq);
>  		return ret;
> diff --git a/drivers/pci/host/pcie-xilinx.c b/drivers/pci/host/pcie-xilinx.c
> index 3c7a0d5..4cfa463 100644
> --- a/drivers/pci/host/pcie-xilinx.c
> +++ b/drivers/pci/host/pcie-xilinx.c
> @@ -781,7 +781,8 @@ static int xilinx_pcie_parse_dt(struct xilinx_pcie_port *port)
>  
>  	port->irq = irq_of_parse_and_map(node, 0);
>  	err = devm_request_irq(dev, port->irq, xilinx_pcie_intr_handler,
> -			       IRQF_SHARED, "xilinx-pcie", port);
> +			       IRQF_SHARED | IRQF_NO_THREAD,
> +			       "xilinx-pcie", port);
>  	if (err) {
>  		dev_err(dev, "unable to request irq %d\n", port->irq);
>  		return err;
> -- 
> 2.6.4
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v3] PCI: hosts: mark pcie/pci (msi) irq cascade handler as IRQF_NO_THREAD
  2015-12-10 19:18 [PATCH v3] PCI: hosts: mark pcie/pci (msi) irq cascade handler as IRQF_NO_THREAD Grygorii Strashko
  2016-01-06 22:18 ` Bjorn Helgaas
@ 2016-01-07  9:18 ` Lucas Stach
  1 sibling, 0 replies; 8+ messages in thread
From: Lucas Stach @ 2016-01-07  9:18 UTC (permalink / raw)
  To: Grygorii Strashko
  Cc: Sebastian Andrzej Siewior, linux-pci, Bjorn Helgaas, tony,
	nsekhar, linux-arm-kernel, linux-samsung-soc, linux-tegra,
	linux-sh, linux-omap, linux-kernel, Kishon Vijay Abraham I,
	Jingoo Han, Kukjin Kim, Krzysztof Kozlowski, Richard Zhu,
	Thierry Reding, Stephen Warren, Alexandre Courbot, Simon Horman,
	Pratyush Anand, Michal Simek, Sören Brinkmann

Am Donnerstag, den 10.12.2015, 21:18 +0200 schrieb Grygorii Strashko:
> On -RT and if kernel is booting with "threadirqs" cmd line parameter
> pcie/pci (msi) irq cascade handlers (like dra7xx_pcie_msi_irq_handler())
> will be forced threaded and, as result, will generate warnings like:
> 
> WARNING: CPU: 1 PID: 82 at kernel/irq/handle.c:150 handle_irq_event_percpu+0x14c/0x174()
> irq 460 handler irq_default_primary_handler+0x0/0x14 enabled interrupts
> Backtrace:
>  (warn_slowpath_common) from [<c0043758>] (warn_slowpath_fmt+0x38/0x40)
>  (warn_slowpath_fmt) from [<c0085fd0>] (handle_irq_event_percpu+0x14c/0x174)
>  (handle_irq_event_percpu) from [<c008607c>] (handle_irq_event+0x84/0xb8)
>  (handle_irq_event) from [<c0089240>] (handle_simple_irq+0x90/0x118)
>  (handle_simple_irq) from [<c0085514>] (generic_handle_irq+0x30/0x44)
>  (generic_handle_irq) from [<c034a7d4>] (dra7xx_pcie_msi_irq_handler+0x7c/0x8c)
>  (dra7xx_pcie_msi_irq_handler) from [<c0086f08>] (irq_forced_thread_fn+0x28/0x5c)
>  (irq_forced_thread_fn) from [<c00871dc>] (irq_thread+0x128/0x204)
> 
> This happens because all of them invoke generic_handle_irq() from the
> requsted handler. generic_handle_irq grabs raw_locks and this needs to
> run in raw-irq context.
> 
> This issue was originally reproduced on TI dra7-evem, but, as was
> identified during dicussion [1], other PCI(e) hosts can also suffer
> from this issue. So let's fix all them at once and mark pcie/pci (msi)
> irq cascade handlers IRQF_NO_THREAD explicitly.
> 
> [1] https://lkml.org/lkml/2015/11/20/356
> 
> Cc: Kishon Vijay Abraham I <kishon@ti.com>
> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Cc: Jingoo Han <jingoohan1@gmail.com>
> Cc: Kukjin Kim <kgene@kernel.org>
> Cc: Krzysztof Kozlowski <k.kozlowski@samsung.com>
> Cc: Richard Zhu <Richard.Zhu@freescale.com>
> Cc: Lucas Stach <l.stach@pengutronix.de>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: Stephen Warren <swarren@wwwdotorg.org>
> Cc: Alexandre Courbot <gnurou@gmail.com>
> Cc: Simon Horman <horms@verge.net.au>
> Cc: Pratyush Anand <pratyush.anand@gmail.com>
> Cc: Michal Simek <michal.simek@xilinx.com>
> Cc: "Sören Brinkmann" <soren.brinkmann@xilinx.com>
> Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
> Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>

Sorry this fell through the cracks, so here is my late

Acked-by: Lucas Stach <l.stach@pengutronix.de>

for the imx6 part.

> ---
> Changes in v3:
>  - change applied to all affected pci(e) host drivers in drivers/pci/hosts.
>    After some invsetigation I've decided to not touch arch code - it is not easy
>    to identify all places which need to be fixed. 
>    if it's still required - i can send separate patches for 
>    arch/mips/pci/msi-octeon.c and arch/sparc/kernel/pci_msi.c.
> Links
> v2: https://lkml.org/lkml/2015/11/20/356
> v1: https://lkml.org/lkml/2015/11/5/593
> ref: https://lkml.org/lkml/2015/11/3/660
> 
>  drivers/pci/host/pci-dra7xx.c     | 13 ++++++++++++-
>  drivers/pci/host/pci-exynos.c     |  3 ++-
>  drivers/pci/host/pci-imx6.c       |  3 ++-
>  drivers/pci/host/pci-tegra.c      |  2 +-
>  drivers/pci/host/pcie-rcar.c      |  6 ++++--
>  drivers/pci/host/pcie-spear13xx.c |  3 ++-
>  drivers/pci/host/pcie-xilinx.c    |  3 ++-
>  7 files changed, 25 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/pci/host/pci-dra7xx.c b/drivers/pci/host/pci-dra7xx.c
> index 8c36880..0415192 100644
> --- a/drivers/pci/host/pci-dra7xx.c
> +++ b/drivers/pci/host/pci-dra7xx.c
> @@ -301,8 +301,19 @@ static int __init dra7xx_add_pcie_port(struct dra7xx_pcie *dra7xx,
>  		return -EINVAL;
>  	}
>  
> +	/*
> +	 * Mark dra7xx_pcie_msi IRQ as IRQF_NO_THREAD
> +	 * On -RT and if kernel is booting with "threadirqs" cmd line parameter
> +	 * the dra7xx_pcie_msi_irq_handler() will be forced threaded but,
> +	 * in the same time, it's IRQ dispatcher and calls generic_handle_irq(),
> +	 * which, in turn, will be resolved to handle_simple_irq() call.
> +	 * The handle_simple_irq() expected to be called with IRQ disabled, as
> +	 * result kernle will display warning:
> +	 * "irq XXX handler YYY+0x0/0x14 enabled interrupts".
> +	 */
>  	ret = devm_request_irq(&pdev->dev, pp->irq,
> -			       dra7xx_pcie_msi_irq_handler, IRQF_SHARED,
> +			       dra7xx_pcie_msi_irq_handler,
> +			       IRQF_SHARED | IRQF_NO_THREAD,
>  			       "dra7-pcie-msi",	pp);
>  	if (ret) {
>  		dev_err(&pdev->dev, "failed to request irq\n");
> diff --git a/drivers/pci/host/pci-exynos.c b/drivers/pci/host/pci-exynos.c
> index 01095e1..d997d22 100644
> --- a/drivers/pci/host/pci-exynos.c
> +++ b/drivers/pci/host/pci-exynos.c
> @@ -522,7 +522,8 @@ static int __init exynos_add_pcie_port(struct pcie_port *pp,
>  
>  		ret = devm_request_irq(&pdev->dev, pp->msi_irq,
>  					exynos_pcie_msi_irq_handler,
> -					IRQF_SHARED, "exynos-pcie", pp);
> +					IRQF_SHARED | IRQF_NO_THREAD,
> +					"exynos-pcie", pp);
>  		if (ret) {
>  			dev_err(&pdev->dev, "failed to request msi irq\n");
>  			return ret;
> diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c
> index 22e8224..9ce7cd1 100644
> --- a/drivers/pci/host/pci-imx6.c
> +++ b/drivers/pci/host/pci-imx6.c
> @@ -537,7 +537,8 @@ static int __init imx6_add_pcie_port(struct pcie_port *pp,
>  
>  		ret = devm_request_irq(&pdev->dev, pp->msi_irq,
>  				       imx6_pcie_msi_handler,
> -				       IRQF_SHARED, "mx6-pcie-msi", pp);
> +				       IRQF_SHARED | IRQF_NO_THREAD,
> +				       "mx6-pcie-msi", pp);
>  		if (ret) {
>  			dev_err(&pdev->dev, "failed to request MSI irq\n");
>  			return ret;
> diff --git a/drivers/pci/host/pci-tegra.c b/drivers/pci/host/pci-tegra.c
> index 3018ae5..3032311 100644
> --- a/drivers/pci/host/pci-tegra.c
> +++ b/drivers/pci/host/pci-tegra.c
> @@ -1288,7 +1288,7 @@ static int tegra_pcie_enable_msi(struct tegra_pcie *pcie)
>  
>  	msi->irq = err;
>  
> -	err = request_irq(msi->irq, tegra_pcie_msi_irq, 0,
> +	err = request_irq(msi->irq, tegra_pcie_msi_irq, IRQF_NO_THREAD,
>  			  tegra_msi_irq_chip.name, pcie);
>  	if (err < 0) {
>  		dev_err(&pdev->dev, "failed to request IRQ: %d\n", err);
> diff --git a/drivers/pci/host/pcie-rcar.c b/drivers/pci/host/pcie-rcar.c
> index f4fa6c5..414c336 100644
> --- a/drivers/pci/host/pcie-rcar.c
> +++ b/drivers/pci/host/pcie-rcar.c
> @@ -720,14 +720,16 @@ static int rcar_pcie_enable_msi(struct rcar_pcie *pcie)
>  
>  	/* Two irqs are for MSI, but they are also used for non-MSI irqs */
>  	err = devm_request_irq(&pdev->dev, msi->irq1, rcar_pcie_msi_irq,
> -			       IRQF_SHARED, rcar_msi_irq_chip.name, pcie);
> +			       IRQF_SHARED | IRQF_NO_THREAD,
> +			       rcar_msi_irq_chip.name, pcie);
>  	if (err < 0) {
>  		dev_err(&pdev->dev, "failed to request IRQ: %d\n", err);
>  		goto err;
>  	}
>  
>  	err = devm_request_irq(&pdev->dev, msi->irq2, rcar_pcie_msi_irq,
> -			       IRQF_SHARED, rcar_msi_irq_chip.name, pcie);
> +			       IRQF_SHARED | IRQF_NO_THREAD,
> +			       rcar_msi_irq_chip.name, pcie);
>  	if (err < 0) {
>  		dev_err(&pdev->dev, "failed to request IRQ: %d\n", err);
>  		goto err;
> diff --git a/drivers/pci/host/pcie-spear13xx.c b/drivers/pci/host/pcie-spear13xx.c
> index b95b756..a6cd823 100644
> --- a/drivers/pci/host/pcie-spear13xx.c
> +++ b/drivers/pci/host/pcie-spear13xx.c
> @@ -279,7 +279,8 @@ static int spear13xx_add_pcie_port(struct pcie_port *pp,
>  		return -ENODEV;
>  	}
>  	ret = devm_request_irq(dev, pp->irq, spear13xx_pcie_irq_handler,
> -			       IRQF_SHARED, "spear1340-pcie", pp);
> +			       IRQF_SHARED | IRQF_NO_THREAD,
> +			       "spear1340-pcie", pp);
>  	if (ret) {
>  		dev_err(dev, "failed to request irq %d\n", pp->irq);
>  		return ret;
> diff --git a/drivers/pci/host/pcie-xilinx.c b/drivers/pci/host/pcie-xilinx.c
> index 3c7a0d5..4cfa463 100644
> --- a/drivers/pci/host/pcie-xilinx.c
> +++ b/drivers/pci/host/pcie-xilinx.c
> @@ -781,7 +781,8 @@ static int xilinx_pcie_parse_dt(struct xilinx_pcie_port *port)
>  
>  	port->irq = irq_of_parse_and_map(node, 0);
>  	err = devm_request_irq(dev, port->irq, xilinx_pcie_intr_handler,
> -			       IRQF_SHARED, "xilinx-pcie", port);
> +			       IRQF_SHARED | IRQF_NO_THREAD,
> +			       "xilinx-pcie", port);
>  	if (err) {
>  		dev_err(dev, "unable to request irq %d\n", port->irq);
>  		return err;

-- 
Pengutronix e.K.             | Lucas Stach                 |
Industrial Linux Solutions   | http://www.pengutronix.de/  |


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v3] PCI: hosts: mark pcie/pci (msi) irq cascade handler as IRQF_NO_THREAD
  2016-01-06 22:18 ` Bjorn Helgaas
@ 2016-01-13 13:39   ` Sebastian Andrzej Siewior
  2016-01-13 17:50     ` Bjorn Helgaas
  0 siblings, 1 reply; 8+ messages in thread
From: Sebastian Andrzej Siewior @ 2016-01-13 13:39 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: Grygorii Strashko, linux-pci, Bjorn Helgaas, tony, nsekhar,
	linux-arm-kernel, linux-samsung-soc, linux-tegra, linux-sh,
	linux-omap, linux-kernel, Kishon Vijay Abraham I, Jingoo Han,
	Kukjin Kim, Krzysztof Kozlowski, Richard Zhu, Lucas Stach,
	Thierry Reding, Stephen Warren, Alexandre Courbot, Simon Horman,
	Pratyush Anand, Michal Simek, Sören Brinkmann

* Bjorn Helgaas | 2016-01-06 16:18:27 [-0600]:

>Hi Bjorn,

>> diff --git a/drivers/pci/host/pci-dra7xx.c b/drivers/pci/host/pci-dra7xx.c
>> index 8c36880..0415192 100644
>> --- a/drivers/pci/host/pci-dra7xx.c
>> +++ b/drivers/pci/host/pci-dra7xx.c
>> @@ -301,8 +301,19 @@ static int __init dra7xx_add_pcie_port(struct dra7xx_pcie *dra7xx,
>>  		return -EINVAL;
>>  	}
>>  
>> +	/*
>> +	 * Mark dra7xx_pcie_msi IRQ as IRQF_NO_THREAD
>> +	 * On -RT and if kernel is booting with "threadirqs" cmd line parameter
>> +	 * the dra7xx_pcie_msi_irq_handler() will be forced threaded but,
>> +	 * in the same time, it's IRQ dispatcher and calls generic_handle_irq(),
>> +	 * which, in turn, will be resolved to handle_simple_irq() call.
>> +	 * The handle_simple_irq() expected to be called with IRQ disabled, as
>> +	 * result kernle will display warning:
>> +	 * "irq XXX handler YYY+0x0/0x14 enabled interrupts".
>> +	 */

could you _please_ remove this coment? This kind of comment (if at all)
should be part of the commit message (which is the case more or less).

>>  	ret = devm_request_irq(&pdev->dev, pp->irq,
>> -			       dra7xx_pcie_msi_irq_handler, IRQF_SHARED,
>> +			       dra7xx_pcie_msi_irq_handler,
>> +			       IRQF_SHARED | IRQF_NO_THREAD,
>>  			       "dra7-pcie-msi",	pp);
>>  	if (ret) {
>>  		dev_err(&pdev->dev, "failed to request irq\n");
>> diff --git a/drivers/pci/host/pci-exynos.c b/drivers/pci/host/pci-exynos.c

Sebastian

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v3] PCI: hosts: mark pcie/pci (msi) irq cascade handler as IRQF_NO_THREAD
  2016-01-13 13:39   ` Sebastian Andrzej Siewior
@ 2016-01-13 17:50     ` Bjorn Helgaas
  2016-01-13 18:48       ` Grygorii Strashko
  0 siblings, 1 reply; 8+ messages in thread
From: Bjorn Helgaas @ 2016-01-13 17:50 UTC (permalink / raw)
  To: Sebastian Andrzej Siewior
  Cc: Grygorii Strashko, linux-pci, Bjorn Helgaas, tony, nsekhar,
	linux-arm-kernel, linux-samsung-soc, linux-tegra, linux-sh,
	linux-omap, linux-kernel, Kishon Vijay Abraham I, Jingoo Han,
	Kukjin Kim, Krzysztof Kozlowski, Richard Zhu, Lucas Stach,
	Thierry Reding, Stephen Warren, Alexandre Courbot, Simon Horman,
	Pratyush Anand, Michal Simek, Sören Brinkmann

On Wed, Jan 13, 2016 at 02:39:04PM +0100, Sebastian Andrzej Siewior wrote:
> * Bjorn Helgaas | 2016-01-06 16:18:27 [-0600]:
> 
> >Hi Bjorn,
> 
> >> diff --git a/drivers/pci/host/pci-dra7xx.c b/drivers/pci/host/pci-dra7xx.c
> >> index 8c36880..0415192 100644
> >> --- a/drivers/pci/host/pci-dra7xx.c
> >> +++ b/drivers/pci/host/pci-dra7xx.c
> >> @@ -301,8 +301,19 @@ static int __init dra7xx_add_pcie_port(struct dra7xx_pcie *dra7xx,
> >>  		return -EINVAL;
> >>  	}
> >>  
> >> +	/*
> >> +	 * Mark dra7xx_pcie_msi IRQ as IRQF_NO_THREAD
> >> +	 * On -RT and if kernel is booting with "threadirqs" cmd line parameter
> >> +	 * the dra7xx_pcie_msi_irq_handler() will be forced threaded but,
> >> +	 * in the same time, it's IRQ dispatcher and calls generic_handle_irq(),
> >> +	 * which, in turn, will be resolved to handle_simple_irq() call.
> >> +	 * The handle_simple_irq() expected to be called with IRQ disabled, as
> >> +	 * result kernle will display warning:
> >> +	 * "irq XXX handler YYY+0x0/0x14 enabled interrupts".
> >> +	 */
> 
> could you _please_ remove this coment? This kind of comment (if at all)
> should be part of the commit message (which is the case more or less).

IIRC, Grygorii specifically wanted to keep this comment in dra7xx, but
I do agree that this level of detail is more appropriate for a changelog.

If Grygorii and Kishon don't object, I can update the patch to remove it.

> >>  	ret = devm_request_irq(&pdev->dev, pp->irq,
> >> -			       dra7xx_pcie_msi_irq_handler, IRQF_SHARED,
> >> +			       dra7xx_pcie_msi_irq_handler,
> >> +			       IRQF_SHARED | IRQF_NO_THREAD,
> >>  			       "dra7-pcie-msi",	pp);
> >>  	if (ret) {
> >>  		dev_err(&pdev->dev, "failed to request irq\n");
> >> diff --git a/drivers/pci/host/pci-exynos.c b/drivers/pci/host/pci-exynos.c
> 
> Sebastian
> --
> To unsubscribe from this list: send the line "unsubscribe linux-pci" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v3] PCI: hosts: mark pcie/pci (msi) irq cascade handler as IRQF_NO_THREAD
  2016-01-13 17:50     ` Bjorn Helgaas
@ 2016-01-13 18:48       ` Grygorii Strashko
  2016-01-14  6:19         ` Kishon Vijay Abraham I
  0 siblings, 1 reply; 8+ messages in thread
From: Grygorii Strashko @ 2016-01-13 18:48 UTC (permalink / raw)
  To: Bjorn Helgaas, Sebastian Andrzej Siewior
  Cc: linux-pci, Bjorn Helgaas, tony, nsekhar, linux-arm-kernel,
	linux-samsung-soc, linux-tegra, linux-sh, linux-omap,
	linux-kernel, Kishon Vijay Abraham I, Jingoo Han, Kukjin Kim,
	Krzysztof Kozlowski, Richard Zhu, Lucas Stach, Thierry Reding,
	Stephen Warren, Alexandre Courbot, Simon Horman, Pratyush Anand,
	Michal Simek, Sören Brinkmann

On 01/13/2016 07:50 PM, Bjorn Helgaas wrote:
> On Wed, Jan 13, 2016 at 02:39:04PM +0100, Sebastian Andrzej Siewior wrote:
>> * Bjorn Helgaas | 2016-01-06 16:18:27 [-0600]:
>>
>>> Hi Bjorn,
>>
>>>> diff --git a/drivers/pci/host/pci-dra7xx.c b/drivers/pci/host/pci-dra7xx.c
>>>> index 8c36880..0415192 100644
>>>> --- a/drivers/pci/host/pci-dra7xx.c
>>>> +++ b/drivers/pci/host/pci-dra7xx.c
>>>> @@ -301,8 +301,19 @@ static int __init dra7xx_add_pcie_port(struct dra7xx_pcie *dra7xx,
>>>>   		return -EINVAL;
>>>>   	}
>>>>
>>>> +	/*
>>>> +	 * Mark dra7xx_pcie_msi IRQ as IRQF_NO_THREAD
>>>> +	 * On -RT and if kernel is booting with "threadirqs" cmd line parameter
>>>> +	 * the dra7xx_pcie_msi_irq_handler() will be forced threaded but,
>>>> +	 * in the same time, it's IRQ dispatcher and calls generic_handle_irq(),
>>>> +	 * which, in turn, will be resolved to handle_simple_irq() call.
>>>> +	 * The handle_simple_irq() expected to be called with IRQ disabled, as
>>>> +	 * result kernle will display warning:
>>>> +	 * "irq XXX handler YYY+0x0/0x14 enabled interrupts".
>>>> +	 */
>>
>> could you _please_ remove this coment? This kind of comment (if at all)
>> should be part of the commit message (which is the case more or less).
>
> IIRC, Grygorii specifically wanted to keep this comment in dra7xx, but

True.

> I do agree that this level of detail is more appropriate for a changelog.
>
> If Grygorii and Kishon don't object, I can update the patch to remove it.

But no objections from my side. Thanks a lot.

-- 
regards,
-grygorii

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v3] PCI: hosts: mark pcie/pci (msi) irq cascade handler as IRQF_NO_THREAD
  2016-01-13 18:48       ` Grygorii Strashko
@ 2016-01-14  6:19         ` Kishon Vijay Abraham I
  2016-01-15 18:31           ` Bjorn Helgaas
  0 siblings, 1 reply; 8+ messages in thread
From: Kishon Vijay Abraham I @ 2016-01-14  6:19 UTC (permalink / raw)
  To: Grygorii Strashko, Bjorn Helgaas, Sebastian Andrzej Siewior
  Cc: linux-pci, Bjorn Helgaas, tony, nsekhar, linux-arm-kernel,
	linux-samsung-soc, linux-tegra, linux-sh, linux-omap,
	linux-kernel, Jingoo Han, Kukjin Kim, Krzysztof Kozlowski,
	Richard Zhu, Lucas Stach, Thierry Reding, Stephen Warren,
	Alexandre Courbot, Simon Horman, Pratyush Anand, Michal Simek,
	Sören Brinkmann

Hi,

On Thursday 14 January 2016 12:18 AM, Grygorii Strashko wrote:
> On 01/13/2016 07:50 PM, Bjorn Helgaas wrote:
>> On Wed, Jan 13, 2016 at 02:39:04PM +0100, Sebastian Andrzej Siewior wrote:
>>> * Bjorn Helgaas | 2016-01-06 16:18:27 [-0600]:
>>>
>>>> Hi Bjorn,
>>>
>>>>> diff --git a/drivers/pci/host/pci-dra7xx.c b/drivers/pci/host/pci-dra7xx.c
>>>>> index 8c36880..0415192 100644
>>>>> --- a/drivers/pci/host/pci-dra7xx.c
>>>>> +++ b/drivers/pci/host/pci-dra7xx.c
>>>>> @@ -301,8 +301,19 @@ static int __init dra7xx_add_pcie_port(struct
>>>>> dra7xx_pcie *dra7xx,
>>>>>           return -EINVAL;
>>>>>       }
>>>>>
>>>>> +    /*
>>>>> +     * Mark dra7xx_pcie_msi IRQ as IRQF_NO_THREAD
>>>>> +     * On -RT and if kernel is booting with "threadirqs" cmd line parameter
>>>>> +     * the dra7xx_pcie_msi_irq_handler() will be forced threaded but,
>>>>> +     * in the same time, it's IRQ dispatcher and calls generic_handle_irq(),
>>>>> +     * which, in turn, will be resolved to handle_simple_irq() call.
>>>>> +     * The handle_simple_irq() expected to be called with IRQ disabled, as
>>>>> +     * result kernle will display warning:
>>>>> +     * "irq XXX handler YYY+0x0/0x14 enabled interrupts".
>>>>> +     */
>>>
>>> could you _please_ remove this coment? This kind of comment (if at all)
>>> should be part of the commit message (which is the case more or less).
>>
>> IIRC, Grygorii specifically wanted to keep this comment in dra7xx, but
> 
> True.
> 
>> I do agree that this level of detail is more appropriate for a changelog.
>>
>> If Grygorii and Kishon don't object, I can update the patch to remove it.
> 
> But no objections from my side. Thanks a lot.

I don't have any objections.

Thanks
Kishon

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v3] PCI: hosts: mark pcie/pci (msi) irq cascade handler as IRQF_NO_THREAD
  2016-01-14  6:19         ` Kishon Vijay Abraham I
@ 2016-01-15 18:31           ` Bjorn Helgaas
  0 siblings, 0 replies; 8+ messages in thread
From: Bjorn Helgaas @ 2016-01-15 18:31 UTC (permalink / raw)
  To: Kishon Vijay Abraham I
  Cc: Grygorii Strashko, Sebastian Andrzej Siewior, linux-pci,
	Bjorn Helgaas, tony, nsekhar, linux-arm-kernel,
	linux-samsung-soc, linux-tegra, linux-sh, linux-omap,
	linux-kernel, Jingoo Han, Kukjin Kim, Krzysztof Kozlowski,
	Richard Zhu, Lucas Stach, Thierry Reding, Stephen Warren,
	Alexandre Courbot, Simon Horman, Pratyush Anand, Michal Simek,
	Sören Brinkmann

On Thu, Jan 14, 2016 at 11:49:24AM +0530, Kishon Vijay Abraham I wrote:
> Hi,
> 
> On Thursday 14 January 2016 12:18 AM, Grygorii Strashko wrote:
> > On 01/13/2016 07:50 PM, Bjorn Helgaas wrote:
> >> On Wed, Jan 13, 2016 at 02:39:04PM +0100, Sebastian Andrzej Siewior wrote:
> >>> * Bjorn Helgaas | 2016-01-06 16:18:27 [-0600]:
> >>>
> >>>> Hi Bjorn,
> >>>
> >>>>> diff --git a/drivers/pci/host/pci-dra7xx.c b/drivers/pci/host/pci-dra7xx.c
> >>>>> index 8c36880..0415192 100644
> >>>>> --- a/drivers/pci/host/pci-dra7xx.c
> >>>>> +++ b/drivers/pci/host/pci-dra7xx.c
> >>>>> @@ -301,8 +301,19 @@ static int __init dra7xx_add_pcie_port(struct
> >>>>> dra7xx_pcie *dra7xx,
> >>>>>           return -EINVAL;
> >>>>>       }
> >>>>>
> >>>>> +    /*
> >>>>> +     * Mark dra7xx_pcie_msi IRQ as IRQF_NO_THREAD
> >>>>> +     * On -RT and if kernel is booting with "threadirqs" cmd line parameter
> >>>>> +     * the dra7xx_pcie_msi_irq_handler() will be forced threaded but,
> >>>>> +     * in the same time, it's IRQ dispatcher and calls generic_handle_irq(),
> >>>>> +     * which, in turn, will be resolved to handle_simple_irq() call.
> >>>>> +     * The handle_simple_irq() expected to be called with IRQ disabled, as
> >>>>> +     * result kernle will display warning:
> >>>>> +     * "irq XXX handler YYY+0x0/0x14 enabled interrupts".
> >>>>> +     */
> >>>
> >>> could you _please_ remove this coment? This kind of comment (if at all)
> >>> should be part of the commit message (which is the case more or less).
> >>
> >> IIRC, Grygorii specifically wanted to keep this comment in dra7xx, but
> > 
> > True.
> > 
> >> I do agree that this level of detail is more appropriate for a changelog.
> >>
> >> If Grygorii and Kishon don't object, I can update the patch to remove it.
> > 
> > But no objections from my side. Thanks a lot.
> 
> I don't have any objections.

OK, I dropped it, thanks guys!

Bjorn

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2016-01-15 18:31 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-12-10 19:18 [PATCH v3] PCI: hosts: mark pcie/pci (msi) irq cascade handler as IRQF_NO_THREAD Grygorii Strashko
2016-01-06 22:18 ` Bjorn Helgaas
2016-01-13 13:39   ` Sebastian Andrzej Siewior
2016-01-13 17:50     ` Bjorn Helgaas
2016-01-13 18:48       ` Grygorii Strashko
2016-01-14  6:19         ` Kishon Vijay Abraham I
2016-01-15 18:31           ` Bjorn Helgaas
2016-01-07  9:18 ` Lucas Stach

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).