0001 // SPDX-License-Identifier: GPL-2.0
0002 /// Since commit 1c6c69525b40 ("genirq: Reject bogus threaded irq requests")
0003 /// threaded IRQs without a primary handler need to be requested with
0004 /// IRQF_ONESHOT, otherwise the request will fail.
0005 ///
0006 /// So pass the IRQF_ONESHOT flag in this case.
0007 ///
0008 //
0009 // Confidence: Moderate
0010 // Comments:
0011 // Options: --no-includes
0012
0013 virtual patch
0014 virtual context
0015 virtual org
0016 virtual report
0017
0018 @r1@
0019 expression dev, irq, thread_fn;
0020 position p;
0021 @@
0022 (
0023 request_threaded_irq@p(irq, NULL, thread_fn,
0024 (
0025 IRQF_ONESHOT | ...
0026 |
0027 IRQF_ONESHOT
0028 )
0029 , ...)
0030 |
0031 devm_request_threaded_irq@p(dev, irq, NULL, thread_fn,
0032 (
0033 IRQF_ONESHOT | ...
0034 |
0035 IRQF_ONESHOT
0036 )
0037 , ...)
0038 )
0039
0040 @r2@
0041 expression dev, irq, thread_fn, flags, e;
0042 position p != r1.p;
0043 @@
0044 (
0045 flags = IRQF_ONESHOT | ...
0046 |
0047 flags |= IRQF_ONESHOT | ...
0048 )
0049 ... when != flags = e
0050 (
0051 request_threaded_irq@p(irq, NULL, thread_fn, flags, ...);
0052 |
0053 devm_request_threaded_irq@p(dev, irq, NULL, thread_fn, flags, ...);
0054 )
0055
0056 @depends on patch@
0057 expression dev, irq, thread_fn, flags;
0058 position p != {r1.p,r2.p};
0059 @@
0060 (
0061 request_threaded_irq@p(irq, NULL, thread_fn,
0062 (
0063 -0
0064 +IRQF_ONESHOT
0065 |
0066 -flags
0067 +flags | IRQF_ONESHOT
0068 )
0069 , ...)
0070 |
0071 devm_request_threaded_irq@p(dev, irq, NULL, thread_fn,
0072 (
0073 -0
0074 +IRQF_ONESHOT
0075 |
0076 -flags
0077 +flags | IRQF_ONESHOT
0078 )
0079 , ...)
0080 )
0081
0082 @depends on context@
0083 expression dev, irq;
0084 position p != {r1.p,r2.p};
0085 @@
0086 (
0087 *request_threaded_irq@p(irq, NULL, ...)
0088 |
0089 *devm_request_threaded_irq@p(dev, irq, NULL, ...)
0090 )
0091
0092
0093 @match depends on report || org@
0094 expression dev, irq;
0095 position p != {r1.p,r2.p};
0096 @@
0097 (
0098 request_threaded_irq@p(irq, NULL, ...)
0099 |
0100 devm_request_threaded_irq@p(dev, irq, NULL, ...)
0101 )
0102
0103 @script:python depends on org@
0104 p << match.p;
0105 @@
0106 msg = "WARNING: Threaded IRQ with no primary handler requested without IRQF_ONESHOT (unless it is nested IRQ)"
0107 coccilib.org.print_todo(p[0],msg)
0108
0109 @script:python depends on report@
0110 p << match.p;
0111 @@
0112 msg = "WARNING: Threaded IRQ with no primary handler requested without IRQF_ONESHOT (unless it is nested IRQ)"
0113 coccilib.report.print_report(p[0],msg)