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