162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci/// Since commit 1c6c69525b40 ("genirq: Reject bogus threaded irq requests") 362306a36Sopenharmony_ci/// threaded IRQs without a primary handler need to be requested with 462306a36Sopenharmony_ci/// IRQF_ONESHOT, otherwise the request will fail. 562306a36Sopenharmony_ci/// 662306a36Sopenharmony_ci/// So pass the IRQF_ONESHOT flag in this case. 762306a36Sopenharmony_ci/// 862306a36Sopenharmony_ci// 962306a36Sopenharmony_ci// Confidence: Moderate 1062306a36Sopenharmony_ci// Comments: 1162306a36Sopenharmony_ci// Options: --no-includes 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_civirtual patch 1462306a36Sopenharmony_civirtual context 1562306a36Sopenharmony_civirtual org 1662306a36Sopenharmony_civirtual report 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci@r1@ 1962306a36Sopenharmony_ciexpression dev, irq, thread_fn; 2062306a36Sopenharmony_ciposition p; 2162306a36Sopenharmony_ci@@ 2262306a36Sopenharmony_ci( 2362306a36Sopenharmony_cirequest_threaded_irq@p(irq, NULL, thread_fn, 2462306a36Sopenharmony_ci( 2562306a36Sopenharmony_ciIRQF_ONESHOT | ... 2662306a36Sopenharmony_ci| 2762306a36Sopenharmony_ciIRQF_ONESHOT 2862306a36Sopenharmony_ci) 2962306a36Sopenharmony_ci, ...) 3062306a36Sopenharmony_ci| 3162306a36Sopenharmony_cidevm_request_threaded_irq@p(dev, irq, NULL, thread_fn, 3262306a36Sopenharmony_ci( 3362306a36Sopenharmony_ciIRQF_ONESHOT | ... 3462306a36Sopenharmony_ci| 3562306a36Sopenharmony_ciIRQF_ONESHOT 3662306a36Sopenharmony_ci) 3762306a36Sopenharmony_ci, ...) 3862306a36Sopenharmony_ci) 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci@r2@ 4162306a36Sopenharmony_ciexpression dev, irq, thread_fn, flags, e; 4262306a36Sopenharmony_ciposition p != r1.p; 4362306a36Sopenharmony_ci@@ 4462306a36Sopenharmony_ci( 4562306a36Sopenharmony_ciflags = IRQF_ONESHOT | ... 4662306a36Sopenharmony_ci| 4762306a36Sopenharmony_ciflags |= IRQF_ONESHOT | ... 4862306a36Sopenharmony_ci) 4962306a36Sopenharmony_ci... when != flags = e 5062306a36Sopenharmony_ci( 5162306a36Sopenharmony_cirequest_threaded_irq@p(irq, NULL, thread_fn, flags, ...); 5262306a36Sopenharmony_ci| 5362306a36Sopenharmony_cidevm_request_threaded_irq@p(dev, irq, NULL, thread_fn, flags, ...); 5462306a36Sopenharmony_ci) 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci@depends on patch@ 5762306a36Sopenharmony_ciexpression dev, irq, thread_fn, flags; 5862306a36Sopenharmony_ciposition p != {r1.p,r2.p}; 5962306a36Sopenharmony_ci@@ 6062306a36Sopenharmony_ci( 6162306a36Sopenharmony_cirequest_threaded_irq@p(irq, NULL, thread_fn, 6262306a36Sopenharmony_ci( 6362306a36Sopenharmony_ci-0 6462306a36Sopenharmony_ci+IRQF_ONESHOT 6562306a36Sopenharmony_ci| 6662306a36Sopenharmony_ci-flags 6762306a36Sopenharmony_ci+flags | IRQF_ONESHOT 6862306a36Sopenharmony_ci) 6962306a36Sopenharmony_ci, ...) 7062306a36Sopenharmony_ci| 7162306a36Sopenharmony_cidevm_request_threaded_irq@p(dev, irq, NULL, thread_fn, 7262306a36Sopenharmony_ci( 7362306a36Sopenharmony_ci-0 7462306a36Sopenharmony_ci+IRQF_ONESHOT 7562306a36Sopenharmony_ci| 7662306a36Sopenharmony_ci-flags 7762306a36Sopenharmony_ci+flags | IRQF_ONESHOT 7862306a36Sopenharmony_ci) 7962306a36Sopenharmony_ci, ...) 8062306a36Sopenharmony_ci) 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci@depends on context@ 8362306a36Sopenharmony_ciexpression dev, irq; 8462306a36Sopenharmony_ciposition p != {r1.p,r2.p}; 8562306a36Sopenharmony_ci@@ 8662306a36Sopenharmony_ci( 8762306a36Sopenharmony_ci*request_threaded_irq@p(irq, NULL, ...) 8862306a36Sopenharmony_ci| 8962306a36Sopenharmony_ci*devm_request_threaded_irq@p(dev, irq, NULL, ...) 9062306a36Sopenharmony_ci) 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_ci@match depends on report || org@ 9462306a36Sopenharmony_ciexpression dev, irq; 9562306a36Sopenharmony_ciposition p != {r1.p,r2.p}; 9662306a36Sopenharmony_ci@@ 9762306a36Sopenharmony_ci( 9862306a36Sopenharmony_cirequest_threaded_irq@p(irq, NULL, ...) 9962306a36Sopenharmony_ci| 10062306a36Sopenharmony_cidevm_request_threaded_irq@p(dev, irq, NULL, ...) 10162306a36Sopenharmony_ci) 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_ci@script:python depends on org@ 10462306a36Sopenharmony_cip << match.p; 10562306a36Sopenharmony_ci@@ 10662306a36Sopenharmony_cimsg = "WARNING: Threaded IRQ with no primary handler requested without IRQF_ONESHOT (unless it is nested IRQ)" 10762306a36Sopenharmony_cicoccilib.org.print_todo(p[0],msg) 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_ci@script:python depends on report@ 11062306a36Sopenharmony_cip << match.p; 11162306a36Sopenharmony_ci@@ 11262306a36Sopenharmony_cimsg = "WARNING: Threaded IRQ with no primary handler requested without IRQF_ONESHOT (unless it is nested IRQ)" 11362306a36Sopenharmony_cicoccilib.report.print_report(p[0],msg) 114