Messages in this thread Patch in this message | | | Date | Tue, 22 Sep 2015 19:28:23 +0200 | From | Valentin Rothberg <> | Subject | Re: drivers/power/wm831x_power.c:569:7-27: ERROR: Threaded IRQ with no primary handler requested without IRQF_ONESHOT |
| |
Hi Sasha,
Julia forwarded the report (see below) to me. Unless IRQCHIP_ONESHOT_SAFE is set, requesting a threaded IRQ will always fail when the primary handler is set to NULL. In some cases there's a potential to run into stack overflows.
I attached a patch that fixes the issue.
Kind regards, Valentin
---------- Forwarded message ---------- Date: Tue, 22 Sep 2015 21:42:18 +0800 From: kbuild test robot <fengguang.wu@intel.com> To: kbuild@01.org Cc: Julia Lawall <julia.lawall@lip6.fr> Subject: drivers/power/wm831x_power.c:569:7-27: ERROR: Threaded IRQ with no primary handler requested without IRQF_ONESHOT
TO: Sasha Levin <sasha.levin@oracle.com> CC: kbuild-all@01.org CC: Andrew Morton <akpm@linux-foundation.org> CC: Linux Memory Management List <linux-mm@kvack.org>
Hi Sasha,
First bad commit (maybe != root cause):
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: bcee19f424a0d8c26ecf2607b73c690802658b29 commit: 71458cfc782eafe4b27656e078d379a34e472adf kernel: add support for gcc 5 date: 11 months ago :::::: branch date: 12 hours ago :::::: commit date: 11 months ago
>> drivers/power/wm831x_power.c:569:7-27: ERROR: Threaded IRQ with no primary handler requested without IRQF_ONESHOT drivers/power/wm831x_power.c:579:7-27: ERROR: Threaded IRQ with no primary handler requested without IRQF_ONESHOT drivers/power/wm831x_power.c:592:8-28: ERROR: Threaded IRQ with no primary handler requested without IRQF_ONESHOT -- >> drivers/power/88pm860x_battery.c:243:1-4: WARNING: end returns can be simpified if negative or 0 value
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git git remote update linus git checkout 71458cfc782eafe4b27656e078d379a34e472adf vim +569 drivers/power/wm831x_power.c
35c3ae5e Mark Brown 2011-08-16 553 if (ret < 0) 35c3ae5e Mark Brown 2011-08-16 554 goto err_wall; 35c3ae5e Mark Brown 2011-08-16 555 power->have_battery = ret & WM831X_CHG_ENA; 35c3ae5e Mark Brown 2011-08-16 556 35c3ae5e Mark Brown 2011-08-16 557 if (power->have_battery) { 35c3ae5e Mark Brown 2011-08-16 558 battery->name = power->battery_name; 35c3ae5e Mark Brown 2011-08-16 559 battery->properties = wm831x_bat_props; 35c3ae5e Mark Brown 2011-08-16 560 battery->num_properties = ARRAY_SIZE(wm831x_bat_props); 35c3ae5e Mark Brown 2011-08-16 561 battery->get_property = wm831x_bat_get_prop; 35c3ae5e Mark Brown 2011-08-16 562 battery->use_for_apm = 1; 35c3ae5e Mark Brown 2011-08-16 563 ret = power_supply_register(&pdev->dev, battery); 35c3ae5e Mark Brown 2011-08-16 564 if (ret) 35c3ae5e Mark Brown 2011-08-16 565 goto err_usb; 35c3ae5e Mark Brown 2011-08-16 566 } 3961f7c3 Mark Brown 2009-08-10 567 cd99758b Mark Brown 2012-05-14 568 irq = wm831x_irq(wm831x, platform_get_irq_byname(pdev, "SYSLO")); b5874f33 Mark Brown 2010-03-10 @569 ret = request_threaded_irq(irq, NULL, wm831x_syslo_irq, b5874f33 Mark Brown 2010-03-10 570 IRQF_TRIGGER_RISING, "System power low", 3961f7c3 Mark Brown 2009-08-10 571 power); 3961f7c3 Mark Brown 2009-08-10 572 if (ret != 0) { 3961f7c3 Mark Brown 2009-08-10 573 dev_err(&pdev->dev, "Failed to request SYSLO IRQ %d: %d\n", 3961f7c3 Mark Brown 2009-08-10 574 irq, ret); 35c3ae5e Mark Brown 2011-08-16 575 goto err_battery; 3961f7c3 Mark Brown 2009-08-10 576 } 3961f7c3 Mark Brown 2009-08-10 577
:::::: The code at line 569 was first introduced by commit :::::: b5874f33bbaf00586d05de37706491ee37057e11 wm831x_power: Use genirq
:::::: TO: Mark Brown <broonie@opensource.wolfsonmicro.com> :::::: CC: Anton Vorontsov <cbouatmailru@gmail.com>
--- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation From bceb7cace76aba9212db56be939bfecaacb75bc2 Mon Sep 17 00:00:00 2001 From: Valentin Rothberg <valentinrothberg@gmail.com> Date: Tue, 22 Sep 2015 19:00:40 +0200 Subject: [PATCH] wm831x_power: Use IRQF_ONESHOT to request threaded IRQs
Since commit 1c6c69525b40 ("genirq: Reject bogus threaded irq requests") threaded IRQs without a primary handler need to be requested with IRQF_ONESHOT, otherwise the request will fail.
scripts/coccinelle/misc/irqf_oneshot.cocci detected this issue.
Fixes: b5874f33bbaf ("wm831x_power: Use genirq") Signed-off-by: Valentin Rothberg <valentinrothberg@gmail.com> --- drivers/power/wm831x_power.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/power/wm831x_power.c b/drivers/power/wm831x_power.c index db11ae6599f3..25f8b3409935 100644 --- a/drivers/power/wm831x_power.c +++ b/drivers/power/wm831x_power.c @@ -572,7 +572,7 @@ static int wm831x_power_probe(struct platform_device *pdev) irq = wm831x_irq(wm831x, platform_get_irq_byname(pdev, "SYSLO")); ret = request_threaded_irq(irq, NULL, wm831x_syslo_irq, - IRQF_TRIGGER_RISING, "System power low", + IRQF_TRIGGER_RISING | IRQF_ONESHOT, "System power low", power); if (ret != 0) { dev_err(&pdev->dev, "Failed to request SYSLO IRQ %d: %d\n", @@ -582,7 +582,7 @@ static int wm831x_power_probe(struct platform_device *pdev) irq = wm831x_irq(wm831x, platform_get_irq_byname(pdev, "PWR SRC")); ret = request_threaded_irq(irq, NULL, wm831x_pwr_src_irq, - IRQF_TRIGGER_RISING, "Power source", + IRQF_TRIGGER_RISING | IRQF_ONESHOT, "Power source", power); if (ret != 0) { dev_err(&pdev->dev, "Failed to request PWR SRC IRQ %d: %d\n", @@ -595,7 +595,7 @@ static int wm831x_power_probe(struct platform_device *pdev) platform_get_irq_byname(pdev, wm831x_bat_irqs[i])); ret = request_threaded_irq(irq, NULL, wm831x_bat_irq, - IRQF_TRIGGER_RISING, + IRQF_TRIGGER_RISING | IRQF_ONESHOT, wm831x_bat_irqs[i], power); if (ret != 0) { -- 1.9.1
| |