1
2
3
4
5
6
7
8
9#define pr_fmt(fmt) "genirq: " fmt
10
11#include <linux/irq.h>
12#include <linux/kthread.h>
13#include <linux/module.h>
14#include <linux/random.h>
15#include <linux/interrupt.h>
16#include <linux/irqdomain.h>
17#include <linux/slab.h>
18#include <linux/sched.h>
19#include <linux/sched/rt.h>
20#include <linux/sched/task.h>
21#include <linux/sched/isolation.h>
22#include <uapi/linux/sched/types.h>
23#include <linux/task_work.h>
24
25#include "internals.h"
26
27#if defined(CONFIG_IRQ_FORCED_THREADING) && !defined(CONFIG_PREEMPT_RT)
28__read_mostly bool force_irqthreads;
29EXPORT_SYMBOL_GPL(force_irqthreads);
30
31static int __init setup_forced_irqthreads(char *arg)
32{
33 force_irqthreads = true;
34 return 0;
35}
36early_param("threadirqs", setup_forced_irqthreads);
37#endif
38
39static void __synchronize_hardirq(struct irq_desc *desc, bool sync_chip)
40{
41 struct irq_data *irqd = irq_desc_get_irq_data(desc);
42 bool inprogress;
43
44 do {
45 unsigned long flags;
46
47
48
49
50
51 while (irqd_irq_inprogress(&desc->irq_data))
52 cpu_relax();
53
54
55 raw_spin_lock_irqsave(&desc->lock, flags);
56 inprogress = irqd_irq_inprogress(&desc->irq_data);
57
58
59
60
61
62
63 if (!inprogress && sync_chip) {
64
65
66
67
68 __irq_get_irqchip_state(irqd, IRQCHIP_STATE_ACTIVE,
69 &inprogress);
70 }
71 raw_spin_unlock_irqrestore(&desc->lock, flags);
72
73
74 } while (inprogress);
75}
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99bool synchronize_hardirq(unsigned int irq)
100{
101 struct irq_desc *desc = irq_to_desc(irq);
102
103 if (desc) {
104 __synchronize_hardirq(desc, false);
105 return !atomic_read(&desc->threads_active);
106 }
107
108 return true;
109}
110EXPORT_SYMBOL(synchronize_hardirq);
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127void synchronize_irq(unsigned int irq)
128{
129 struct irq_desc *desc = irq_to_desc(irq);
130
131 if (desc) {
132 __synchronize_hardirq(desc, true);
133
134
135
136
137
138 wait_event(desc->wait_for_threads,
139 !atomic_read(&desc->threads_active));
140 }
141}
142EXPORT_SYMBOL(synchronize_irq);
143
144#ifdef CONFIG_SMP
145cpumask_var_t irq_default_affinity;
146
147static bool __irq_can_set_affinity(struct irq_desc *desc)
148{
149 if (!desc || !irqd_can_balance(&desc->irq_data) ||
150 !desc->irq_data.chip || !desc->irq_data.chip->irq_set_affinity)
151 return false;
152 return true;
153}
154
155
156
157
158
159
160int irq_can_set_affinity(unsigned int irq)
161{
162 return __irq_can_set_affinity(irq_to_desc(irq));
163}
164
165
166
167
168
169
170
171
172bool irq_can_set_affinity_usr(unsigned int irq)
173{
174 struct irq_desc *desc = irq_to_desc(irq);
175
176 return __irq_can_set_affinity(desc) &&
177 !irqd_affinity_is_managed(&desc->irq_data);
178}
179
180
181
182
183
184
185
186
187
188
189void irq_set_thread_affinity(struct irq_desc *desc)
190{
191 struct irqaction *action;
192
193 for_each_action_of_desc(desc, action)
194 if (action->thread)
195 set_bit(IRQTF_AFFINITY, &action->thread_flags);
196}
197
198#ifdef CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK
199static void irq_validate_effective_affinity(struct irq_data *data)
200{
201 const struct cpumask *m = irq_data_get_effective_affinity_mask(data);
202 struct irq_chip *chip = irq_data_get_irq_chip(data);
203
204 if (!cpumask_empty(m))
205 return;
206 pr_warn_once("irq_chip %s did not update eff. affinity mask of irq %u\n",
207 chip->name, data->irq);
208}
209
210static inline void irq_init_effective_affinity(struct irq_data *data,
211 const struct cpumask *mask)
212{
213 cpumask_copy(irq_data_get_effective_affinity_mask(data), mask);
214}
215#else
216static inline void irq_validate_effective_affinity(struct irq_data *data) { }
217static inline void irq_init_effective_affinity(struct irq_data *data,
218 const struct cpumask *mask) { }
219#endif
220
221int irq_do_set_affinity(struct irq_data *data, const struct cpumask *mask,
222 bool force)
223{
224 struct irq_desc *desc = irq_data_to_desc(data);
225 struct irq_chip *chip = irq_data_get_irq_chip(data);
226 int ret;
227
228 if (!chip || !chip->irq_set_affinity)
229 return -EINVAL;
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250 if (irqd_affinity_is_managed(data) &&
251 housekeeping_enabled(HK_FLAG_MANAGED_IRQ)) {
252 const struct cpumask *hk_mask, *prog_mask;
253
254 static DEFINE_RAW_SPINLOCK(tmp_mask_lock);
255 static struct cpumask tmp_mask;
256
257 hk_mask = housekeeping_cpumask(HK_FLAG_MANAGED_IRQ);
258
259 raw_spin_lock(&tmp_mask_lock);
260 cpumask_and(&tmp_mask, mask, hk_mask);
261 if (!cpumask_intersects(&tmp_mask, cpu_online_mask))
262 prog_mask = mask;
263 else
264 prog_mask = &tmp_mask;
265 ret = chip->irq_set_affinity(data, prog_mask, force);
266 raw_spin_unlock(&tmp_mask_lock);
267 } else {
268 ret = chip->irq_set_affinity(data, mask, force);
269 }
270 switch (ret) {
271 case IRQ_SET_MASK_OK:
272 case IRQ_SET_MASK_OK_DONE:
273 cpumask_copy(desc->irq_common_data.affinity, mask);
274 fallthrough;
275 case IRQ_SET_MASK_OK_NOCOPY:
276 irq_validate_effective_affinity(data);
277 irq_set_thread_affinity(desc);
278 ret = 0;
279 }
280
281 return ret;
282}
283
284#ifdef CONFIG_GENERIC_PENDING_IRQ
285static inline int irq_set_affinity_pending(struct irq_data *data,
286 const struct cpumask *dest)
287{
288 struct irq_desc *desc = irq_data_to_desc(data);
289
290 irqd_set_move_pending(data);
291 irq_copy_pending(desc, dest);
292 return 0;
293}
294#else
295static inline int irq_set_affinity_pending(struct irq_data *data,
296 const struct cpumask *dest)
297{
298 return -EBUSY;
299}
300#endif
301
302static int irq_try_set_affinity(struct irq_data *data,
303 const struct cpumask *dest, bool force)
304{
305 int ret = irq_do_set_affinity(data, dest, force);
306
307
308
309
310
311
312 if (ret == -EBUSY && !force)
313 ret = irq_set_affinity_pending(data, dest);
314 return ret;
315}
316
317static bool irq_set_affinity_deactivated(struct irq_data *data,
318 const struct cpumask *mask, bool force)
319{
320 struct irq_desc *desc = irq_data_to_desc(data);
321
322
323
324
325
326
327
328
329
330
331 if (!IS_ENABLED(CONFIG_IRQ_DOMAIN_HIERARCHY) ||
332 irqd_is_activated(data) || !irqd_affinity_on_activate(data))
333 return false;
334
335 cpumask_copy(desc->irq_common_data.affinity, mask);
336 irq_init_effective_affinity(data, mask);
337 irqd_set(data, IRQD_AFFINITY_SET);
338 return true;
339}
340
341int irq_set_affinity_locked(struct irq_data *data, const struct cpumask *mask,
342 bool force)
343{
344 struct irq_chip *chip = irq_data_get_irq_chip(data);
345 struct irq_desc *desc = irq_data_to_desc(data);
346 int ret = 0;
347
348 if (!chip || !chip->irq_set_affinity)
349 return -EINVAL;
350
351 if (irq_set_affinity_deactivated(data, mask, force))
352 return 0;
353
354 if (irq_can_move_pcntxt(data) && !irqd_is_setaffinity_pending(data)) {
355 ret = irq_try_set_affinity(data, mask, force);
356 } else {
357 irqd_set_move_pending(data);
358 irq_copy_pending(desc, mask);
359 }
360
361 if (desc->affinity_notify) {
362 kref_get(&desc->affinity_notify->kref);
363 if (!schedule_work(&desc->affinity_notify->work)) {
364
365 kref_put(&desc->affinity_notify->kref,
366 desc->affinity_notify->release);
367 }
368 }
369 irqd_set(data, IRQD_AFFINITY_SET);
370
371 return ret;
372}
373
374int __irq_set_affinity(unsigned int irq, const struct cpumask *mask, bool force)
375{
376 struct irq_desc *desc = irq_to_desc(irq);
377 unsigned long flags;
378 int ret;
379
380 if (!desc)
381 return -EINVAL;
382
383 raw_spin_lock_irqsave(&desc->lock, flags);
384 ret = irq_set_affinity_locked(irq_desc_get_irq_data(desc), mask, force);
385 raw_spin_unlock_irqrestore(&desc->lock, flags);
386 return ret;
387}
388
389int irq_set_affinity_hint(unsigned int irq, const struct cpumask *m)
390{
391 unsigned long flags;
392 struct irq_desc *desc = irq_get_desc_lock(irq, &flags, IRQ_GET_DESC_CHECK_GLOBAL);
393
394 if (!desc)
395 return -EINVAL;
396 desc->affinity_hint = m;
397 irq_put_desc_unlock(desc, flags);
398
399 if (m)
400 __irq_set_affinity(irq, m, false);
401 return 0;
402}
403EXPORT_SYMBOL_GPL(irq_set_affinity_hint);
404
405static void irq_affinity_notify(struct work_struct *work)
406{
407 struct irq_affinity_notify *notify =
408 container_of(work, struct irq_affinity_notify, work);
409 struct irq_desc *desc = irq_to_desc(notify->irq);
410 cpumask_var_t cpumask;
411 unsigned long flags;
412
413 if (!desc || !alloc_cpumask_var(&cpumask, GFP_KERNEL))
414 goto out;
415
416 raw_spin_lock_irqsave(&desc->lock, flags);
417 if (irq_move_pending(&desc->irq_data))
418 irq_get_pending(cpumask, desc);
419 else
420 cpumask_copy(cpumask, desc->irq_common_data.affinity);
421 raw_spin_unlock_irqrestore(&desc->lock, flags);
422
423 notify->notify(notify, cpumask);
424
425 free_cpumask_var(cpumask);
426out:
427 kref_put(¬ify->kref, notify->release);
428}
429
430
431
432
433
434
435
436
437
438
439
440
441int
442irq_set_affinity_notifier(unsigned int irq, struct irq_affinity_notify *notify)
443{
444 struct irq_desc *desc = irq_to_desc(irq);
445 struct irq_affinity_notify *old_notify;
446 unsigned long flags;
447
448
449 might_sleep();
450
451 if (!desc || desc->istate & IRQS_NMI)
452 return -EINVAL;
453
454
455 if (notify) {
456 notify->irq = irq;
457 kref_init(¬ify->kref);
458 INIT_WORK(¬ify->work, irq_affinity_notify);
459 }
460
461 raw_spin_lock_irqsave(&desc->lock, flags);
462 old_notify = desc->affinity_notify;
463 desc->affinity_notify = notify;
464 raw_spin_unlock_irqrestore(&desc->lock, flags);
465
466 if (old_notify) {
467 if (cancel_work_sync(&old_notify->work)) {
468
469 kref_put(&old_notify->kref, old_notify->release);
470 }
471 kref_put(&old_notify->kref, old_notify->release);
472 }
473
474 return 0;
475}
476EXPORT_SYMBOL_GPL(irq_set_affinity_notifier);
477
478#ifndef CONFIG_AUTO_IRQ_AFFINITY
479
480
481
482int irq_setup_affinity(struct irq_desc *desc)
483{
484 struct cpumask *set = irq_default_affinity;
485 int ret, node = irq_desc_get_node(desc);
486 static DEFINE_RAW_SPINLOCK(mask_lock);
487 static struct cpumask mask;
488
489
490 if (!__irq_can_set_affinity(desc))
491 return 0;
492
493 raw_spin_lock(&mask_lock);
494
495
496
497
498 if (irqd_affinity_is_managed(&desc->irq_data) ||
499 irqd_has_set(&desc->irq_data, IRQD_AFFINITY_SET)) {
500 if (cpumask_intersects(desc->irq_common_data.affinity,
501 cpu_online_mask))
502 set = desc->irq_common_data.affinity;
503 else
504 irqd_clear(&desc->irq_data, IRQD_AFFINITY_SET);
505 }
506
507 cpumask_and(&mask, cpu_online_mask, set);
508 if (cpumask_empty(&mask))
509 cpumask_copy(&mask, cpu_online_mask);
510
511 if (node != NUMA_NO_NODE) {
512 const struct cpumask *nodemask = cpumask_of_node(node);
513
514
515 if (cpumask_intersects(&mask, nodemask))
516 cpumask_and(&mask, &mask, nodemask);
517 }
518 ret = irq_do_set_affinity(&desc->irq_data, &mask, false);
519 raw_spin_unlock(&mask_lock);
520 return ret;
521}
522#else
523
524int irq_setup_affinity(struct irq_desc *desc)
525{
526 return irq_select_affinity(irq_desc_get_irq(desc));
527}
528#endif
529#endif
530
531
532
533
534
535
536
537
538
539
540
541
542
543int irq_set_vcpu_affinity(unsigned int irq, void *vcpu_info)
544{
545 unsigned long flags;
546 struct irq_desc *desc = irq_get_desc_lock(irq, &flags, 0);
547 struct irq_data *data;
548 struct irq_chip *chip;
549 int ret = -ENOSYS;
550
551 if (!desc)
552 return -EINVAL;
553
554 data = irq_desc_get_irq_data(desc);
555 do {
556 chip = irq_data_get_irq_chip(data);
557 if (chip && chip->irq_set_vcpu_affinity)
558 break;
559#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
560 data = data->parent_data;
561#else
562 data = NULL;
563#endif
564 } while (data);
565
566 if (data)
567 ret = chip->irq_set_vcpu_affinity(data, vcpu_info);
568 irq_put_desc_unlock(desc, flags);
569
570 return ret;
571}
572EXPORT_SYMBOL_GPL(irq_set_vcpu_affinity);
573
574void __disable_irq(struct irq_desc *desc)
575{
576 if (!desc->depth++)
577 irq_disable(desc);
578}
579
580static int __disable_irq_nosync(unsigned int irq)
581{
582 unsigned long flags;
583 struct irq_desc *desc = irq_get_desc_buslock(irq, &flags, IRQ_GET_DESC_CHECK_GLOBAL);
584
585 if (!desc)
586 return -EINVAL;
587 __disable_irq(desc);
588 irq_put_desc_busunlock(desc, flags);
589 return 0;
590}
591
592
593
594
595
596
597
598
599
600
601
602
603void disable_irq_nosync(unsigned int irq)
604{
605 __disable_irq_nosync(irq);
606}
607EXPORT_SYMBOL(disable_irq_nosync);
608
609
610
611
612
613
614
615
616
617
618
619
620
621void disable_irq(unsigned int irq)
622{
623 if (!__disable_irq_nosync(irq))
624 synchronize_irq(irq);
625}
626EXPORT_SYMBOL(disable_irq);
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645bool disable_hardirq(unsigned int irq)
646{
647 if (!__disable_irq_nosync(irq))
648 return synchronize_hardirq(irq);
649
650 return false;
651}
652EXPORT_SYMBOL_GPL(disable_hardirq);
653
654
655
656
657
658
659
660
661
662
663
664void disable_nmi_nosync(unsigned int irq)
665{
666 disable_irq_nosync(irq);
667}
668
669void __enable_irq(struct irq_desc *desc)
670{
671 switch (desc->depth) {
672 case 0:
673 err_out:
674 WARN(1, KERN_WARNING "Unbalanced enable for IRQ %d\n",
675 irq_desc_get_irq(desc));
676 break;
677 case 1: {
678 if (desc->istate & IRQS_SUSPENDED)
679 goto err_out;
680
681 irq_settings_set_noprobe(desc);
682
683
684
685
686
687
688
689 irq_startup(desc, IRQ_RESEND, IRQ_START_FORCE);
690 break;
691 }
692 default:
693 desc->depth--;
694 }
695}
696
697
698
699
700
701
702
703
704
705
706
707
708void enable_irq(unsigned int irq)
709{
710 unsigned long flags;
711 struct irq_desc *desc = irq_get_desc_buslock(irq, &flags, IRQ_GET_DESC_CHECK_GLOBAL);
712
713 if (!desc)
714 return;
715 if (WARN(!desc->irq_data.chip,
716 KERN_ERR "enable_irq before setup/request_irq: irq %u\n", irq))
717 goto out;
718
719 __enable_irq(desc);
720out:
721 irq_put_desc_busunlock(desc, flags);
722}
723EXPORT_SYMBOL(enable_irq);
724
725
726
727
728
729
730
731
732
733
734void enable_nmi(unsigned int irq)
735{
736 enable_irq(irq);
737}
738
739static int set_irq_wake_real(unsigned int irq, unsigned int on)
740{
741 struct irq_desc *desc = irq_to_desc(irq);
742 int ret = -ENXIO;
743
744 if (irq_desc_get_chip(desc)->flags & IRQCHIP_SKIP_SET_WAKE)
745 return 0;
746
747 if (desc->irq_data.chip->irq_set_wake)
748 ret = desc->irq_data.chip->irq_set_wake(&desc->irq_data, on);
749
750 return ret;
751}
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772int irq_set_irq_wake(unsigned int irq, unsigned int on)
773{
774 unsigned long flags;
775 struct irq_desc *desc = irq_get_desc_buslock(irq, &flags, IRQ_GET_DESC_CHECK_GLOBAL);
776 int ret = 0;
777
778 if (!desc)
779 return -EINVAL;
780
781
782 if (desc->istate & IRQS_NMI) {
783 ret = -EINVAL;
784 goto out_unlock;
785 }
786
787
788
789
790 if (on) {
791 if (desc->wake_depth++ == 0) {
792 ret = set_irq_wake_real(irq, on);
793 if (ret)
794 desc->wake_depth = 0;
795 else
796 irqd_set(&desc->irq_data, IRQD_WAKEUP_STATE);
797 }
798 } else {
799 if (desc->wake_depth == 0) {
800 WARN(1, "Unbalanced IRQ %d wake disable\n", irq);
801 } else if (--desc->wake_depth == 0) {
802 ret = set_irq_wake_real(irq, on);
803 if (ret)
804 desc->wake_depth = 1;
805 else
806 irqd_clear(&desc->irq_data, IRQD_WAKEUP_STATE);
807 }
808 }
809
810out_unlock:
811 irq_put_desc_busunlock(desc, flags);
812 return ret;
813}
814EXPORT_SYMBOL(irq_set_irq_wake);
815
816
817
818
819
820
821int can_request_irq(unsigned int irq, unsigned long irqflags)
822{
823 unsigned long flags;
824 struct irq_desc *desc = irq_get_desc_lock(irq, &flags, 0);
825 int canrequest = 0;
826
827 if (!desc)
828 return 0;
829
830 if (irq_settings_can_request(desc)) {
831 if (!desc->action ||
832 irqflags & desc->action->flags & IRQF_SHARED)
833 canrequest = 1;
834 }
835 irq_put_desc_unlock(desc, flags);
836 return canrequest;
837}
838
839int __irq_set_trigger(struct irq_desc *desc, unsigned long flags)
840{
841 struct irq_chip *chip = desc->irq_data.chip;
842 int ret, unmask = 0;
843
844 if (!chip || !chip->irq_set_type) {
845
846
847
848
849 pr_debug("No set_type function for IRQ %d (%s)\n",
850 irq_desc_get_irq(desc),
851 chip ? (chip->name ? : "unknown") : "unknown");
852 return 0;
853 }
854
855 if (chip->flags & IRQCHIP_SET_TYPE_MASKED) {
856 if (!irqd_irq_masked(&desc->irq_data))
857 mask_irq(desc);
858 if (!irqd_irq_disabled(&desc->irq_data))
859 unmask = 1;
860 }
861
862
863 flags &= IRQ_TYPE_SENSE_MASK;
864 ret = chip->irq_set_type(&desc->irq_data, flags);
865
866 switch (ret) {
867 case IRQ_SET_MASK_OK:
868 case IRQ_SET_MASK_OK_DONE:
869 irqd_clear(&desc->irq_data, IRQD_TRIGGER_MASK);
870 irqd_set(&desc->irq_data, flags);
871 fallthrough;
872
873 case IRQ_SET_MASK_OK_NOCOPY:
874 flags = irqd_get_trigger_type(&desc->irq_data);
875 irq_settings_set_trigger_mask(desc, flags);
876 irqd_clear(&desc->irq_data, IRQD_LEVEL);
877 irq_settings_clr_level(desc);
878 if (flags & IRQ_TYPE_LEVEL_MASK) {
879 irq_settings_set_level(desc);
880 irqd_set(&desc->irq_data, IRQD_LEVEL);
881 }
882
883 ret = 0;
884 break;
885 default:
886 pr_err("Setting trigger mode %lu for irq %u failed (%pS)\n",
887 flags, irq_desc_get_irq(desc), chip->irq_set_type);
888 }
889 if (unmask)
890 unmask_irq(desc);
891 return ret;
892}
893
894#ifdef CONFIG_HARDIRQS_SW_RESEND
895int irq_set_parent(int irq, int parent_irq)
896{
897 unsigned long flags;
898 struct irq_desc *desc = irq_get_desc_lock(irq, &flags, 0);
899
900 if (!desc)
901 return -EINVAL;
902
903 desc->parent_irq = parent_irq;
904
905 irq_put_desc_unlock(desc, flags);
906 return 0;
907}
908EXPORT_SYMBOL_GPL(irq_set_parent);
909#endif
910
911
912
913
914
915
916static irqreturn_t irq_default_primary_handler(int irq, void *dev_id)
917{
918 return IRQ_WAKE_THREAD;
919}
920
921
922
923
924
925static irqreturn_t irq_nested_primary_handler(int irq, void *dev_id)
926{
927 WARN(1, "Primary handler called for nested irq %d\n", irq);
928 return IRQ_NONE;
929}
930
931static irqreturn_t irq_forced_secondary_handler(int irq, void *dev_id)
932{
933 WARN(1, "Secondary action handler called for irq %d\n", irq);
934 return IRQ_NONE;
935}
936
937static int irq_wait_for_interrupt(struct irqaction *action)
938{
939 for (;;) {
940 set_current_state(TASK_INTERRUPTIBLE);
941
942 if (kthread_should_stop()) {
943
944 if (test_and_clear_bit(IRQTF_RUNTHREAD,
945 &action->thread_flags)) {
946 __set_current_state(TASK_RUNNING);
947 return 0;
948 }
949 __set_current_state(TASK_RUNNING);
950 return -1;
951 }
952
953 if (test_and_clear_bit(IRQTF_RUNTHREAD,
954 &action->thread_flags)) {
955 __set_current_state(TASK_RUNNING);
956 return 0;
957 }
958 schedule();
959 }
960}
961
962
963
964
965
966
967static void irq_finalize_oneshot(struct irq_desc *desc,
968 struct irqaction *action)
969{
970 if (!(desc->istate & IRQS_ONESHOT) ||
971 action->handler == irq_forced_secondary_handler)
972 return;
973again:
974 chip_bus_lock(desc);
975 raw_spin_lock_irq(&desc->lock);
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991 if (unlikely(irqd_irq_inprogress(&desc->irq_data))) {
992 raw_spin_unlock_irq(&desc->lock);
993 chip_bus_sync_unlock(desc);
994 cpu_relax();
995 goto again;
996 }
997
998
999
1000
1001
1002
1003 if (test_bit(IRQTF_RUNTHREAD, &action->thread_flags))
1004 goto out_unlock;
1005
1006 desc->threads_oneshot &= ~action->thread_mask;
1007
1008 if (!desc->threads_oneshot && !irqd_irq_disabled(&desc->irq_data) &&
1009 irqd_irq_masked(&desc->irq_data))
1010 unmask_threaded_irq(desc);
1011
1012out_unlock:
1013 raw_spin_unlock_irq(&desc->lock);
1014 chip_bus_sync_unlock(desc);
1015}
1016
1017#ifdef CONFIG_SMP
1018
1019
1020
1021static void
1022irq_thread_check_affinity(struct irq_desc *desc, struct irqaction *action)
1023{
1024 cpumask_var_t mask;
1025 bool valid = true;
1026
1027 if (!test_and_clear_bit(IRQTF_AFFINITY, &action->thread_flags))
1028 return;
1029
1030
1031
1032
1033
1034 if (!alloc_cpumask_var(&mask, GFP_KERNEL)) {
1035 set_bit(IRQTF_AFFINITY, &action->thread_flags);
1036 return;
1037 }
1038
1039 raw_spin_lock_irq(&desc->lock);
1040
1041
1042
1043
1044 if (cpumask_available(desc->irq_common_data.affinity)) {
1045 const struct cpumask *m;
1046
1047 m = irq_data_get_effective_affinity_mask(&desc->irq_data);
1048 cpumask_copy(mask, m);
1049 } else {
1050 valid = false;
1051 }
1052 raw_spin_unlock_irq(&desc->lock);
1053
1054 if (valid)
1055 set_cpus_allowed_ptr(current, mask);
1056 free_cpumask_var(mask);
1057}
1058#else
1059static inline void
1060irq_thread_check_affinity(struct irq_desc *desc, struct irqaction *action) { }
1061#endif
1062
1063
1064
1065
1066
1067
1068
1069static irqreturn_t
1070irq_forced_thread_fn(struct irq_desc *desc, struct irqaction *action)
1071{
1072 irqreturn_t ret;
1073
1074 local_bh_disable();
1075 ret = action->thread_fn(action->irq, action->dev_id);
1076 if (ret == IRQ_HANDLED)
1077 atomic_inc(&desc->threads_handled);
1078
1079 irq_finalize_oneshot(desc, action);
1080 local_bh_enable();
1081 return ret;
1082}
1083
1084
1085
1086
1087
1088
1089static irqreturn_t irq_thread_fn(struct irq_desc *desc,
1090 struct irqaction *action)
1091{
1092 irqreturn_t ret;
1093
1094 ret = action->thread_fn(action->irq, action->dev_id);
1095 if (ret == IRQ_HANDLED)
1096 atomic_inc(&desc->threads_handled);
1097
1098 irq_finalize_oneshot(desc, action);
1099 return ret;
1100}
1101
1102static void wake_threads_waitq(struct irq_desc *desc)
1103{
1104 if (atomic_dec_and_test(&desc->threads_active))
1105 wake_up(&desc->wait_for_threads);
1106}
1107
1108static void irq_thread_dtor(struct callback_head *unused)
1109{
1110 struct task_struct *tsk = current;
1111 struct irq_desc *desc;
1112 struct irqaction *action;
1113
1114 if (WARN_ON_ONCE(!(current->flags & PF_EXITING)))
1115 return;
1116
1117 action = kthread_data(tsk);
1118
1119 pr_err("exiting task \"%s\" (%d) is an active IRQ thread (irq %d)\n",
1120 tsk->comm, tsk->pid, action->irq);
1121
1122
1123 desc = irq_to_desc(action->irq);
1124
1125
1126
1127
1128 if (test_and_clear_bit(IRQTF_RUNTHREAD, &action->thread_flags))
1129 wake_threads_waitq(desc);
1130
1131
1132 irq_finalize_oneshot(desc, action);
1133}
1134
1135static void irq_wake_secondary(struct irq_desc *desc, struct irqaction *action)
1136{
1137 struct irqaction *secondary = action->secondary;
1138
1139 if (WARN_ON_ONCE(!secondary))
1140 return;
1141
1142 raw_spin_lock_irq(&desc->lock);
1143 __irq_wake_thread(desc, secondary);
1144 raw_spin_unlock_irq(&desc->lock);
1145}
1146
1147
1148
1149
1150static int irq_thread(void *data)
1151{
1152 struct callback_head on_exit_work;
1153 struct irqaction *action = data;
1154 struct irq_desc *desc = irq_to_desc(action->irq);
1155 irqreturn_t (*handler_fn)(struct irq_desc *desc,
1156 struct irqaction *action);
1157
1158 if (force_irqthreads && test_bit(IRQTF_FORCED_THREAD,
1159 &action->thread_flags))
1160 handler_fn = irq_forced_thread_fn;
1161 else
1162 handler_fn = irq_thread_fn;
1163
1164 init_task_work(&on_exit_work, irq_thread_dtor);
1165 task_work_add(current, &on_exit_work, TWA_NONE);
1166
1167 irq_thread_check_affinity(desc, action);
1168
1169 while (!irq_wait_for_interrupt(action)) {
1170 irqreturn_t action_ret;
1171
1172 irq_thread_check_affinity(desc, action);
1173
1174 action_ret = handler_fn(desc, action);
1175 if (action_ret == IRQ_WAKE_THREAD)
1176 irq_wake_secondary(desc, action);
1177
1178 wake_threads_waitq(desc);
1179 }
1180
1181
1182
1183
1184
1185
1186
1187 task_work_cancel(current, irq_thread_dtor);
1188 return 0;
1189}
1190
1191
1192
1193
1194
1195
1196
1197void irq_wake_thread(unsigned int irq, void *dev_id)
1198{
1199 struct irq_desc *desc = irq_to_desc(irq);
1200 struct irqaction *action;
1201 unsigned long flags;
1202
1203 if (!desc || WARN_ON(irq_settings_is_per_cpu_devid(desc)))
1204 return;
1205
1206 raw_spin_lock_irqsave(&desc->lock, flags);
1207 for_each_action_of_desc(desc, action) {
1208 if (action->dev_id == dev_id) {
1209 if (action->thread)
1210 __irq_wake_thread(desc, action);
1211 break;
1212 }
1213 }
1214 raw_spin_unlock_irqrestore(&desc->lock, flags);
1215}
1216EXPORT_SYMBOL_GPL(irq_wake_thread);
1217
1218static int irq_setup_forced_threading(struct irqaction *new)
1219{
1220 if (!force_irqthreads)
1221 return 0;
1222 if (new->flags & (IRQF_NO_THREAD | IRQF_PERCPU | IRQF_ONESHOT))
1223 return 0;
1224
1225
1226
1227
1228
1229 if (new->handler == irq_default_primary_handler)
1230 return 0;
1231
1232 new->flags |= IRQF_ONESHOT;
1233
1234
1235
1236
1237
1238
1239 if (new->handler && new->thread_fn) {
1240
1241 new->secondary = kzalloc(sizeof(struct irqaction), GFP_KERNEL);
1242 if (!new->secondary)
1243 return -ENOMEM;
1244 new->secondary->handler = irq_forced_secondary_handler;
1245 new->secondary->thread_fn = new->thread_fn;
1246 new->secondary->dev_id = new->dev_id;
1247 new->secondary->irq = new->irq;
1248 new->secondary->name = new->name;
1249 }
1250
1251 set_bit(IRQTF_FORCED_THREAD, &new->thread_flags);
1252 new->thread_fn = new->handler;
1253 new->handler = irq_default_primary_handler;
1254 return 0;
1255}
1256
1257static int irq_request_resources(struct irq_desc *desc)
1258{
1259 struct irq_data *d = &desc->irq_data;
1260 struct irq_chip *c = d->chip;
1261
1262 return c->irq_request_resources ? c->irq_request_resources(d) : 0;
1263}
1264
1265static void irq_release_resources(struct irq_desc *desc)
1266{
1267 struct irq_data *d = &desc->irq_data;
1268 struct irq_chip *c = d->chip;
1269
1270 if (c->irq_release_resources)
1271 c->irq_release_resources(d);
1272}
1273
1274static bool irq_supports_nmi(struct irq_desc *desc)
1275{
1276 struct irq_data *d = irq_desc_get_irq_data(desc);
1277
1278#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
1279
1280 if (d->parent_data)
1281 return false;
1282#endif
1283
1284 if (d->chip->irq_bus_lock || d->chip->irq_bus_sync_unlock)
1285 return false;
1286
1287 return d->chip->flags & IRQCHIP_SUPPORTS_NMI;
1288}
1289
1290static int irq_nmi_setup(struct irq_desc *desc)
1291{
1292 struct irq_data *d = irq_desc_get_irq_data(desc);
1293 struct irq_chip *c = d->chip;
1294
1295 return c->irq_nmi_setup ? c->irq_nmi_setup(d) : -EINVAL;
1296}
1297
1298static void irq_nmi_teardown(struct irq_desc *desc)
1299{
1300 struct irq_data *d = irq_desc_get_irq_data(desc);
1301 struct irq_chip *c = d->chip;
1302
1303 if (c->irq_nmi_teardown)
1304 c->irq_nmi_teardown(d);
1305}
1306
1307static int
1308setup_irq_thread(struct irqaction *new, unsigned int irq, bool secondary)
1309{
1310 struct task_struct *t;
1311
1312 if (!secondary) {
1313 t = kthread_create(irq_thread, new, "irq/%d-%s", irq,
1314 new->name);
1315 } else {
1316 t = kthread_create(irq_thread, new, "irq/%d-s-%s", irq,
1317 new->name);
1318 }
1319
1320 if (IS_ERR(t))
1321 return PTR_ERR(t);
1322
1323 sched_set_fifo(t);
1324
1325
1326
1327
1328
1329
1330 new->thread = get_task_struct(t);
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340 set_bit(IRQTF_AFFINITY, &new->thread_flags);
1341 return 0;
1342}
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358static int
1359__setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
1360{
1361 struct irqaction *old, **old_ptr;
1362 unsigned long flags, thread_mask = 0;
1363 int ret, nested, shared = 0;
1364
1365 if (!desc)
1366 return -EINVAL;
1367
1368 if (desc->irq_data.chip == &no_irq_chip)
1369 return -ENOSYS;
1370 if (!try_module_get(desc->owner))
1371 return -ENODEV;
1372
1373 new->irq = irq;
1374
1375
1376
1377
1378
1379 if (!(new->flags & IRQF_TRIGGER_MASK))
1380 new->flags |= irqd_get_trigger_type(&desc->irq_data);
1381
1382
1383
1384
1385
1386 nested = irq_settings_is_nested_thread(desc);
1387 if (nested) {
1388 if (!new->thread_fn) {
1389 ret = -EINVAL;
1390 goto out_mput;
1391 }
1392
1393
1394
1395
1396
1397 new->handler = irq_nested_primary_handler;
1398 } else {
1399 if (irq_settings_can_thread(desc)) {
1400 ret = irq_setup_forced_threading(new);
1401 if (ret)
1402 goto out_mput;
1403 }
1404 }
1405
1406
1407
1408
1409
1410
1411 if (new->thread_fn && !nested) {
1412 ret = setup_irq_thread(new, irq, false);
1413 if (ret)
1414 goto out_mput;
1415 if (new->secondary) {
1416 ret = setup_irq_thread(new->secondary, irq, true);
1417 if (ret)
1418 goto out_thread;
1419 }
1420 }
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431 if (desc->irq_data.chip->flags & IRQCHIP_ONESHOT_SAFE)
1432 new->flags &= ~IRQF_ONESHOT;
1433
1434
1435
1436
1437
1438
1439
1440
1441 mutex_lock(&desc->request_mutex);
1442
1443
1444
1445
1446
1447
1448 chip_bus_lock(desc);
1449
1450
1451 if (!desc->action) {
1452 ret = irq_request_resources(desc);
1453 if (ret) {
1454 pr_err("Failed to request resources for %s (irq %d) on irqchip %s\n",
1455 new->name, irq, desc->irq_data.chip->name);
1456 goto out_bus_unlock;
1457 }
1458 }
1459
1460
1461
1462
1463
1464
1465
1466 raw_spin_lock_irqsave(&desc->lock, flags);
1467 old_ptr = &desc->action;
1468 old = *old_ptr;
1469 if (old) {
1470
1471
1472
1473
1474
1475
1476
1477
1478 unsigned int oldtype;
1479
1480 if (desc->istate & IRQS_NMI) {
1481 pr_err("Invalid attempt to share NMI for %s (irq %d) on irqchip %s.\n",
1482 new->name, irq, desc->irq_data.chip->name);
1483 ret = -EINVAL;
1484 goto out_unlock;
1485 }
1486
1487
1488
1489
1490
1491 if (irqd_trigger_type_was_set(&desc->irq_data)) {
1492 oldtype = irqd_get_trigger_type(&desc->irq_data);
1493 } else {
1494 oldtype = new->flags & IRQF_TRIGGER_MASK;
1495 irqd_set_trigger_type(&desc->irq_data, oldtype);
1496 }
1497
1498 if (!((old->flags & new->flags) & IRQF_SHARED) ||
1499 (oldtype != (new->flags & IRQF_TRIGGER_MASK)) ||
1500 ((old->flags ^ new->flags) & IRQF_ONESHOT))
1501 goto mismatch;
1502
1503
1504 if ((old->flags & IRQF_PERCPU) !=
1505 (new->flags & IRQF_PERCPU))
1506 goto mismatch;
1507
1508
1509 do {
1510
1511
1512
1513
1514
1515 thread_mask |= old->thread_mask;
1516 old_ptr = &old->next;
1517 old = *old_ptr;
1518 } while (old);
1519 shared = 1;
1520 }
1521
1522
1523
1524
1525
1526
1527 if (new->flags & IRQF_ONESHOT) {
1528
1529
1530
1531
1532 if (thread_mask == ~0UL) {
1533 ret = -EBUSY;
1534 goto out_unlock;
1535 }
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556 new->thread_mask = 1UL << ffz(thread_mask);
1557
1558 } else if (new->handler == irq_default_primary_handler &&
1559 !(desc->irq_data.chip->flags & IRQCHIP_ONESHOT_SAFE)) {
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575 pr_err("Threaded irq requested with handler=NULL and !ONESHOT for %s (irq %d)\n",
1576 new->name, irq);
1577 ret = -EINVAL;
1578 goto out_unlock;
1579 }
1580
1581 if (!shared) {
1582 init_waitqueue_head(&desc->wait_for_threads);
1583
1584
1585 if (new->flags & IRQF_TRIGGER_MASK) {
1586 ret = __irq_set_trigger(desc,
1587 new->flags & IRQF_TRIGGER_MASK);
1588
1589 if (ret)
1590 goto out_unlock;
1591 }
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604 ret = irq_activate(desc);
1605 if (ret)
1606 goto out_unlock;
1607
1608 desc->istate &= ~(IRQS_AUTODETECT | IRQS_SPURIOUS_DISABLED | \
1609 IRQS_ONESHOT | IRQS_WAITING);
1610 irqd_clear(&desc->irq_data, IRQD_IRQ_INPROGRESS);
1611
1612 if (new->flags & IRQF_PERCPU) {
1613 irqd_set(&desc->irq_data, IRQD_PER_CPU);
1614 irq_settings_set_per_cpu(desc);
1615 }
1616
1617 if (new->flags & IRQF_ONESHOT)
1618 desc->istate |= IRQS_ONESHOT;
1619
1620
1621 if (new->flags & IRQF_NOBALANCING) {
1622 irq_settings_set_no_balancing(desc);
1623 irqd_set(&desc->irq_data, IRQD_NO_BALANCING);
1624 }
1625
1626 if (irq_settings_can_autoenable(desc)) {
1627 irq_startup(desc, IRQ_RESEND, IRQ_START_COND);
1628 } else {
1629
1630
1631
1632
1633
1634
1635 WARN_ON_ONCE(new->flags & IRQF_SHARED);
1636
1637 desc->depth = 1;
1638 }
1639
1640 } else if (new->flags & IRQF_TRIGGER_MASK) {
1641 unsigned int nmsk = new->flags & IRQF_TRIGGER_MASK;
1642 unsigned int omsk = irqd_get_trigger_type(&desc->irq_data);
1643
1644 if (nmsk != omsk)
1645
1646 pr_warn("irq %d uses trigger mode %u; requested %u\n",
1647 irq, omsk, nmsk);
1648 }
1649
1650 *old_ptr = new;
1651
1652 irq_pm_install_action(desc, new);
1653
1654
1655 desc->irq_count = 0;
1656 desc->irqs_unhandled = 0;
1657
1658
1659
1660
1661
1662 if (shared && (desc->istate & IRQS_SPURIOUS_DISABLED)) {
1663 desc->istate &= ~IRQS_SPURIOUS_DISABLED;
1664 __enable_irq(desc);
1665 }
1666
1667 raw_spin_unlock_irqrestore(&desc->lock, flags);
1668 chip_bus_sync_unlock(desc);
1669 mutex_unlock(&desc->request_mutex);
1670
1671 irq_setup_timings(desc, new);
1672
1673
1674
1675
1676
1677 if (new->thread)
1678 wake_up_process(new->thread);
1679 if (new->secondary)
1680 wake_up_process(new->secondary->thread);
1681
1682 register_irq_proc(irq, desc);
1683 new->dir = NULL;
1684 register_handler_proc(irq, new);
1685 return 0;
1686
1687mismatch:
1688 if (!(new->flags & IRQF_PROBE_SHARED)) {
1689 pr_err("Flags mismatch irq %d. %08x (%s) vs. %08x (%s)\n",
1690 irq, new->flags, new->name, old->flags, old->name);
1691#ifdef CONFIG_DEBUG_SHIRQ
1692 dump_stack();
1693#endif
1694 }
1695 ret = -EBUSY;
1696
1697out_unlock:
1698 raw_spin_unlock_irqrestore(&desc->lock, flags);
1699
1700 if (!desc->action)
1701 irq_release_resources(desc);
1702out_bus_unlock:
1703 chip_bus_sync_unlock(desc);
1704 mutex_unlock(&desc->request_mutex);
1705
1706out_thread:
1707 if (new->thread) {
1708 struct task_struct *t = new->thread;
1709
1710 new->thread = NULL;
1711 kthread_stop(t);
1712 put_task_struct(t);
1713 }
1714 if (new->secondary && new->secondary->thread) {
1715 struct task_struct *t = new->secondary->thread;
1716
1717 new->secondary->thread = NULL;
1718 kthread_stop(t);
1719 put_task_struct(t);
1720 }
1721out_mput:
1722 module_put(desc->owner);
1723 return ret;
1724}
1725
1726
1727
1728
1729
1730static struct irqaction *__free_irq(struct irq_desc *desc, void *dev_id)
1731{
1732 unsigned irq = desc->irq_data.irq;
1733 struct irqaction *action, **action_ptr;
1734 unsigned long flags;
1735
1736 WARN(in_interrupt(), "Trying to free IRQ %d from IRQ context!\n", irq);
1737
1738 mutex_lock(&desc->request_mutex);
1739 chip_bus_lock(desc);
1740 raw_spin_lock_irqsave(&desc->lock, flags);
1741
1742
1743
1744
1745
1746 action_ptr = &desc->action;
1747 for (;;) {
1748 action = *action_ptr;
1749
1750 if (!action) {
1751 WARN(1, "Trying to free already-free IRQ %d\n", irq);
1752 raw_spin_unlock_irqrestore(&desc->lock, flags);
1753 chip_bus_sync_unlock(desc);
1754 mutex_unlock(&desc->request_mutex);
1755 return NULL;
1756 }
1757
1758 if (action->dev_id == dev_id)
1759 break;
1760 action_ptr = &action->next;
1761 }
1762
1763
1764 *action_ptr = action->next;
1765
1766 irq_pm_remove_action(desc, action);
1767
1768
1769 if (!desc->action) {
1770 irq_settings_clr_disable_unlazy(desc);
1771
1772 irq_shutdown(desc);
1773 }
1774
1775#ifdef CONFIG_SMP
1776
1777 if (WARN_ON_ONCE(desc->affinity_hint))
1778 desc->affinity_hint = NULL;
1779#endif
1780
1781 raw_spin_unlock_irqrestore(&desc->lock, flags);
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796 chip_bus_sync_unlock(desc);
1797
1798 unregister_handler_proc(irq, action);
1799
1800
1801
1802
1803
1804
1805 __synchronize_hardirq(desc, true);
1806
1807#ifdef CONFIG_DEBUG_SHIRQ
1808
1809
1810
1811
1812
1813
1814
1815
1816 if (action->flags & IRQF_SHARED) {
1817 local_irq_save(flags);
1818 action->handler(irq, dev_id);
1819 local_irq_restore(flags);
1820 }
1821#endif
1822
1823
1824
1825
1826
1827
1828
1829 if (action->thread) {
1830 kthread_stop(action->thread);
1831 put_task_struct(action->thread);
1832 if (action->secondary && action->secondary->thread) {
1833 kthread_stop(action->secondary->thread);
1834 put_task_struct(action->secondary->thread);
1835 }
1836 }
1837
1838
1839 if (!desc->action) {
1840
1841
1842
1843
1844 chip_bus_lock(desc);
1845
1846
1847
1848
1849 raw_spin_lock_irqsave(&desc->lock, flags);
1850 irq_domain_deactivate_irq(&desc->irq_data);
1851 raw_spin_unlock_irqrestore(&desc->lock, flags);
1852
1853 irq_release_resources(desc);
1854 chip_bus_sync_unlock(desc);
1855 irq_remove_timings(desc);
1856 }
1857
1858 mutex_unlock(&desc->request_mutex);
1859
1860 irq_chip_pm_put(&desc->irq_data);
1861 module_put(desc->owner);
1862 kfree(action->secondary);
1863 return action;
1864}
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882const void *free_irq(unsigned int irq, void *dev_id)
1883{
1884 struct irq_desc *desc = irq_to_desc(irq);
1885 struct irqaction *action;
1886 const char *devname;
1887
1888 if (!desc || WARN_ON(irq_settings_is_per_cpu_devid(desc)))
1889 return NULL;
1890
1891#ifdef CONFIG_SMP
1892 if (WARN_ON(desc->affinity_notify))
1893 desc->affinity_notify = NULL;
1894#endif
1895
1896 action = __free_irq(desc, dev_id);
1897
1898 if (!action)
1899 return NULL;
1900
1901 devname = action->name;
1902 kfree(action);
1903 return devname;
1904}
1905EXPORT_SYMBOL(free_irq);
1906
1907
1908static const void *__cleanup_nmi(unsigned int irq, struct irq_desc *desc)
1909{
1910 const char *devname = NULL;
1911
1912 desc->istate &= ~IRQS_NMI;
1913
1914 if (!WARN_ON(desc->action == NULL)) {
1915 irq_pm_remove_action(desc, desc->action);
1916 devname = desc->action->name;
1917 unregister_handler_proc(irq, desc->action);
1918
1919 kfree(desc->action);
1920 desc->action = NULL;
1921 }
1922
1923 irq_settings_clr_disable_unlazy(desc);
1924 irq_shutdown_and_deactivate(desc);
1925
1926 irq_release_resources(desc);
1927
1928 irq_chip_pm_put(&desc->irq_data);
1929 module_put(desc->owner);
1930
1931 return devname;
1932}
1933
1934const void *free_nmi(unsigned int irq, void *dev_id)
1935{
1936 struct irq_desc *desc = irq_to_desc(irq);
1937 unsigned long flags;
1938 const void *devname;
1939
1940 if (!desc || WARN_ON(!(desc->istate & IRQS_NMI)))
1941 return NULL;
1942
1943 if (WARN_ON(irq_settings_is_per_cpu_devid(desc)))
1944 return NULL;
1945
1946
1947 if (WARN_ON(desc->depth == 0))
1948 disable_nmi_nosync(irq);
1949
1950 raw_spin_lock_irqsave(&desc->lock, flags);
1951
1952 irq_nmi_teardown(desc);
1953 devname = __cleanup_nmi(irq, desc);
1954
1955 raw_spin_unlock_irqrestore(&desc->lock, flags);
1956
1957 return devname;
1958}
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002int request_threaded_irq(unsigned int irq, irq_handler_t handler,
2003 irq_handler_t thread_fn, unsigned long irqflags,
2004 const char *devname, void *dev_id)
2005{
2006 struct irqaction *action;
2007 struct irq_desc *desc;
2008 int retval;
2009
2010 if (irq == IRQ_NOTCONNECTED)
2011 return -ENOTCONN;
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022 if (((irqflags & IRQF_SHARED) && !dev_id) ||
2023 (!(irqflags & IRQF_SHARED) && (irqflags & IRQF_COND_SUSPEND)) ||
2024 ((irqflags & IRQF_NO_SUSPEND) && (irqflags & IRQF_COND_SUSPEND)))
2025 return -EINVAL;
2026
2027 desc = irq_to_desc(irq);
2028 if (!desc)
2029 return -EINVAL;
2030
2031 if (!irq_settings_can_request(desc) ||
2032 WARN_ON(irq_settings_is_per_cpu_devid(desc)))
2033 return -EINVAL;
2034
2035 if (!handler) {
2036 if (!thread_fn)
2037 return -EINVAL;
2038 handler = irq_default_primary_handler;
2039 }
2040
2041 action = kzalloc(sizeof(struct irqaction), GFP_KERNEL);
2042 if (!action)
2043 return -ENOMEM;
2044
2045 action->handler = handler;
2046 action->thread_fn = thread_fn;
2047 action->flags = irqflags;
2048 action->name = devname;
2049 action->dev_id = dev_id;
2050
2051 retval = irq_chip_pm_get(&desc->irq_data);
2052 if (retval < 0) {
2053 kfree(action);
2054 return retval;
2055 }
2056
2057 retval = __setup_irq(irq, desc, action);
2058
2059 if (retval) {
2060 irq_chip_pm_put(&desc->irq_data);
2061 kfree(action->secondary);
2062 kfree(action);
2063 }
2064
2065#ifdef CONFIG_DEBUG_SHIRQ_FIXME
2066 if (!retval && (irqflags & IRQF_SHARED)) {
2067
2068
2069
2070
2071
2072
2073 unsigned long flags;
2074
2075 disable_irq(irq);
2076 local_irq_save(flags);
2077
2078 handler(irq, dev_id);
2079
2080 local_irq_restore(flags);
2081 enable_irq(irq);
2082 }
2083#endif
2084 return retval;
2085}
2086EXPORT_SYMBOL(request_threaded_irq);
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105int request_any_context_irq(unsigned int irq, irq_handler_t handler,
2106 unsigned long flags, const char *name, void *dev_id)
2107{
2108 struct irq_desc *desc;
2109 int ret;
2110
2111 if (irq == IRQ_NOTCONNECTED)
2112 return -ENOTCONN;
2113
2114 desc = irq_to_desc(irq);
2115 if (!desc)
2116 return -EINVAL;
2117
2118 if (irq_settings_is_nested_thread(desc)) {
2119 ret = request_threaded_irq(irq, NULL, handler,
2120 flags, name, dev_id);
2121 return !ret ? IRQC_IS_NESTED : ret;
2122 }
2123
2124 ret = request_irq(irq, handler, flags, name, dev_id);
2125 return !ret ? IRQC_IS_HARDIRQ : ret;
2126}
2127EXPORT_SYMBOL_GPL(request_any_context_irq);
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155int request_nmi(unsigned int irq, irq_handler_t handler,
2156 unsigned long irqflags, const char *name, void *dev_id)
2157{
2158 struct irqaction *action;
2159 struct irq_desc *desc;
2160 unsigned long flags;
2161 int retval;
2162
2163 if (irq == IRQ_NOTCONNECTED)
2164 return -ENOTCONN;
2165
2166
2167 if (irqflags & (IRQF_SHARED | IRQF_COND_SUSPEND | IRQF_IRQPOLL))
2168 return -EINVAL;
2169
2170 if (!(irqflags & IRQF_PERCPU))
2171 return -EINVAL;
2172
2173 if (!handler)
2174 return -EINVAL;
2175
2176 desc = irq_to_desc(irq);
2177
2178 if (!desc || irq_settings_can_autoenable(desc) ||
2179 !irq_settings_can_request(desc) ||
2180 WARN_ON(irq_settings_is_per_cpu_devid(desc)) ||
2181 !irq_supports_nmi(desc))
2182 return -EINVAL;
2183
2184 action = kzalloc(sizeof(struct irqaction), GFP_KERNEL);
2185 if (!action)
2186 return -ENOMEM;
2187
2188 action->handler = handler;
2189 action->flags = irqflags | IRQF_NO_THREAD | IRQF_NOBALANCING;
2190 action->name = name;
2191 action->dev_id = dev_id;
2192
2193 retval = irq_chip_pm_get(&desc->irq_data);
2194 if (retval < 0)
2195 goto err_out;
2196
2197 retval = __setup_irq(irq, desc, action);
2198 if (retval)
2199 goto err_irq_setup;
2200
2201 raw_spin_lock_irqsave(&desc->lock, flags);
2202
2203
2204 desc->istate |= IRQS_NMI;
2205 retval = irq_nmi_setup(desc);
2206 if (retval) {
2207 __cleanup_nmi(irq, desc);
2208 raw_spin_unlock_irqrestore(&desc->lock, flags);
2209 return -EINVAL;
2210 }
2211
2212 raw_spin_unlock_irqrestore(&desc->lock, flags);
2213
2214 return 0;
2215
2216err_irq_setup:
2217 irq_chip_pm_put(&desc->irq_data);
2218err_out:
2219 kfree(action);
2220
2221 return retval;
2222}
2223
2224void enable_percpu_irq(unsigned int irq, unsigned int type)
2225{
2226 unsigned int cpu = smp_processor_id();
2227 unsigned long flags;
2228 struct irq_desc *desc = irq_get_desc_lock(irq, &flags, IRQ_GET_DESC_CHECK_PERCPU);
2229
2230 if (!desc)
2231 return;
2232
2233
2234
2235
2236
2237 type &= IRQ_TYPE_SENSE_MASK;
2238 if (type == IRQ_TYPE_NONE)
2239 type = irqd_get_trigger_type(&desc->irq_data);
2240
2241 if (type != IRQ_TYPE_NONE) {
2242 int ret;
2243
2244 ret = __irq_set_trigger(desc, type);
2245
2246 if (ret) {
2247 WARN(1, "failed to set type for IRQ%d\n", irq);
2248 goto out;
2249 }
2250 }
2251
2252 irq_percpu_enable(desc, cpu);
2253out:
2254 irq_put_desc_unlock(desc, flags);
2255}
2256EXPORT_SYMBOL_GPL(enable_percpu_irq);
2257
2258void enable_percpu_nmi(unsigned int irq, unsigned int type)
2259{
2260 enable_percpu_irq(irq, type);
2261}
2262
2263
2264
2265
2266
2267
2268
2269
2270bool irq_percpu_is_enabled(unsigned int irq)
2271{
2272 unsigned int cpu = smp_processor_id();
2273 struct irq_desc *desc;
2274 unsigned long flags;
2275 bool is_enabled;
2276
2277 desc = irq_get_desc_lock(irq, &flags, IRQ_GET_DESC_CHECK_PERCPU);
2278 if (!desc)
2279 return false;
2280
2281 is_enabled = cpumask_test_cpu(cpu, desc->percpu_enabled);
2282 irq_put_desc_unlock(desc, flags);
2283
2284 return is_enabled;
2285}
2286EXPORT_SYMBOL_GPL(irq_percpu_is_enabled);
2287
2288void disable_percpu_irq(unsigned int irq)
2289{
2290 unsigned int cpu = smp_processor_id();
2291 unsigned long flags;
2292 struct irq_desc *desc = irq_get_desc_lock(irq, &flags, IRQ_GET_DESC_CHECK_PERCPU);
2293
2294 if (!desc)
2295 return;
2296
2297 irq_percpu_disable(desc, cpu);
2298 irq_put_desc_unlock(desc, flags);
2299}
2300EXPORT_SYMBOL_GPL(disable_percpu_irq);
2301
2302void disable_percpu_nmi(unsigned int irq)
2303{
2304 disable_percpu_irq(irq);
2305}
2306
2307
2308
2309
2310static struct irqaction *__free_percpu_irq(unsigned int irq, void __percpu *dev_id)
2311{
2312 struct irq_desc *desc = irq_to_desc(irq);
2313 struct irqaction *action;
2314 unsigned long flags;
2315
2316 WARN(in_interrupt(), "Trying to free IRQ %d from IRQ context!\n", irq);
2317
2318 if (!desc)
2319 return NULL;
2320
2321 raw_spin_lock_irqsave(&desc->lock, flags);
2322
2323 action = desc->action;
2324 if (!action || action->percpu_dev_id != dev_id) {
2325 WARN(1, "Trying to free already-free IRQ %d\n", irq);
2326 goto bad;
2327 }
2328
2329 if (!cpumask_empty(desc->percpu_enabled)) {
2330 WARN(1, "percpu IRQ %d still enabled on CPU%d!\n",
2331 irq, cpumask_first(desc->percpu_enabled));
2332 goto bad;
2333 }
2334
2335
2336 desc->action = NULL;
2337
2338 desc->istate &= ~IRQS_NMI;
2339
2340 raw_spin_unlock_irqrestore(&desc->lock, flags);
2341
2342 unregister_handler_proc(irq, action);
2343
2344 irq_chip_pm_put(&desc->irq_data);
2345 module_put(desc->owner);
2346 return action;
2347
2348bad:
2349 raw_spin_unlock_irqrestore(&desc->lock, flags);
2350 return NULL;
2351}
2352
2353
2354
2355
2356
2357
2358
2359
2360void remove_percpu_irq(unsigned int irq, struct irqaction *act)
2361{
2362 struct irq_desc *desc = irq_to_desc(irq);
2363
2364 if (desc && irq_settings_is_per_cpu_devid(desc))
2365 __free_percpu_irq(irq, act->percpu_dev_id);
2366}
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380void free_percpu_irq(unsigned int irq, void __percpu *dev_id)
2381{
2382 struct irq_desc *desc = irq_to_desc(irq);
2383
2384 if (!desc || !irq_settings_is_per_cpu_devid(desc))
2385 return;
2386
2387 chip_bus_lock(desc);
2388 kfree(__free_percpu_irq(irq, dev_id));
2389 chip_bus_sync_unlock(desc);
2390}
2391EXPORT_SYMBOL_GPL(free_percpu_irq);
2392
2393void free_percpu_nmi(unsigned int irq, void __percpu *dev_id)
2394{
2395 struct irq_desc *desc = irq_to_desc(irq);
2396
2397 if (!desc || !irq_settings_is_per_cpu_devid(desc))
2398 return;
2399
2400 if (WARN_ON(!(desc->istate & IRQS_NMI)))
2401 return;
2402
2403 kfree(__free_percpu_irq(irq, dev_id));
2404}
2405
2406
2407
2408
2409
2410
2411
2412
2413int setup_percpu_irq(unsigned int irq, struct irqaction *act)
2414{
2415 struct irq_desc *desc = irq_to_desc(irq);
2416 int retval;
2417
2418 if (!desc || !irq_settings_is_per_cpu_devid(desc))
2419 return -EINVAL;
2420
2421 retval = irq_chip_pm_get(&desc->irq_data);
2422 if (retval < 0)
2423 return retval;
2424
2425 retval = __setup_irq(irq, desc, act);
2426
2427 if (retval)
2428 irq_chip_pm_put(&desc->irq_data);
2429
2430 return retval;
2431}
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450int __request_percpu_irq(unsigned int irq, irq_handler_t handler,
2451 unsigned long flags, const char *devname,
2452 void __percpu *dev_id)
2453{
2454 struct irqaction *action;
2455 struct irq_desc *desc;
2456 int retval;
2457
2458 if (!dev_id)
2459 return -EINVAL;
2460
2461 desc = irq_to_desc(irq);
2462 if (!desc || !irq_settings_can_request(desc) ||
2463 !irq_settings_is_per_cpu_devid(desc))
2464 return -EINVAL;
2465
2466 if (flags && flags != IRQF_TIMER)
2467 return -EINVAL;
2468
2469 action = kzalloc(sizeof(struct irqaction), GFP_KERNEL);
2470 if (!action)
2471 return -ENOMEM;
2472
2473 action->handler = handler;
2474 action->flags = flags | IRQF_PERCPU | IRQF_NO_SUSPEND;
2475 action->name = devname;
2476 action->percpu_dev_id = dev_id;
2477
2478 retval = irq_chip_pm_get(&desc->irq_data);
2479 if (retval < 0) {
2480 kfree(action);
2481 return retval;
2482 }
2483
2484 retval = __setup_irq(irq, desc, action);
2485
2486 if (retval) {
2487 irq_chip_pm_put(&desc->irq_data);
2488 kfree(action);
2489 }
2490
2491 return retval;
2492}
2493EXPORT_SYMBOL_GPL(__request_percpu_irq);
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516int request_percpu_nmi(unsigned int irq, irq_handler_t handler,
2517 const char *name, void __percpu *dev_id)
2518{
2519 struct irqaction *action;
2520 struct irq_desc *desc;
2521 unsigned long flags;
2522 int retval;
2523
2524 if (!handler)
2525 return -EINVAL;
2526
2527 desc = irq_to_desc(irq);
2528
2529 if (!desc || !irq_settings_can_request(desc) ||
2530 !irq_settings_is_per_cpu_devid(desc) ||
2531 irq_settings_can_autoenable(desc) ||
2532 !irq_supports_nmi(desc))
2533 return -EINVAL;
2534
2535
2536 if (desc->istate & IRQS_NMI)
2537 return -EINVAL;
2538
2539 action = kzalloc(sizeof(struct irqaction), GFP_KERNEL);
2540 if (!action)
2541 return -ENOMEM;
2542
2543 action->handler = handler;
2544 action->flags = IRQF_PERCPU | IRQF_NO_SUSPEND | IRQF_NO_THREAD
2545 | IRQF_NOBALANCING;
2546 action->name = name;
2547 action->percpu_dev_id = dev_id;
2548
2549 retval = irq_chip_pm_get(&desc->irq_data);
2550 if (retval < 0)
2551 goto err_out;
2552
2553 retval = __setup_irq(irq, desc, action);
2554 if (retval)
2555 goto err_irq_setup;
2556
2557 raw_spin_lock_irqsave(&desc->lock, flags);
2558 desc->istate |= IRQS_NMI;
2559 raw_spin_unlock_irqrestore(&desc->lock, flags);
2560
2561 return 0;
2562
2563err_irq_setup:
2564 irq_chip_pm_put(&desc->irq_data);
2565err_out:
2566 kfree(action);
2567
2568 return retval;
2569}
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584int prepare_percpu_nmi(unsigned int irq)
2585{
2586 unsigned long flags;
2587 struct irq_desc *desc;
2588 int ret = 0;
2589
2590 WARN_ON(preemptible());
2591
2592 desc = irq_get_desc_lock(irq, &flags,
2593 IRQ_GET_DESC_CHECK_PERCPU);
2594 if (!desc)
2595 return -EINVAL;
2596
2597 if (WARN(!(desc->istate & IRQS_NMI),
2598 KERN_ERR "prepare_percpu_nmi called for a non-NMI interrupt: irq %u\n",
2599 irq)) {
2600 ret = -EINVAL;
2601 goto out;
2602 }
2603
2604 ret = irq_nmi_setup(desc);
2605 if (ret) {
2606 pr_err("Failed to setup NMI delivery: irq %u\n", irq);
2607 goto out;
2608 }
2609
2610out:
2611 irq_put_desc_unlock(desc, flags);
2612 return ret;
2613}
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627void teardown_percpu_nmi(unsigned int irq)
2628{
2629 unsigned long flags;
2630 struct irq_desc *desc;
2631
2632 WARN_ON(preemptible());
2633
2634 desc = irq_get_desc_lock(irq, &flags,
2635 IRQ_GET_DESC_CHECK_PERCPU);
2636 if (!desc)
2637 return;
2638
2639 if (WARN_ON(!(desc->istate & IRQS_NMI)))
2640 goto out;
2641
2642 irq_nmi_teardown(desc);
2643out:
2644 irq_put_desc_unlock(desc, flags);
2645}
2646
2647int __irq_get_irqchip_state(struct irq_data *data, enum irqchip_irq_state which,
2648 bool *state)
2649{
2650 struct irq_chip *chip;
2651 int err = -EINVAL;
2652
2653 do {
2654 chip = irq_data_get_irq_chip(data);
2655 if (WARN_ON_ONCE(!chip))
2656 return -ENODEV;
2657 if (chip->irq_get_irqchip_state)
2658 break;
2659#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
2660 data = data->parent_data;
2661#else
2662 data = NULL;
2663#endif
2664 } while (data);
2665
2666 if (data)
2667 err = chip->irq_get_irqchip_state(data, which, state);
2668 return err;
2669}
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684int irq_get_irqchip_state(unsigned int irq, enum irqchip_irq_state which,
2685 bool *state)
2686{
2687 struct irq_desc *desc;
2688 struct irq_data *data;
2689 unsigned long flags;
2690 int err = -EINVAL;
2691
2692 desc = irq_get_desc_buslock(irq, &flags, 0);
2693 if (!desc)
2694 return err;
2695
2696 data = irq_desc_get_irq_data(desc);
2697
2698 err = __irq_get_irqchip_state(data, which, state);
2699
2700 irq_put_desc_busunlock(desc, flags);
2701 return err;
2702}
2703EXPORT_SYMBOL_GPL(irq_get_irqchip_state);
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717int irq_set_irqchip_state(unsigned int irq, enum irqchip_irq_state which,
2718 bool val)
2719{
2720 struct irq_desc *desc;
2721 struct irq_data *data;
2722 struct irq_chip *chip;
2723 unsigned long flags;
2724 int err = -EINVAL;
2725
2726 desc = irq_get_desc_buslock(irq, &flags, 0);
2727 if (!desc)
2728 return err;
2729
2730 data = irq_desc_get_irq_data(desc);
2731
2732 do {
2733 chip = irq_data_get_irq_chip(data);
2734 if (WARN_ON_ONCE(!chip)) {
2735 err = -ENODEV;
2736 goto out_unlock;
2737 }
2738 if (chip->irq_set_irqchip_state)
2739 break;
2740#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
2741 data = data->parent_data;
2742#else
2743 data = NULL;
2744#endif
2745 } while (data);
2746
2747 if (data)
2748 err = chip->irq_set_irqchip_state(data, which, val);
2749
2750out_unlock:
2751 irq_put_desc_busunlock(desc, flags);
2752 return err;
2753}
2754EXPORT_SYMBOL_GPL(irq_set_irqchip_state);
2755