spi: tegra20: Fix missing IRQ check in tegra_slink_probe
Subsystems (3)
PATCH v2 1/1 spi: tegra20: Fix missing IRQ check in tegra_slink_probe
This func misses checking for platform_get_irq()'s call and may passes the negative error codes to request_threaded_irq(), which takes unsigned IRQ #, causing it to fail with -EINVAL, overriding an original error code. Stop calling request_threaded_irq() with invalid IRQ #s.
---
Changes in v2:
- fix wrong func name in commit message.
--- drivers/spi/spi-tegra20-slink.c | 5 +++++ 1 file changed, 5 insertions(+)
drivers/spi/spi-tegra20-slink.c +5 -0
@@ -1100,6 +1100,11 @@ static int tegra_slink_probe(struct platform_device *pdev)reset_control_deassert (tspi->rst); spi_irq =platform_get_irq (pdev,0 ); +if (spi_irq <0 ) { +dev_err (&pdev->dev,"Unable to request IRQ: %d\n" , ret); + ret = spi_irq; + goto exit_pm_put; + } tspi->irq = spi_irq; ret = request_threaded_irq(tspi->irq, tegra_slink_isr, tegra_slink_isr_thread, IRQF_ONESHOT,
Signature · 1 line
2.17.1
28.01.2022 19:18, Miaoqian Lin пишет:
Quoted 6 lines
This func misses checking for platform_get_irq()'s call and may passes the negative error codes to
request_threaded_irq(), which takes unsigned IRQ #, causing it to fail with-EINVAL, overriding an original error code. Stop callingrequest_threaded_irq()with invalid IRQ #s.Fixes e4bb903fda0e ("spi: tegra20-slink: Improve runtime PM usage")
I don't see how this patch is related to e4bb903fda0e. This tag is incorrect and should be removed.
Quoted 13 lines
Signed-off-by Miaoqian Lin <[email protected]>---
Changes in v2:
- fix wrong func name in commit message.--- drivers/spi/spi-tegra20-slink.c | 5 +++++ 1 file changed, 5 insertions(+)drivers/spi/spi-tegra20-slink.c +0
-0
drivers/spi/spi-tegra20-slink.c static int tegra_slink_probe(struct platform_device *pdev) · line 1104
Quoted 5 lines
drivers/spi/spi-tegra20-slink.c +2
-0@@ -1100,6 +1100,11 @@ static int tegra_slink_probe(struct platform_device *pdev)reset_control_deassert (tspi->rst); spi_irq =platform_get_irq (pdev,0 ); +if (spi_irq <0 ) { +dev_err (&pdev->dev,"Unable to request IRQ: %d\n" , ret);
The "ret" isn't assigned to spi_irq in the error message.
Moreover, platform_get_irq() already prints error message [1] by itself. The duplicated message is unnecessary and should be removed.
[1]
https://elixir.bootlin.com/linux/v5.17-rc1/source/drivers/base/platform.c#L256
PATCH v3 1/1 spi: tegra20: Fix missing IRQ check in tegra_slink_probe
This func misses checking for platform_get_irq()'s call and may passes the negative error codes to request_threaded_irq(), which takes unsigned IRQ #, causing it to fail with -EINVAL, overriding an original error code. Stop calling request_threaded_irq() with invalid IRQ #s.
---
Changes in v2:
- fix wrong func name in commit message.
Changes in v3:
- fix Fixes tag info.
- remove redundant error message.
--- drivers/spi/spi-tegra20-slink.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/spi/spi-tegra20-slink.c +4 -0
@@ -1100,6 +1100,10 @@ static int tegra_slink_probe(struct platform_device *pdev)reset_control_deassert (tspi->rst); spi_irq =platform_get_irq (pdev,0 ); +if (spi_irq <0 ) { + ret = spi_irq; + goto exit_pm_put; + } tspi->irq = spi_irq; ret = request_threaded_irq(tspi->irq, tegra_slink_isr, tegra_slink_isr_thread, IRQF_ONESHOT,
Signature · 1 line
2.17.1