^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /// Since commit 1c6c69525b40 ("genirq: Reject bogus threaded irq requests")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) /// threaded IRQs without a primary handler need to be requested with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) /// IRQF_ONESHOT, otherwise the request will fail.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) ///
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) /// So pass the IRQF_ONESHOT flag in this case.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) ///
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) //
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) // Confidence: Moderate
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) // Comments:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) // Options: --no-includes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) virtual patch
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) virtual context
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) virtual org
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) virtual report
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) @r1@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) expression dev, irq, thread_fn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) position p;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) @@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) (
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) request_threaded_irq@p(irq, NULL, thread_fn,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) (
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) IRQF_ONESHOT | ...
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) IRQF_ONESHOT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) , ...)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) devm_request_threaded_irq@p(dev, irq, NULL, thread_fn,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) (
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) IRQF_ONESHOT | ...
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) IRQF_ONESHOT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) , ...)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) @r2@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) expression dev, irq, thread_fn, flags, e;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) position p != r1.p;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) @@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) (
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) flags = IRQF_ONESHOT | ...
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) flags |= IRQF_ONESHOT | ...
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) ... when != flags = e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) (
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) request_threaded_irq@p(irq, NULL, thread_fn, flags, ...);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) devm_request_threaded_irq@p(dev, irq, NULL, thread_fn, flags, ...);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) @depends on patch@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) expression dev, irq, thread_fn, flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) position p != {r1.p,r2.p};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) @@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) (
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) request_threaded_irq@p(irq, NULL, thread_fn,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) (
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) -0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) +IRQF_ONESHOT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) -flags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) +flags | IRQF_ONESHOT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) , ...)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) devm_request_threaded_irq@p(dev, irq, NULL, thread_fn,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) (
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) -0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) +IRQF_ONESHOT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) -flags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) +flags | IRQF_ONESHOT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) , ...)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) @depends on context@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) expression dev, irq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) position p != {r1.p,r2.p};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) @@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) (
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) *request_threaded_irq@p(irq, NULL, ...)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) *devm_request_threaded_irq@p(dev, irq, NULL, ...)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) @match depends on report || org@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) expression dev, irq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) position p != {r1.p,r2.p};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) @@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) (
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) request_threaded_irq@p(irq, NULL, ...)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) devm_request_threaded_irq@p(dev, irq, NULL, ...)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) @script:python depends on org@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) p << match.p;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) @@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) msg = "ERROR: Threaded IRQ with no primary handler requested without IRQF_ONESHOT"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) coccilib.org.print_todo(p[0],msg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) @script:python depends on report@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) p << match.p;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) @@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) msg = "ERROR: Threaded IRQ with no primary handler requested without IRQF_ONESHOT"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) coccilib.report.print_report(p[0],msg)