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