GNU Linux-libre 4.19.286-gnu1
[releases.git] / kernel / irq / manage.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (C) 1992, 1998-2006 Linus Torvalds, Ingo Molnar
4  * Copyright (C) 2005-2006 Thomas Gleixner
5  *
6  * This file contains driver APIs to the irq subsystem.
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 #ifdef CONFIG_IRQ_FORCED_THREADING
27 __read_mostly bool force_irqthreads;
28 EXPORT_SYMBOL_GPL(force_irqthreads);
29
30 static int __init setup_forced_irqthreads(char *arg)
31 {
32         force_irqthreads = true;
33         return 0;
34 }
35 early_param("threadirqs", setup_forced_irqthreads);
36 #endif
37
38 static 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                  * Wait until we're out of the critical section.  This might
48                  * give the wrong answer due to the lack of memory barriers.
49                  */
50                 while (irqd_irq_inprogress(&desc->irq_data))
51                         cpu_relax();
52
53                 /* Ok, that indicated we're done: double-check carefully. */
54                 raw_spin_lock_irqsave(&desc->lock, flags);
55                 inprogress = irqd_irq_inprogress(&desc->irq_data);
56
57                 /*
58                  * If requested and supported, check at the chip whether it
59                  * is in flight at the hardware level, i.e. already pending
60                  * in a CPU and waiting for service and acknowledge.
61                  */
62                 if (!inprogress && sync_chip) {
63                         /*
64                          * Ignore the return code. inprogress is only updated
65                          * when the chip supports it.
66                          */
67                         __irq_get_irqchip_state(irqd, IRQCHIP_STATE_ACTIVE,
68                                                 &inprogress);
69                 }
70                 raw_spin_unlock_irqrestore(&desc->lock, flags);
71
72                 /* Oops, that failed? */
73         } while (inprogress);
74 }
75
76 /**
77  *      synchronize_hardirq - wait for pending hard IRQ handlers (on other CPUs)
78  *      @irq: interrupt number to wait for
79  *
80  *      This function waits for any pending hard IRQ handlers for this
81  *      interrupt to complete before returning. If you use this
82  *      function while holding a resource the IRQ handler may need you
83  *      will deadlock. It does not take associated threaded handlers
84  *      into account.
85  *
86  *      Do not use this for shutdown scenarios where you must be sure
87  *      that all parts (hardirq and threaded handler) have completed.
88  *
89  *      Returns: false if a threaded handler is active.
90  *
91  *      This function may be called - with care - from IRQ context.
92  *
93  *      It does not check whether there is an interrupt in flight at the
94  *      hardware level, but not serviced yet, as this might deadlock when
95  *      called with interrupts disabled and the target CPU of the interrupt
96  *      is the current CPU.
97  */
98 bool 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 }
109 EXPORT_SYMBOL(synchronize_hardirq);
110
111 /**
112  *      synchronize_irq - wait for pending IRQ handlers (on other CPUs)
113  *      @irq: interrupt number to wait for
114  *
115  *      This function waits for any pending IRQ handlers for this interrupt
116  *      to complete before returning. If you use this function while
117  *      holding a resource the IRQ handler may need you will deadlock.
118  *
119  *      Can only be called from preemptible code as it might sleep when
120  *      an interrupt thread is associated to @irq.
121  *
122  *      It optionally makes sure (when the irq chip supports that method)
123  *      that the interrupt is not pending in any CPU and waiting for
124  *      service.
125  */
126 void 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                  * We made sure that no hardirq handler is
134                  * running. Now verify that no threaded handlers are
135                  * active.
136                  */
137                 wait_event(desc->wait_for_threads,
138                            !atomic_read(&desc->threads_active));
139         }
140 }
141 EXPORT_SYMBOL(synchronize_irq);
142
143 #ifdef CONFIG_SMP
144 cpumask_var_t irq_default_affinity;
145
146 static 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  *      irq_can_set_affinity - Check if the affinity of a given irq can be set
156  *      @irq:           Interrupt to check
157  *
158  */
159 int irq_can_set_affinity(unsigned int irq)
160 {
161         return __irq_can_set_affinity(irq_to_desc(irq));
162 }
163
164 /**
165  * irq_can_set_affinity_usr - Check if affinity of a irq can be set from user space
166  * @irq:        Interrupt to check
167  *
168  * Like irq_can_set_affinity() above, but additionally checks for the
169  * AFFINITY_MANAGED flag.
170  */
171 bool 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  *      irq_set_thread_affinity - Notify irq threads to adjust affinity
181  *      @desc:          irq descriptor which has affitnity changed
182  *
183  *      We just set IRQTF_AFFINITY and delegate the affinity setting
184  *      to the interrupt thread itself. We can not call
185  *      set_cpus_allowed_ptr() here as we hold desc->lock and this
186  *      code can be called from hard interrupt context.
187  */
188 void 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
197 #ifdef CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK
198 static void irq_validate_effective_affinity(struct irq_data *data)
199 {
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 }
208
209 static inline void irq_init_effective_affinity(struct irq_data *data,
210                                                const struct cpumask *mask)
211 {
212         cpumask_copy(irq_data_get_effective_affinity_mask(data), mask);
213 }
214 #else
215 static inline void irq_validate_effective_affinity(struct irq_data *data) { }
216 static inline void irq_init_effective_affinity(struct irq_data *data,
217                                                const struct cpumask *mask) { }
218 #endif
219
220 int irq_do_set_affinity(struct irq_data *data, const struct cpumask *mask,
221                         bool force)
222 {
223         struct irq_desc *desc = irq_data_to_desc(data);
224         struct irq_chip *chip = irq_data_get_irq_chip(data);
225         int ret;
226
227         if (!chip || !chip->irq_set_affinity)
228                 return -EINVAL;
229
230         ret = chip->irq_set_affinity(data, mask, force);
231         switch (ret) {
232         case IRQ_SET_MASK_OK:
233         case IRQ_SET_MASK_OK_DONE:
234                 cpumask_copy(desc->irq_common_data.affinity, mask);
235         case IRQ_SET_MASK_OK_NOCOPY:
236                 irq_validate_effective_affinity(data);
237                 irq_set_thread_affinity(desc);
238                 ret = 0;
239         }
240
241         return ret;
242 }
243
244 #ifdef CONFIG_GENERIC_PENDING_IRQ
245 static inline int irq_set_affinity_pending(struct irq_data *data,
246                                            const struct cpumask *dest)
247 {
248         struct irq_desc *desc = irq_data_to_desc(data);
249
250         irqd_set_move_pending(data);
251         irq_copy_pending(desc, dest);
252         return 0;
253 }
254 #else
255 static inline int irq_set_affinity_pending(struct irq_data *data,
256                                            const struct cpumask *dest)
257 {
258         return -EBUSY;
259 }
260 #endif
261
262 static int irq_try_set_affinity(struct irq_data *data,
263                                 const struct cpumask *dest, bool force)
264 {
265         int ret = irq_do_set_affinity(data, dest, force);
266
267         /*
268          * In case that the underlying vector management is busy and the
269          * architecture supports the generic pending mechanism then utilize
270          * this to avoid returning an error to user space.
271          */
272         if (ret == -EBUSY && !force)
273                 ret = irq_set_affinity_pending(data, dest);
274         return ret;
275 }
276
277 static bool irq_set_affinity_deactivated(struct irq_data *data,
278                                          const struct cpumask *mask, bool force)
279 {
280         struct irq_desc *desc = irq_data_to_desc(data);
281
282         /*
283          * Handle irq chips which can handle affinity only in activated
284          * state correctly
285          *
286          * If the interrupt is not yet activated, just store the affinity
287          * mask and do not call the chip driver at all. On activation the
288          * driver has to make sure anyway that the interrupt is in a
289          * useable state so startup works.
290          */
291         if (!IS_ENABLED(CONFIG_IRQ_DOMAIN_HIERARCHY) ||
292             irqd_is_activated(data) || !irqd_affinity_on_activate(data))
293                 return false;
294
295         cpumask_copy(desc->irq_common_data.affinity, mask);
296         irq_init_effective_affinity(data, mask);
297         irqd_set(data, IRQD_AFFINITY_SET);
298         return true;
299 }
300
301 int irq_set_affinity_locked(struct irq_data *data, const struct cpumask *mask,
302                             bool force)
303 {
304         struct irq_chip *chip = irq_data_get_irq_chip(data);
305         struct irq_desc *desc = irq_data_to_desc(data);
306         int ret = 0;
307
308         if (!chip || !chip->irq_set_affinity)
309                 return -EINVAL;
310
311         if (irq_set_affinity_deactivated(data, mask, force))
312                 return 0;
313
314         if (irq_can_move_pcntxt(data) && !irqd_is_setaffinity_pending(data)) {
315                 ret = irq_try_set_affinity(data, mask, force);
316         } else {
317                 irqd_set_move_pending(data);
318                 irq_copy_pending(desc, mask);
319         }
320
321         if (desc->affinity_notify) {
322                 kref_get(&desc->affinity_notify->kref);
323                 if (!schedule_work(&desc->affinity_notify->work)) {
324                         /* Work was already scheduled, drop our extra ref */
325                         kref_put(&desc->affinity_notify->kref,
326                                  desc->affinity_notify->release);
327                 }
328         }
329         irqd_set(data, IRQD_AFFINITY_SET);
330
331         return ret;
332 }
333
334 int __irq_set_affinity(unsigned int irq, const struct cpumask *mask, bool force)
335 {
336         struct irq_desc *desc = irq_to_desc(irq);
337         unsigned long flags;
338         int ret;
339
340         if (!desc)
341                 return -EINVAL;
342
343         raw_spin_lock_irqsave(&desc->lock, flags);
344         ret = irq_set_affinity_locked(irq_desc_get_irq_data(desc), mask, force);
345         raw_spin_unlock_irqrestore(&desc->lock, flags);
346         return ret;
347 }
348
349 int irq_set_affinity_hint(unsigned int irq, const struct cpumask *m)
350 {
351         unsigned long flags;
352         struct irq_desc *desc = irq_get_desc_lock(irq, &flags, IRQ_GET_DESC_CHECK_GLOBAL);
353
354         if (!desc)
355                 return -EINVAL;
356         desc->affinity_hint = m;
357         irq_put_desc_unlock(desc, flags);
358         /* set the initial affinity to prevent every interrupt being on CPU0 */
359         if (m)
360                 __irq_set_affinity(irq, m, false);
361         return 0;
362 }
363 EXPORT_SYMBOL_GPL(irq_set_affinity_hint);
364
365 static void irq_affinity_notify(struct work_struct *work)
366 {
367         struct irq_affinity_notify *notify =
368                 container_of(work, struct irq_affinity_notify, work);
369         struct irq_desc *desc = irq_to_desc(notify->irq);
370         cpumask_var_t cpumask;
371         unsigned long flags;
372
373         if (!desc || !alloc_cpumask_var(&cpumask, GFP_KERNEL))
374                 goto out;
375
376         raw_spin_lock_irqsave(&desc->lock, flags);
377         if (irq_move_pending(&desc->irq_data))
378                 irq_get_pending(cpumask, desc);
379         else
380                 cpumask_copy(cpumask, desc->irq_common_data.affinity);
381         raw_spin_unlock_irqrestore(&desc->lock, flags);
382
383         notify->notify(notify, cpumask);
384
385         free_cpumask_var(cpumask);
386 out:
387         kref_put(&notify->kref, notify->release);
388 }
389
390 /**
391  *      irq_set_affinity_notifier - control notification of IRQ affinity changes
392  *      @irq:           Interrupt for which to enable/disable notification
393  *      @notify:        Context for notification, or %NULL to disable
394  *                      notification.  Function pointers must be initialised;
395  *                      the other fields will be initialised by this function.
396  *
397  *      Must be called in process context.  Notification may only be enabled
398  *      after the IRQ is allocated and must be disabled before the IRQ is
399  *      freed using free_irq().
400  */
401 int
402 irq_set_affinity_notifier(unsigned int irq, struct irq_affinity_notify *notify)
403 {
404         struct irq_desc *desc = irq_to_desc(irq);
405         struct irq_affinity_notify *old_notify;
406         unsigned long flags;
407
408         /* The release function is promised process context */
409         might_sleep();
410
411         if (!desc)
412                 return -EINVAL;
413
414         /* Complete initialisation of *notify */
415         if (notify) {
416                 notify->irq = irq;
417                 kref_init(&notify->kref);
418                 INIT_WORK(&notify->work, irq_affinity_notify);
419         }
420
421         raw_spin_lock_irqsave(&desc->lock, flags);
422         old_notify = desc->affinity_notify;
423         desc->affinity_notify = notify;
424         raw_spin_unlock_irqrestore(&desc->lock, flags);
425
426         if (old_notify) {
427                 if (cancel_work_sync(&old_notify->work)) {
428                         /* Pending work had a ref, put that one too */
429                         kref_put(&old_notify->kref, old_notify->release);
430                 }
431                 kref_put(&old_notify->kref, old_notify->release);
432         }
433
434         return 0;
435 }
436 EXPORT_SYMBOL_GPL(irq_set_affinity_notifier);
437
438 #ifndef CONFIG_AUTO_IRQ_AFFINITY
439 /*
440  * Generic version of the affinity autoselector.
441  */
442 int irq_setup_affinity(struct irq_desc *desc)
443 {
444         struct cpumask *set = irq_default_affinity;
445         int ret, node = irq_desc_get_node(desc);
446         static DEFINE_RAW_SPINLOCK(mask_lock);
447         static struct cpumask mask;
448
449         /* Excludes PER_CPU and NO_BALANCE interrupts */
450         if (!__irq_can_set_affinity(desc))
451                 return 0;
452
453         raw_spin_lock(&mask_lock);
454         /*
455          * Preserve the managed affinity setting and a userspace affinity
456          * setup, but make sure that one of the targets is online.
457          */
458         if (irqd_affinity_is_managed(&desc->irq_data) ||
459             irqd_has_set(&desc->irq_data, IRQD_AFFINITY_SET)) {
460                 if (cpumask_intersects(desc->irq_common_data.affinity,
461                                        cpu_online_mask))
462                         set = desc->irq_common_data.affinity;
463                 else
464                         irqd_clear(&desc->irq_data, IRQD_AFFINITY_SET);
465         }
466
467         cpumask_and(&mask, cpu_online_mask, set);
468         if (cpumask_empty(&mask))
469                 cpumask_copy(&mask, cpu_online_mask);
470
471         if (node != NUMA_NO_NODE) {
472                 const struct cpumask *nodemask = cpumask_of_node(node);
473
474                 /* make sure at least one of the cpus in nodemask is online */
475                 if (cpumask_intersects(&mask, nodemask))
476                         cpumask_and(&mask, &mask, nodemask);
477         }
478         ret = irq_do_set_affinity(&desc->irq_data, &mask, false);
479         raw_spin_unlock(&mask_lock);
480         return ret;
481 }
482 #else
483 /* Wrapper for ALPHA specific affinity selector magic */
484 int irq_setup_affinity(struct irq_desc *desc)
485 {
486         return irq_select_affinity(irq_desc_get_irq(desc));
487 }
488 #endif /* CONFIG_AUTO_IRQ_AFFINITY */
489 #endif /* CONFIG_SMP */
490
491
492 /**
493  *      irq_set_vcpu_affinity - Set vcpu affinity for the interrupt
494  *      @irq: interrupt number to set affinity
495  *      @vcpu_info: vCPU specific data or pointer to a percpu array of vCPU
496  *                  specific data for percpu_devid interrupts
497  *
498  *      This function uses the vCPU specific data to set the vCPU
499  *      affinity for an irq. The vCPU specific data is passed from
500  *      outside, such as KVM. One example code path is as below:
501  *      KVM -> IOMMU -> irq_set_vcpu_affinity().
502  */
503 int irq_set_vcpu_affinity(unsigned int irq, void *vcpu_info)
504 {
505         unsigned long flags;
506         struct irq_desc *desc = irq_get_desc_lock(irq, &flags, 0);
507         struct irq_data *data;
508         struct irq_chip *chip;
509         int ret = -ENOSYS;
510
511         if (!desc)
512                 return -EINVAL;
513
514         data = irq_desc_get_irq_data(desc);
515         do {
516                 chip = irq_data_get_irq_chip(data);
517                 if (chip && chip->irq_set_vcpu_affinity)
518                         break;
519 #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
520                 data = data->parent_data;
521 #else
522                 data = NULL;
523 #endif
524         } while (data);
525
526         if (data)
527                 ret = chip->irq_set_vcpu_affinity(data, vcpu_info);
528         irq_put_desc_unlock(desc, flags);
529
530         return ret;
531 }
532 EXPORT_SYMBOL_GPL(irq_set_vcpu_affinity);
533
534 void __disable_irq(struct irq_desc *desc)
535 {
536         if (!desc->depth++)
537                 irq_disable(desc);
538 }
539
540 static int __disable_irq_nosync(unsigned int irq)
541 {
542         unsigned long flags;
543         struct irq_desc *desc = irq_get_desc_buslock(irq, &flags, IRQ_GET_DESC_CHECK_GLOBAL);
544
545         if (!desc)
546                 return -EINVAL;
547         __disable_irq(desc);
548         irq_put_desc_busunlock(desc, flags);
549         return 0;
550 }
551
552 /**
553  *      disable_irq_nosync - disable an irq without waiting
554  *      @irq: Interrupt to disable
555  *
556  *      Disable the selected interrupt line.  Disables and Enables are
557  *      nested.
558  *      Unlike disable_irq(), this function does not ensure existing
559  *      instances of the IRQ handler have completed before returning.
560  *
561  *      This function may be called from IRQ context.
562  */
563 void disable_irq_nosync(unsigned int irq)
564 {
565         __disable_irq_nosync(irq);
566 }
567 EXPORT_SYMBOL(disable_irq_nosync);
568
569 /**
570  *      disable_irq - disable an irq and wait for completion
571  *      @irq: Interrupt to disable
572  *
573  *      Disable the selected interrupt line.  Enables and Disables are
574  *      nested.
575  *      This function waits for any pending IRQ handlers for this interrupt
576  *      to complete before returning. If you use this function while
577  *      holding a resource the IRQ handler may need you will deadlock.
578  *
579  *      This function may be called - with care - from IRQ context.
580  */
581 void disable_irq(unsigned int irq)
582 {
583         if (!__disable_irq_nosync(irq))
584                 synchronize_irq(irq);
585 }
586 EXPORT_SYMBOL(disable_irq);
587
588 /**
589  *      disable_hardirq - disables an irq and waits for hardirq completion
590  *      @irq: Interrupt to disable
591  *
592  *      Disable the selected interrupt line.  Enables and Disables are
593  *      nested.
594  *      This function waits for any pending hard IRQ handlers for this
595  *      interrupt to complete before returning. If you use this function while
596  *      holding a resource the hard IRQ handler may need you will deadlock.
597  *
598  *      When used to optimistically disable an interrupt from atomic context
599  *      the return value must be checked.
600  *
601  *      Returns: false if a threaded handler is active.
602  *
603  *      This function may be called - with care - from IRQ context.
604  */
605 bool disable_hardirq(unsigned int irq)
606 {
607         if (!__disable_irq_nosync(irq))
608                 return synchronize_hardirq(irq);
609
610         return false;
611 }
612 EXPORT_SYMBOL_GPL(disable_hardirq);
613
614 void __enable_irq(struct irq_desc *desc)
615 {
616         switch (desc->depth) {
617         case 0:
618  err_out:
619                 WARN(1, KERN_WARNING "Unbalanced enable for IRQ %d\n",
620                      irq_desc_get_irq(desc));
621                 break;
622         case 1: {
623                 if (desc->istate & IRQS_SUSPENDED)
624                         goto err_out;
625                 /* Prevent probing on this irq: */
626                 irq_settings_set_noprobe(desc);
627                 /*
628                  * Call irq_startup() not irq_enable() here because the
629                  * interrupt might be marked NOAUTOEN. So irq_startup()
630                  * needs to be invoked when it gets enabled the first
631                  * time. If it was already started up, then irq_startup()
632                  * will invoke irq_enable() under the hood.
633                  */
634                 irq_startup(desc, IRQ_RESEND, IRQ_START_FORCE);
635                 break;
636         }
637         default:
638                 desc->depth--;
639         }
640 }
641
642 /**
643  *      enable_irq - enable handling of an irq
644  *      @irq: Interrupt to enable
645  *
646  *      Undoes the effect of one call to disable_irq().  If this
647  *      matches the last disable, processing of interrupts on this
648  *      IRQ line is re-enabled.
649  *
650  *      This function may be called from IRQ context only when
651  *      desc->irq_data.chip->bus_lock and desc->chip->bus_sync_unlock are NULL !
652  */
653 void enable_irq(unsigned int irq)
654 {
655         unsigned long flags;
656         struct irq_desc *desc = irq_get_desc_buslock(irq, &flags, IRQ_GET_DESC_CHECK_GLOBAL);
657
658         if (!desc)
659                 return;
660         if (WARN(!desc->irq_data.chip,
661                  KERN_ERR "enable_irq before setup/request_irq: irq %u\n", irq))
662                 goto out;
663
664         __enable_irq(desc);
665 out:
666         irq_put_desc_busunlock(desc, flags);
667 }
668 EXPORT_SYMBOL(enable_irq);
669
670 static 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  *      irq_set_irq_wake - control irq power management wakeup
686  *      @irq:   interrupt to control
687  *      @on:    enable/disable power management wakeup
688  *
689  *      Enable/disable power management wakeup mode, which is
690  *      disabled by default.  Enables and disables must match,
691  *      just as they match for non-wakeup mode support.
692  *
693  *      Wakeup mode lets this IRQ wake the system from sleep
694  *      states like "suspend to RAM".
695  */
696 int 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         /* wakeup-capable irqs can be shared between drivers that
706          * don't need to have the same sleep mode behaviors.
707          */
708         if (on) {
709                 if (desc->wake_depth++ == 0) {
710                         ret = set_irq_wake_real(irq, on);
711                         if (ret)
712                                 desc->wake_depth = 0;
713                         else
714                                 irqd_set(&desc->irq_data, IRQD_WAKEUP_STATE);
715                 }
716         } else {
717                 if (desc->wake_depth == 0) {
718                         WARN(1, "Unbalanced IRQ %d wake disable\n", irq);
719                 } else if (--desc->wake_depth == 0) {
720                         ret = set_irq_wake_real(irq, on);
721                         if (ret)
722                                 desc->wake_depth = 1;
723                         else
724                                 irqd_clear(&desc->irq_data, IRQD_WAKEUP_STATE);
725                 }
726         }
727         irq_put_desc_busunlock(desc, flags);
728         return ret;
729 }
730 EXPORT_SYMBOL(irq_set_irq_wake);
731
732 /*
733  * Internal function that tells the architecture code whether a
734  * particular irq has been exclusively allocated or is available
735  * for driver use.
736  */
737 int can_request_irq(unsigned int irq, unsigned long irqflags)
738 {
739         unsigned long flags;
740         struct irq_desc *desc = irq_get_desc_lock(irq, &flags, 0);
741         int canrequest = 0;
742
743         if (!desc)
744                 return 0;
745
746         if (irq_settings_can_request(desc)) {
747                 if (!desc->action ||
748                     irqflags & desc->action->flags & IRQF_SHARED)
749                         canrequest = 1;
750         }
751         irq_put_desc_unlock(desc, flags);
752         return canrequest;
753 }
754
755 int __irq_set_trigger(struct irq_desc *desc, unsigned long flags)
756 {
757         struct irq_chip *chip = desc->irq_data.chip;
758         int ret, unmask = 0;
759
760         if (!chip || !chip->irq_set_type) {
761                 /*
762                  * IRQF_TRIGGER_* but the PIC does not support multiple
763                  * flow-types?
764                  */
765                 pr_debug("No set_type function for IRQ %d (%s)\n",
766                          irq_desc_get_irq(desc),
767                          chip ? (chip->name ? : "unknown") : "unknown");
768                 return 0;
769         }
770
771         if (chip->flags & IRQCHIP_SET_TYPE_MASKED) {
772                 if (!irqd_irq_masked(&desc->irq_data))
773                         mask_irq(desc);
774                 if (!irqd_irq_disabled(&desc->irq_data))
775                         unmask = 1;
776         }
777
778         /* Mask all flags except trigger mode */
779         flags &= IRQ_TYPE_SENSE_MASK;
780         ret = chip->irq_set_type(&desc->irq_data, flags);
781
782         switch (ret) {
783         case IRQ_SET_MASK_OK:
784         case IRQ_SET_MASK_OK_DONE:
785                 irqd_clear(&desc->irq_data, IRQD_TRIGGER_MASK);
786                 irqd_set(&desc->irq_data, flags);
787
788         case IRQ_SET_MASK_OK_NOCOPY:
789                 flags = irqd_get_trigger_type(&desc->irq_data);
790                 irq_settings_set_trigger_mask(desc, flags);
791                 irqd_clear(&desc->irq_data, IRQD_LEVEL);
792                 irq_settings_clr_level(desc);
793                 if (flags & IRQ_TYPE_LEVEL_MASK) {
794                         irq_settings_set_level(desc);
795                         irqd_set(&desc->irq_data, IRQD_LEVEL);
796                 }
797
798                 ret = 0;
799                 break;
800         default:
801                 pr_err("Setting trigger mode %lu for irq %u failed (%pF)\n",
802                        flags, irq_desc_get_irq(desc), chip->irq_set_type);
803         }
804         if (unmask)
805                 unmask_irq(desc);
806         return ret;
807 }
808
809 #ifdef CONFIG_HARDIRQS_SW_RESEND
810 int irq_set_parent(int irq, int parent_irq)
811 {
812         unsigned long flags;
813         struct irq_desc *desc = irq_get_desc_lock(irq, &flags, 0);
814
815         if (!desc)
816                 return -EINVAL;
817
818         desc->parent_irq = parent_irq;
819
820         irq_put_desc_unlock(desc, flags);
821         return 0;
822 }
823 EXPORT_SYMBOL_GPL(irq_set_parent);
824 #endif
825
826 /*
827  * Default primary interrupt handler for threaded interrupts. Is
828  * assigned as primary handler when request_threaded_irq is called
829  * with handler == NULL. Useful for oneshot interrupts.
830  */
831 static irqreturn_t irq_default_primary_handler(int irq, void *dev_id)
832 {
833         return IRQ_WAKE_THREAD;
834 }
835
836 /*
837  * Primary handler for nested threaded interrupts. Should never be
838  * called.
839  */
840 static irqreturn_t irq_nested_primary_handler(int irq, void *dev_id)
841 {
842         WARN(1, "Primary handler called for nested irq %d\n", irq);
843         return IRQ_NONE;
844 }
845
846 static irqreturn_t irq_forced_secondary_handler(int irq, void *dev_id)
847 {
848         WARN(1, "Secondary action handler called for irq %d\n", irq);
849         return IRQ_NONE;
850 }
851
852 static int irq_wait_for_interrupt(struct irqaction *action)
853 {
854         for (;;) {
855                 set_current_state(TASK_INTERRUPTIBLE);
856
857                 if (kthread_should_stop()) {
858                         /* may need to run one last time */
859                         if (test_and_clear_bit(IRQTF_RUNTHREAD,
860                                                &action->thread_flags)) {
861                                 __set_current_state(TASK_RUNNING);
862                                 return 0;
863                         }
864                         __set_current_state(TASK_RUNNING);
865                         return -1;
866                 }
867
868                 if (test_and_clear_bit(IRQTF_RUNTHREAD,
869                                        &action->thread_flags)) {
870                         __set_current_state(TASK_RUNNING);
871                         return 0;
872                 }
873                 schedule();
874         }
875 }
876
877 /*
878  * Oneshot interrupts keep the irq line masked until the threaded
879  * handler finished. unmask if the interrupt has not been disabled and
880  * is marked MASKED.
881  */
882 static void irq_finalize_oneshot(struct irq_desc *desc,
883                                  struct irqaction *action)
884 {
885         if (!(desc->istate & IRQS_ONESHOT) ||
886             action->handler == irq_forced_secondary_handler)
887                 return;
888 again:
889         chip_bus_lock(desc);
890         raw_spin_lock_irq(&desc->lock);
891
892         /*
893          * Implausible though it may be we need to protect us against
894          * the following scenario:
895          *
896          * The thread is faster done than the hard interrupt handler
897          * on the other CPU. If we unmask the irq line then the
898          * interrupt can come in again and masks the line, leaves due
899          * to IRQS_INPROGRESS and the irq line is masked forever.
900          *
901          * This also serializes the state of shared oneshot handlers
902          * versus "desc->threads_onehsot |= action->thread_mask;" in
903          * irq_wake_thread(). See the comment there which explains the
904          * serialization.
905          */
906         if (unlikely(irqd_irq_inprogress(&desc->irq_data))) {
907                 raw_spin_unlock_irq(&desc->lock);
908                 chip_bus_sync_unlock(desc);
909                 cpu_relax();
910                 goto again;
911         }
912
913         /*
914          * Now check again, whether the thread should run. Otherwise
915          * we would clear the threads_oneshot bit of this thread which
916          * was just set.
917          */
918         if (test_bit(IRQTF_RUNTHREAD, &action->thread_flags))
919                 goto out_unlock;
920
921         desc->threads_oneshot &= ~action->thread_mask;
922
923         if (!desc->threads_oneshot && !irqd_irq_disabled(&desc->irq_data) &&
924             irqd_irq_masked(&desc->irq_data))
925                 unmask_threaded_irq(desc);
926
927 out_unlock:
928         raw_spin_unlock_irq(&desc->lock);
929         chip_bus_sync_unlock(desc);
930 }
931
932 #ifdef CONFIG_SMP
933 /*
934  * Check whether we need to change the affinity of the interrupt thread.
935  */
936 static void
937 irq_thread_check_affinity(struct irq_desc *desc, struct irqaction *action)
938 {
939         cpumask_var_t mask;
940         bool valid = true;
941
942         if (!test_and_clear_bit(IRQTF_AFFINITY, &action->thread_flags))
943                 return;
944
945         /*
946          * In case we are out of memory we set IRQTF_AFFINITY again and
947          * try again next time
948          */
949         if (!alloc_cpumask_var(&mask, GFP_KERNEL)) {
950                 set_bit(IRQTF_AFFINITY, &action->thread_flags);
951                 return;
952         }
953
954         raw_spin_lock_irq(&desc->lock);
955         /*
956          * This code is triggered unconditionally. Check the affinity
957          * mask pointer. For CPU_MASK_OFFSTACK=n this is optimized out.
958          */
959         if (cpumask_available(desc->irq_common_data.affinity)) {
960                 const struct cpumask *m;
961
962                 m = irq_data_get_effective_affinity_mask(&desc->irq_data);
963                 cpumask_copy(mask, m);
964         } else {
965                 valid = false;
966         }
967         raw_spin_unlock_irq(&desc->lock);
968
969         if (valid)
970                 set_cpus_allowed_ptr(current, mask);
971         free_cpumask_var(mask);
972 }
973 #else
974 static inline void
975 irq_thread_check_affinity(struct irq_desc *desc, struct irqaction *action) { }
976 #endif
977
978 /*
979  * Interrupts which are not explicitely requested as threaded
980  * interrupts rely on the implicit bh/preempt disable of the hard irq
981  * context. So we need to disable bh here to avoid deadlocks and other
982  * side effects.
983  */
984 static irqreturn_t
985 irq_forced_thread_fn(struct irq_desc *desc, struct irqaction *action)
986 {
987         irqreturn_t ret;
988
989         local_bh_disable();
990         if (!IS_ENABLED(CONFIG_PREEMPT_RT_BASE))
991                 local_irq_disable();
992         ret = action->thread_fn(action->irq, action->dev_id);
993         if (ret == IRQ_HANDLED)
994                 atomic_inc(&desc->threads_handled);
995
996         irq_finalize_oneshot(desc, action);
997         if (!IS_ENABLED(CONFIG_PREEMPT_RT_BASE))
998                 local_irq_enable();
999         local_bh_enable();
1000         return ret;
1001 }
1002
1003 /*
1004  * Interrupts explicitly requested as threaded interrupts want to be
1005  * preemtible - many of them need to sleep and wait for slow busses to
1006  * complete.
1007  */
1008 static irqreturn_t irq_thread_fn(struct irq_desc *desc,
1009                 struct irqaction *action)
1010 {
1011         irqreturn_t ret;
1012
1013         ret = action->thread_fn(action->irq, action->dev_id);
1014         if (ret == IRQ_HANDLED)
1015                 atomic_inc(&desc->threads_handled);
1016
1017         irq_finalize_oneshot(desc, action);
1018         return ret;
1019 }
1020
1021 static void wake_threads_waitq(struct irq_desc *desc)
1022 {
1023         if (atomic_dec_and_test(&desc->threads_active))
1024                 wake_up(&desc->wait_for_threads);
1025 }
1026
1027 static void irq_thread_dtor(struct callback_head *unused)
1028 {
1029         struct task_struct *tsk = current;
1030         struct irq_desc *desc;
1031         struct irqaction *action;
1032
1033         if (WARN_ON_ONCE(!(current->flags & PF_EXITING)))
1034                 return;
1035
1036         action = kthread_data(tsk);
1037
1038         pr_err("exiting task \"%s\" (%d) is an active IRQ thread (irq %d)\n",
1039                tsk->comm, tsk->pid, action->irq);
1040
1041
1042         desc = irq_to_desc(action->irq);
1043         /*
1044          * If IRQTF_RUNTHREAD is set, we need to decrement
1045          * desc->threads_active and wake possible waiters.
1046          */
1047         if (test_and_clear_bit(IRQTF_RUNTHREAD, &action->thread_flags))
1048                 wake_threads_waitq(desc);
1049
1050         /* Prevent a stale desc->threads_oneshot */
1051         irq_finalize_oneshot(desc, action);
1052 }
1053
1054 static void irq_wake_secondary(struct irq_desc *desc, struct irqaction *action)
1055 {
1056         struct irqaction *secondary = action->secondary;
1057
1058         if (WARN_ON_ONCE(!secondary))
1059                 return;
1060
1061         raw_spin_lock_irq(&desc->lock);
1062         __irq_wake_thread(desc, secondary);
1063         raw_spin_unlock_irq(&desc->lock);
1064 }
1065
1066 /*
1067  * Internal function to notify that a interrupt thread is ready.
1068  */
1069 static void irq_thread_set_ready(struct irq_desc *desc,
1070                                  struct irqaction *action)
1071 {
1072         set_bit(IRQTF_READY, &action->thread_flags);
1073         wake_up(&desc->wait_for_threads);
1074 }
1075
1076 /*
1077  * Internal function to wake up a interrupt thread and wait until it is
1078  * ready.
1079  */
1080 static void wake_up_and_wait_for_irq_thread_ready(struct irq_desc *desc,
1081                                                   struct irqaction *action)
1082 {
1083         if (!action || !action->thread)
1084                 return;
1085
1086         wake_up_process(action->thread);
1087         wait_event(desc->wait_for_threads,
1088                    test_bit(IRQTF_READY, &action->thread_flags));
1089 }
1090
1091 /*
1092  * Interrupt handler thread
1093  */
1094 static int irq_thread(void *data)
1095 {
1096         struct callback_head on_exit_work;
1097         struct irqaction *action = data;
1098         struct irq_desc *desc = irq_to_desc(action->irq);
1099         irqreturn_t (*handler_fn)(struct irq_desc *desc,
1100                         struct irqaction *action);
1101
1102         irq_thread_set_ready(desc, action);
1103
1104         if (force_irqthreads && test_bit(IRQTF_FORCED_THREAD,
1105                                         &action->thread_flags))
1106                 handler_fn = irq_forced_thread_fn;
1107         else
1108                 handler_fn = irq_thread_fn;
1109
1110         init_task_work(&on_exit_work, irq_thread_dtor);
1111         task_work_add(current, &on_exit_work, false);
1112
1113         irq_thread_check_affinity(desc, action);
1114
1115         while (!irq_wait_for_interrupt(action)) {
1116                 irqreturn_t action_ret;
1117
1118                 irq_thread_check_affinity(desc, action);
1119
1120                 action_ret = handler_fn(desc, action);
1121                 if (action_ret == IRQ_WAKE_THREAD)
1122                         irq_wake_secondary(desc, action);
1123
1124                 wake_threads_waitq(desc);
1125         }
1126
1127         /*
1128          * This is the regular exit path. __free_irq() is stopping the
1129          * thread via kthread_stop() after calling
1130          * synchronize_hardirq(). So neither IRQTF_RUNTHREAD nor the
1131          * oneshot mask bit can be set.
1132          */
1133         task_work_cancel(current, irq_thread_dtor);
1134         return 0;
1135 }
1136
1137 /**
1138  *      irq_wake_thread - wake the irq thread for the action identified by dev_id
1139  *      @irq:           Interrupt line
1140  *      @dev_id:        Device identity for which the thread should be woken
1141  *
1142  */
1143 void irq_wake_thread(unsigned int irq, void *dev_id)
1144 {
1145         struct irq_desc *desc = irq_to_desc(irq);
1146         struct irqaction *action;
1147         unsigned long flags;
1148
1149         if (!desc || WARN_ON(irq_settings_is_per_cpu_devid(desc)))
1150                 return;
1151
1152         raw_spin_lock_irqsave(&desc->lock, flags);
1153         for_each_action_of_desc(desc, action) {
1154                 if (action->dev_id == dev_id) {
1155                         if (action->thread)
1156                                 __irq_wake_thread(desc, action);
1157                         break;
1158                 }
1159         }
1160         raw_spin_unlock_irqrestore(&desc->lock, flags);
1161 }
1162 EXPORT_SYMBOL_GPL(irq_wake_thread);
1163
1164 static int irq_setup_forced_threading(struct irqaction *new)
1165 {
1166         if (!force_irqthreads)
1167                 return 0;
1168         if (new->flags & (IRQF_NO_THREAD | IRQF_PERCPU | IRQF_ONESHOT))
1169                 return 0;
1170
1171         /*
1172          * No further action required for interrupts which are requested as
1173          * threaded interrupts already
1174          */
1175         if (new->handler == irq_default_primary_handler)
1176                 return 0;
1177
1178         new->flags |= IRQF_ONESHOT;
1179
1180         /*
1181          * Handle the case where we have a real primary handler and a
1182          * thread handler. We force thread them as well by creating a
1183          * secondary action.
1184          */
1185         if (new->handler && new->thread_fn) {
1186                 /* Allocate the secondary action */
1187                 new->secondary = kzalloc(sizeof(struct irqaction), GFP_KERNEL);
1188                 if (!new->secondary)
1189                         return -ENOMEM;
1190                 new->secondary->handler = irq_forced_secondary_handler;
1191                 new->secondary->thread_fn = new->thread_fn;
1192                 new->secondary->dev_id = new->dev_id;
1193                 new->secondary->irq = new->irq;
1194                 new->secondary->name = new->name;
1195         }
1196         /* Deal with the primary handler */
1197         set_bit(IRQTF_FORCED_THREAD, &new->thread_flags);
1198         new->thread_fn = new->handler;
1199         new->handler = irq_default_primary_handler;
1200         return 0;
1201 }
1202
1203 static int irq_request_resources(struct irq_desc *desc)
1204 {
1205         struct irq_data *d = &desc->irq_data;
1206         struct irq_chip *c = d->chip;
1207
1208         return c->irq_request_resources ? c->irq_request_resources(d) : 0;
1209 }
1210
1211 static void irq_release_resources(struct irq_desc *desc)
1212 {
1213         struct irq_data *d = &desc->irq_data;
1214         struct irq_chip *c = d->chip;
1215
1216         if (c->irq_release_resources)
1217                 c->irq_release_resources(d);
1218 }
1219
1220 static int
1221 setup_irq_thread(struct irqaction *new, unsigned int irq, bool secondary)
1222 {
1223         struct task_struct *t;
1224         struct sched_param param = {
1225                 .sched_priority = MAX_USER_RT_PRIO/2,
1226         };
1227
1228         if (!secondary) {
1229                 t = kthread_create(irq_thread, new, "irq/%d-%s", irq,
1230                                    new->name);
1231         } else {
1232                 t = kthread_create(irq_thread, new, "irq/%d-s-%s", irq,
1233                                    new->name);
1234                 param.sched_priority -= 1;
1235         }
1236
1237         if (IS_ERR(t))
1238                 return PTR_ERR(t);
1239
1240         sched_setscheduler_nocheck(t, SCHED_FIFO, &param);
1241
1242         /*
1243          * We keep the reference to the task struct even if
1244          * the thread dies to avoid that the interrupt code
1245          * references an already freed task_struct.
1246          */
1247         get_task_struct(t);
1248         new->thread = t;
1249         /*
1250          * Tell the thread to set its affinity. This is
1251          * important for shared interrupt handlers as we do
1252          * not invoke setup_affinity() for the secondary
1253          * handlers as everything is already set up. Even for
1254          * interrupts marked with IRQF_NO_BALANCE this is
1255          * correct as we want the thread to move to the cpu(s)
1256          * on which the requesting code placed the interrupt.
1257          */
1258         set_bit(IRQTF_AFFINITY, &new->thread_flags);
1259         return 0;
1260 }
1261
1262 /*
1263  * Internal function to register an irqaction - typically used to
1264  * allocate special interrupts that are part of the architecture.
1265  *
1266  * Locking rules:
1267  *
1268  * desc->request_mutex  Provides serialization against a concurrent free_irq()
1269  *   chip_bus_lock      Provides serialization for slow bus operations
1270  *     desc->lock       Provides serialization against hard interrupts
1271  *
1272  * chip_bus_lock and desc->lock are sufficient for all other management and
1273  * interrupt related functions. desc->request_mutex solely serializes
1274  * request/free_irq().
1275  */
1276 static int
1277 __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
1278 {
1279         struct irqaction *old, **old_ptr;
1280         unsigned long flags, thread_mask = 0;
1281         int ret, nested, shared = 0;
1282
1283         if (!desc)
1284                 return -EINVAL;
1285
1286         if (desc->irq_data.chip == &no_irq_chip)
1287                 return -ENOSYS;
1288         if (!try_module_get(desc->owner))
1289                 return -ENODEV;
1290
1291         new->irq = irq;
1292
1293         /*
1294          * If the trigger type is not specified by the caller,
1295          * then use the default for this interrupt.
1296          */
1297         if (!(new->flags & IRQF_TRIGGER_MASK))
1298                 new->flags |= irqd_get_trigger_type(&desc->irq_data);
1299
1300         /*
1301          * Check whether the interrupt nests into another interrupt
1302          * thread.
1303          */
1304         nested = irq_settings_is_nested_thread(desc);
1305         if (nested) {
1306                 if (!new->thread_fn) {
1307                         ret = -EINVAL;
1308                         goto out_mput;
1309                 }
1310                 /*
1311                  * Replace the primary handler which was provided from
1312                  * the driver for non nested interrupt handling by the
1313                  * dummy function which warns when called.
1314                  */
1315                 new->handler = irq_nested_primary_handler;
1316         } else {
1317                 if (irq_settings_can_thread(desc)) {
1318                         ret = irq_setup_forced_threading(new);
1319                         if (ret)
1320                                 goto out_mput;
1321                 }
1322         }
1323
1324         /*
1325          * Create a handler thread when a thread function is supplied
1326          * and the interrupt does not nest into another interrupt
1327          * thread.
1328          */
1329         if (new->thread_fn && !nested) {
1330                 ret = setup_irq_thread(new, irq, false);
1331                 if (ret)
1332                         goto out_mput;
1333                 if (new->secondary) {
1334                         ret = setup_irq_thread(new->secondary, irq, true);
1335                         if (ret)
1336                                 goto out_thread;
1337                 }
1338         }
1339
1340         /*
1341          * Drivers are often written to work w/o knowledge about the
1342          * underlying irq chip implementation, so a request for a
1343          * threaded irq without a primary hard irq context handler
1344          * requires the ONESHOT flag to be set. Some irq chips like
1345          * MSI based interrupts are per se one shot safe. Check the
1346          * chip flags, so we can avoid the unmask dance at the end of
1347          * the threaded handler for those.
1348          */
1349         if (desc->irq_data.chip->flags & IRQCHIP_ONESHOT_SAFE)
1350                 new->flags &= ~IRQF_ONESHOT;
1351
1352         /*
1353          * Protects against a concurrent __free_irq() call which might wait
1354          * for synchronize_hardirq() to complete without holding the optional
1355          * chip bus lock and desc->lock. Also protects against handing out
1356          * a recycled oneshot thread_mask bit while it's still in use by
1357          * its previous owner.
1358          */
1359         mutex_lock(&desc->request_mutex);
1360
1361         /*
1362          * Acquire bus lock as the irq_request_resources() callback below
1363          * might rely on the serialization or the magic power management
1364          * functions which are abusing the irq_bus_lock() callback,
1365          */
1366         chip_bus_lock(desc);
1367
1368         /* First installed action requests resources. */
1369         if (!desc->action) {
1370                 ret = irq_request_resources(desc);
1371                 if (ret) {
1372                         pr_err("Failed to request resources for %s (irq %d) on irqchip %s\n",
1373                                new->name, irq, desc->irq_data.chip->name);
1374                         goto out_bus_unlock;
1375                 }
1376         }
1377
1378         /*
1379          * The following block of code has to be executed atomically
1380          * protected against a concurrent interrupt and any of the other
1381          * management calls which are not serialized via
1382          * desc->request_mutex or the optional bus lock.
1383          */
1384         raw_spin_lock_irqsave(&desc->lock, flags);
1385         old_ptr = &desc->action;
1386         old = *old_ptr;
1387         if (old) {
1388                 /*
1389                  * Can't share interrupts unless both agree to and are
1390                  * the same type (level, edge, polarity). So both flag
1391                  * fields must have IRQF_SHARED set and the bits which
1392                  * set the trigger type must match. Also all must
1393                  * agree on ONESHOT.
1394                  */
1395                 unsigned int oldtype;
1396
1397                 /*
1398                  * If nobody did set the configuration before, inherit
1399                  * the one provided by the requester.
1400                  */
1401                 if (irqd_trigger_type_was_set(&desc->irq_data)) {
1402                         oldtype = irqd_get_trigger_type(&desc->irq_data);
1403                 } else {
1404                         oldtype = new->flags & IRQF_TRIGGER_MASK;
1405                         irqd_set_trigger_type(&desc->irq_data, oldtype);
1406                 }
1407
1408                 if (!((old->flags & new->flags) & IRQF_SHARED) ||
1409                     (oldtype != (new->flags & IRQF_TRIGGER_MASK)) ||
1410                     ((old->flags ^ new->flags) & IRQF_ONESHOT))
1411                         goto mismatch;
1412
1413                 /* All handlers must agree on per-cpuness */
1414                 if ((old->flags & IRQF_PERCPU) !=
1415                     (new->flags & IRQF_PERCPU))
1416                         goto mismatch;
1417
1418                 /* add new interrupt at end of irq queue */
1419                 do {
1420                         /*
1421                          * Or all existing action->thread_mask bits,
1422                          * so we can find the next zero bit for this
1423                          * new action.
1424                          */
1425                         thread_mask |= old->thread_mask;
1426                         old_ptr = &old->next;
1427                         old = *old_ptr;
1428                 } while (old);
1429                 shared = 1;
1430         }
1431
1432         /*
1433          * Setup the thread mask for this irqaction for ONESHOT. For
1434          * !ONESHOT irqs the thread mask is 0 so we can avoid a
1435          * conditional in irq_wake_thread().
1436          */
1437         if (new->flags & IRQF_ONESHOT) {
1438                 /*
1439                  * Unlikely to have 32 resp 64 irqs sharing one line,
1440                  * but who knows.
1441                  */
1442                 if (thread_mask == ~0UL) {
1443                         ret = -EBUSY;
1444                         goto out_unlock;
1445                 }
1446                 /*
1447                  * The thread_mask for the action is or'ed to
1448                  * desc->thread_active to indicate that the
1449                  * IRQF_ONESHOT thread handler has been woken, but not
1450                  * yet finished. The bit is cleared when a thread
1451                  * completes. When all threads of a shared interrupt
1452                  * line have completed desc->threads_active becomes
1453                  * zero and the interrupt line is unmasked. See
1454                  * handle.c:irq_wake_thread() for further information.
1455                  *
1456                  * If no thread is woken by primary (hard irq context)
1457                  * interrupt handlers, then desc->threads_active is
1458                  * also checked for zero to unmask the irq line in the
1459                  * affected hard irq flow handlers
1460                  * (handle_[fasteoi|level]_irq).
1461                  *
1462                  * The new action gets the first zero bit of
1463                  * thread_mask assigned. See the loop above which or's
1464                  * all existing action->thread_mask bits.
1465                  */
1466                 new->thread_mask = 1UL << ffz(thread_mask);
1467
1468         } else if (new->handler == irq_default_primary_handler &&
1469                    !(desc->irq_data.chip->flags & IRQCHIP_ONESHOT_SAFE)) {
1470                 /*
1471                  * The interrupt was requested with handler = NULL, so
1472                  * we use the default primary handler for it. But it
1473                  * does not have the oneshot flag set. In combination
1474                  * with level interrupts this is deadly, because the
1475                  * default primary handler just wakes the thread, then
1476                  * the irq lines is reenabled, but the device still
1477                  * has the level irq asserted. Rinse and repeat....
1478                  *
1479                  * While this works for edge type interrupts, we play
1480                  * it safe and reject unconditionally because we can't
1481                  * say for sure which type this interrupt really
1482                  * has. The type flags are unreliable as the
1483                  * underlying chip implementation can override them.
1484                  */
1485                 pr_err("Threaded irq requested with handler=NULL and !ONESHOT for irq %d\n",
1486                        irq);
1487                 ret = -EINVAL;
1488                 goto out_unlock;
1489         }
1490
1491         if (!shared) {
1492                 /* Setup the type (level, edge polarity) if configured: */
1493                 if (new->flags & IRQF_TRIGGER_MASK) {
1494                         ret = __irq_set_trigger(desc,
1495                                                 new->flags & IRQF_TRIGGER_MASK);
1496
1497                         if (ret)
1498                                 goto out_unlock;
1499                 }
1500
1501                 /*
1502                  * Activate the interrupt. That activation must happen
1503                  * independently of IRQ_NOAUTOEN. request_irq() can fail
1504                  * and the callers are supposed to handle
1505                  * that. enable_irq() of an interrupt requested with
1506                  * IRQ_NOAUTOEN is not supposed to fail. The activation
1507                  * keeps it in shutdown mode, it merily associates
1508                  * resources if necessary and if that's not possible it
1509                  * fails. Interrupts which are in managed shutdown mode
1510                  * will simply ignore that activation request.
1511                  */
1512                 ret = irq_activate(desc);
1513                 if (ret)
1514                         goto out_unlock;
1515
1516                 desc->istate &= ~(IRQS_AUTODETECT | IRQS_SPURIOUS_DISABLED | \
1517                                   IRQS_ONESHOT | IRQS_WAITING);
1518                 irqd_clear(&desc->irq_data, IRQD_IRQ_INPROGRESS);
1519
1520                 if (new->flags & IRQF_PERCPU) {
1521                         irqd_set(&desc->irq_data, IRQD_PER_CPU);
1522                         irq_settings_set_per_cpu(desc);
1523                 }
1524
1525                 if (new->flags & IRQF_ONESHOT)
1526                         desc->istate |= IRQS_ONESHOT;
1527
1528                 /* Exclude IRQ from balancing if requested */
1529                 if (new->flags & IRQF_NOBALANCING) {
1530                         irq_settings_set_no_balancing(desc);
1531                         irqd_set(&desc->irq_data, IRQD_NO_BALANCING);
1532                 }
1533
1534                 if (irq_settings_can_autoenable(desc)) {
1535                         irq_startup(desc, IRQ_RESEND, IRQ_START_COND);
1536                 } else {
1537                         /*
1538                          * Shared interrupts do not go well with disabling
1539                          * auto enable. The sharing interrupt might request
1540                          * it while it's still disabled and then wait for
1541                          * interrupts forever.
1542                          */
1543                         WARN_ON_ONCE(new->flags & IRQF_SHARED);
1544                         /* Undo nested disables: */
1545                         desc->depth = 1;
1546                 }
1547
1548         } else if (new->flags & IRQF_TRIGGER_MASK) {
1549                 unsigned int nmsk = new->flags & IRQF_TRIGGER_MASK;
1550                 unsigned int omsk = irqd_get_trigger_type(&desc->irq_data);
1551
1552                 if (nmsk != omsk)
1553                         /* hope the handler works with current  trigger mode */
1554                         pr_warn("irq %d uses trigger mode %u; requested %u\n",
1555                                 irq, omsk, nmsk);
1556         }
1557
1558         *old_ptr = new;
1559
1560         irq_pm_install_action(desc, new);
1561
1562         /* Reset broken irq detection when installing new handler */
1563         desc->irq_count = 0;
1564         desc->irqs_unhandled = 0;
1565
1566         /*
1567          * Check whether we disabled the irq via the spurious handler
1568          * before. Reenable it and give it another chance.
1569          */
1570         if (shared && (desc->istate & IRQS_SPURIOUS_DISABLED)) {
1571                 desc->istate &= ~IRQS_SPURIOUS_DISABLED;
1572                 __enable_irq(desc);
1573         }
1574
1575         raw_spin_unlock_irqrestore(&desc->lock, flags);
1576         chip_bus_sync_unlock(desc);
1577         mutex_unlock(&desc->request_mutex);
1578
1579         irq_setup_timings(desc, new);
1580
1581         wake_up_and_wait_for_irq_thread_ready(desc, new);
1582         wake_up_and_wait_for_irq_thread_ready(desc, new->secondary);
1583
1584         register_irq_proc(irq, desc);
1585         new->dir = NULL;
1586         register_handler_proc(irq, new);
1587         return 0;
1588
1589 mismatch:
1590         if (!(new->flags & IRQF_PROBE_SHARED)) {
1591                 pr_err("Flags mismatch irq %d. %08x (%s) vs. %08x (%s)\n",
1592                        irq, new->flags, new->name, old->flags, old->name);
1593 #ifdef CONFIG_DEBUG_SHIRQ
1594                 dump_stack();
1595 #endif
1596         }
1597         ret = -EBUSY;
1598
1599 out_unlock:
1600         raw_spin_unlock_irqrestore(&desc->lock, flags);
1601
1602         if (!desc->action)
1603                 irq_release_resources(desc);
1604 out_bus_unlock:
1605         chip_bus_sync_unlock(desc);
1606         mutex_unlock(&desc->request_mutex);
1607
1608 out_thread:
1609         if (new->thread) {
1610                 struct task_struct *t = new->thread;
1611
1612                 new->thread = NULL;
1613                 kthread_stop(t);
1614                 put_task_struct(t);
1615         }
1616         if (new->secondary && new->secondary->thread) {
1617                 struct task_struct *t = new->secondary->thread;
1618
1619                 new->secondary->thread = NULL;
1620                 kthread_stop(t);
1621                 put_task_struct(t);
1622         }
1623 out_mput:
1624         module_put(desc->owner);
1625         return ret;
1626 }
1627
1628 /**
1629  *      setup_irq - setup an interrupt
1630  *      @irq: Interrupt line to setup
1631  *      @act: irqaction for the interrupt
1632  *
1633  * Used to statically setup interrupts in the early boot process.
1634  */
1635 int setup_irq(unsigned int irq, struct irqaction *act)
1636 {
1637         int retval;
1638         struct irq_desc *desc = irq_to_desc(irq);
1639
1640         if (!desc || WARN_ON(irq_settings_is_per_cpu_devid(desc)))
1641                 return -EINVAL;
1642
1643         retval = irq_chip_pm_get(&desc->irq_data);
1644         if (retval < 0)
1645                 return retval;
1646
1647         retval = __setup_irq(irq, desc, act);
1648
1649         if (retval)
1650                 irq_chip_pm_put(&desc->irq_data);
1651
1652         return retval;
1653 }
1654 EXPORT_SYMBOL_GPL(setup_irq);
1655
1656 /*
1657  * Internal function to unregister an irqaction - used to free
1658  * regular and special interrupts that are part of the architecture.
1659  */
1660 static struct irqaction *__free_irq(struct irq_desc *desc, void *dev_id)
1661 {
1662         unsigned irq = desc->irq_data.irq;
1663         struct irqaction *action, **action_ptr;
1664         unsigned long flags;
1665
1666         WARN(in_interrupt(), "Trying to free IRQ %d from IRQ context!\n", irq);
1667
1668         mutex_lock(&desc->request_mutex);
1669         chip_bus_lock(desc);
1670         raw_spin_lock_irqsave(&desc->lock, flags);
1671
1672         /*
1673          * There can be multiple actions per IRQ descriptor, find the right
1674          * one based on the dev_id:
1675          */
1676         action_ptr = &desc->action;
1677         for (;;) {
1678                 action = *action_ptr;
1679
1680                 if (!action) {
1681                         WARN(1, "Trying to free already-free IRQ %d\n", irq);
1682                         raw_spin_unlock_irqrestore(&desc->lock, flags);
1683                         chip_bus_sync_unlock(desc);
1684                         mutex_unlock(&desc->request_mutex);
1685                         return NULL;
1686                 }
1687
1688                 if (action->dev_id == dev_id)
1689                         break;
1690                 action_ptr = &action->next;
1691         }
1692
1693         /* Found it - now remove it from the list of entries: */
1694         *action_ptr = action->next;
1695
1696         irq_pm_remove_action(desc, action);
1697
1698         /* If this was the last handler, shut down the IRQ line: */
1699         if (!desc->action) {
1700                 irq_settings_clr_disable_unlazy(desc);
1701                 /* Only shutdown. Deactivate after synchronize_hardirq() */
1702                 irq_shutdown(desc);
1703         }
1704
1705 #ifdef CONFIG_SMP
1706         /* make sure affinity_hint is cleaned up */
1707         if (WARN_ON_ONCE(desc->affinity_hint))
1708                 desc->affinity_hint = NULL;
1709 #endif
1710
1711         raw_spin_unlock_irqrestore(&desc->lock, flags);
1712         /*
1713          * Drop bus_lock here so the changes which were done in the chip
1714          * callbacks above are synced out to the irq chips which hang
1715          * behind a slow bus (I2C, SPI) before calling synchronize_hardirq().
1716          *
1717          * Aside of that the bus_lock can also be taken from the threaded
1718          * handler in irq_finalize_oneshot() which results in a deadlock
1719          * because kthread_stop() would wait forever for the thread to
1720          * complete, which is blocked on the bus lock.
1721          *
1722          * The still held desc->request_mutex() protects against a
1723          * concurrent request_irq() of this irq so the release of resources
1724          * and timing data is properly serialized.
1725          */
1726         chip_bus_sync_unlock(desc);
1727
1728         unregister_handler_proc(irq, action);
1729
1730         /*
1731          * Make sure it's not being used on another CPU and if the chip
1732          * supports it also make sure that there is no (not yet serviced)
1733          * interrupt in flight at the hardware level.
1734          */
1735         __synchronize_hardirq(desc, true);
1736
1737 #ifdef CONFIG_DEBUG_SHIRQ
1738         /*
1739          * It's a shared IRQ -- the driver ought to be prepared for an IRQ
1740          * event to happen even now it's being freed, so let's make sure that
1741          * is so by doing an extra call to the handler ....
1742          *
1743          * ( We do this after actually deregistering it, to make sure that a
1744          *   'real' IRQ doesn't run in parallel with our fake. )
1745          */
1746         if (action->flags & IRQF_SHARED) {
1747                 local_irq_save(flags);
1748                 action->handler(irq, dev_id);
1749                 local_irq_restore(flags);
1750         }
1751 #endif
1752
1753         /*
1754          * The action has already been removed above, but the thread writes
1755          * its oneshot mask bit when it completes. Though request_mutex is
1756          * held across this which prevents __setup_irq() from handing out
1757          * the same bit to a newly requested action.
1758          */
1759         if (action->thread) {
1760                 kthread_stop(action->thread);
1761                 put_task_struct(action->thread);
1762                 if (action->secondary && action->secondary->thread) {
1763                         kthread_stop(action->secondary->thread);
1764                         put_task_struct(action->secondary->thread);
1765                 }
1766         }
1767
1768         /* Last action releases resources */
1769         if (!desc->action) {
1770                 /*
1771                  * Reaquire bus lock as irq_release_resources() might
1772                  * require it to deallocate resources over the slow bus.
1773                  */
1774                 chip_bus_lock(desc);
1775                 /*
1776                  * There is no interrupt on the fly anymore. Deactivate it
1777                  * completely.
1778                  */
1779                 raw_spin_lock_irqsave(&desc->lock, flags);
1780                 irq_domain_deactivate_irq(&desc->irq_data);
1781                 raw_spin_unlock_irqrestore(&desc->lock, flags);
1782
1783                 irq_release_resources(desc);
1784                 chip_bus_sync_unlock(desc);
1785                 irq_remove_timings(desc);
1786         }
1787
1788         mutex_unlock(&desc->request_mutex);
1789
1790         irq_chip_pm_put(&desc->irq_data);
1791         module_put(desc->owner);
1792         kfree(action->secondary);
1793         return action;
1794 }
1795
1796 /**
1797  *      remove_irq - free an interrupt
1798  *      @irq: Interrupt line to free
1799  *      @act: irqaction for the interrupt
1800  *
1801  * Used to remove interrupts statically setup by the early boot process.
1802  */
1803 void remove_irq(unsigned int irq, struct irqaction *act)
1804 {
1805         struct irq_desc *desc = irq_to_desc(irq);
1806
1807         if (desc && !WARN_ON(irq_settings_is_per_cpu_devid(desc)))
1808                 __free_irq(desc, act->dev_id);
1809 }
1810 EXPORT_SYMBOL_GPL(remove_irq);
1811
1812 /**
1813  *      free_irq - free an interrupt allocated with request_irq
1814  *      @irq: Interrupt line to free
1815  *      @dev_id: Device identity to free
1816  *
1817  *      Remove an interrupt handler. The handler is removed and if the
1818  *      interrupt line is no longer in use by any driver it is disabled.
1819  *      On a shared IRQ the caller must ensure the interrupt is disabled
1820  *      on the card it drives before calling this function. The function
1821  *      does not return until any executing interrupts for this IRQ
1822  *      have completed.
1823  *
1824  *      This function must not be called from interrupt context.
1825  *
1826  *      Returns the devname argument passed to request_irq.
1827  */
1828 const void *free_irq(unsigned int irq, void *dev_id)
1829 {
1830         struct irq_desc *desc = irq_to_desc(irq);
1831         struct irqaction *action;
1832         const char *devname;
1833
1834         if (!desc || WARN_ON(irq_settings_is_per_cpu_devid(desc)))
1835                 return NULL;
1836
1837 #ifdef CONFIG_SMP
1838         if (WARN_ON(desc->affinity_notify))
1839                 desc->affinity_notify = NULL;
1840 #endif
1841
1842         action = __free_irq(desc, dev_id);
1843
1844         if (!action)
1845                 return NULL;
1846
1847         devname = action->name;
1848         kfree(action);
1849         return devname;
1850 }
1851 EXPORT_SYMBOL(free_irq);
1852
1853 /**
1854  *      request_threaded_irq - allocate an interrupt line
1855  *      @irq: Interrupt line to allocate
1856  *      @handler: Function to be called when the IRQ occurs.
1857  *                Primary handler for threaded interrupts
1858  *                If NULL and thread_fn != NULL the default
1859  *                primary handler is installed
1860  *      @thread_fn: Function called from the irq handler thread
1861  *                  If NULL, no irq thread is created
1862  *      @irqflags: Interrupt type flags
1863  *      @devname: An ascii name for the claiming device
1864  *      @dev_id: A cookie passed back to the handler function
1865  *
1866  *      This call allocates interrupt resources and enables the
1867  *      interrupt line and IRQ handling. From the point this
1868  *      call is made your handler function may be invoked. Since
1869  *      your handler function must clear any interrupt the board
1870  *      raises, you must take care both to initialise your hardware
1871  *      and to set up the interrupt handler in the right order.
1872  *
1873  *      If you want to set up a threaded irq handler for your device
1874  *      then you need to supply @handler and @thread_fn. @handler is
1875  *      still called in hard interrupt context and has to check
1876  *      whether the interrupt originates from the device. If yes it
1877  *      needs to disable the interrupt on the device and return
1878  *      IRQ_WAKE_THREAD which will wake up the handler thread and run
1879  *      @thread_fn. This split handler design is necessary to support
1880  *      shared interrupts.
1881  *
1882  *      Dev_id must be globally unique. Normally the address of the
1883  *      device data structure is used as the cookie. Since the handler
1884  *      receives this value it makes sense to use it.
1885  *
1886  *      If your interrupt is shared you must pass a non NULL dev_id
1887  *      as this is required when freeing the interrupt.
1888  *
1889  *      Flags:
1890  *
1891  *      IRQF_SHARED             Interrupt is shared
1892  *      IRQF_TRIGGER_*          Specify active edge(s) or level
1893  *
1894  */
1895 int request_threaded_irq(unsigned int irq, irq_handler_t handler,
1896                          irq_handler_t thread_fn, unsigned long irqflags,
1897                          const char *devname, void *dev_id)
1898 {
1899         struct irqaction *action;
1900         struct irq_desc *desc;
1901         int retval;
1902
1903         if (irq == IRQ_NOTCONNECTED)
1904                 return -ENOTCONN;
1905
1906         /*
1907          * Sanity-check: shared interrupts must pass in a real dev-ID,
1908          * otherwise we'll have trouble later trying to figure out
1909          * which interrupt is which (messes up the interrupt freeing
1910          * logic etc).
1911          *
1912          * Also IRQF_COND_SUSPEND only makes sense for shared interrupts and
1913          * it cannot be set along with IRQF_NO_SUSPEND.
1914          */
1915         if (((irqflags & IRQF_SHARED) && !dev_id) ||
1916             (!(irqflags & IRQF_SHARED) && (irqflags & IRQF_COND_SUSPEND)) ||
1917             ((irqflags & IRQF_NO_SUSPEND) && (irqflags & IRQF_COND_SUSPEND)))
1918                 return -EINVAL;
1919
1920         desc = irq_to_desc(irq);
1921         if (!desc)
1922                 return -EINVAL;
1923
1924         if (!irq_settings_can_request(desc) ||
1925             WARN_ON(irq_settings_is_per_cpu_devid(desc)))
1926                 return -EINVAL;
1927
1928         if (!handler) {
1929                 if (!thread_fn)
1930                         return -EINVAL;
1931                 handler = irq_default_primary_handler;
1932         }
1933
1934         action = kzalloc(sizeof(struct irqaction), GFP_KERNEL);
1935         if (!action)
1936                 return -ENOMEM;
1937
1938         action->handler = handler;
1939         action->thread_fn = thread_fn;
1940         action->flags = irqflags;
1941         action->name = devname;
1942         action->dev_id = dev_id;
1943
1944         retval = irq_chip_pm_get(&desc->irq_data);
1945         if (retval < 0) {
1946                 kfree(action);
1947                 return retval;
1948         }
1949
1950         retval = __setup_irq(irq, desc, action);
1951
1952         if (retval) {
1953                 irq_chip_pm_put(&desc->irq_data);
1954                 kfree(action->secondary);
1955                 kfree(action);
1956         }
1957
1958 #ifdef CONFIG_DEBUG_SHIRQ_FIXME
1959         if (!retval && (irqflags & IRQF_SHARED)) {
1960                 /*
1961                  * It's a shared IRQ -- the driver ought to be prepared for it
1962                  * to happen immediately, so let's make sure....
1963                  * We disable the irq to make sure that a 'real' IRQ doesn't
1964                  * run in parallel with our fake.
1965                  */
1966                 unsigned long flags;
1967
1968                 disable_irq(irq);
1969                 local_irq_save(flags);
1970
1971                 handler(irq, dev_id);
1972
1973                 local_irq_restore(flags);
1974                 enable_irq(irq);
1975         }
1976 #endif
1977         return retval;
1978 }
1979 EXPORT_SYMBOL(request_threaded_irq);
1980
1981 /**
1982  *      request_any_context_irq - allocate an interrupt line
1983  *      @irq: Interrupt line to allocate
1984  *      @handler: Function to be called when the IRQ occurs.
1985  *                Threaded handler for threaded interrupts.
1986  *      @flags: Interrupt type flags
1987  *      @name: An ascii name for the claiming device
1988  *      @dev_id: A cookie passed back to the handler function
1989  *
1990  *      This call allocates interrupt resources and enables the
1991  *      interrupt line and IRQ handling. It selects either a
1992  *      hardirq or threaded handling method depending on the
1993  *      context.
1994  *
1995  *      On failure, it returns a negative value. On success,
1996  *      it returns either IRQC_IS_HARDIRQ or IRQC_IS_NESTED.
1997  */
1998 int request_any_context_irq(unsigned int irq, irq_handler_t handler,
1999                             unsigned long flags, const char *name, void *dev_id)
2000 {
2001         struct irq_desc *desc;
2002         int ret;
2003
2004         if (irq == IRQ_NOTCONNECTED)
2005                 return -ENOTCONN;
2006
2007         desc = irq_to_desc(irq);
2008         if (!desc)
2009                 return -EINVAL;
2010
2011         if (irq_settings_is_nested_thread(desc)) {
2012                 ret = request_threaded_irq(irq, NULL, handler,
2013                                            flags, name, dev_id);
2014                 return !ret ? IRQC_IS_NESTED : ret;
2015         }
2016
2017         ret = request_irq(irq, handler, flags, name, dev_id);
2018         return !ret ? IRQC_IS_HARDIRQ : ret;
2019 }
2020 EXPORT_SYMBOL_GPL(request_any_context_irq);
2021
2022 void enable_percpu_irq(unsigned int irq, unsigned int type)
2023 {
2024         unsigned int cpu = smp_processor_id();
2025         unsigned long flags;
2026         struct irq_desc *desc = irq_get_desc_lock(irq, &flags, IRQ_GET_DESC_CHECK_PERCPU);
2027
2028         if (!desc)
2029                 return;
2030
2031         /*
2032          * If the trigger type is not specified by the caller, then
2033          * use the default for this interrupt.
2034          */
2035         type &= IRQ_TYPE_SENSE_MASK;
2036         if (type == IRQ_TYPE_NONE)
2037                 type = irqd_get_trigger_type(&desc->irq_data);
2038
2039         if (type != IRQ_TYPE_NONE) {
2040                 int ret;
2041
2042                 ret = __irq_set_trigger(desc, type);
2043
2044                 if (ret) {
2045                         WARN(1, "failed to set type for IRQ%d\n", irq);
2046                         goto out;
2047                 }
2048         }
2049
2050         irq_percpu_enable(desc, cpu);
2051 out:
2052         irq_put_desc_unlock(desc, flags);
2053 }
2054 EXPORT_SYMBOL_GPL(enable_percpu_irq);
2055
2056 /**
2057  * irq_percpu_is_enabled - Check whether the per cpu irq is enabled
2058  * @irq:        Linux irq number to check for
2059  *
2060  * Must be called from a non migratable context. Returns the enable
2061  * state of a per cpu interrupt on the current cpu.
2062  */
2063 bool irq_percpu_is_enabled(unsigned int irq)
2064 {
2065         unsigned int cpu = smp_processor_id();
2066         struct irq_desc *desc;
2067         unsigned long flags;
2068         bool is_enabled;
2069
2070         desc = irq_get_desc_lock(irq, &flags, IRQ_GET_DESC_CHECK_PERCPU);
2071         if (!desc)
2072                 return false;
2073
2074         is_enabled = cpumask_test_cpu(cpu, desc->percpu_enabled);
2075         irq_put_desc_unlock(desc, flags);
2076
2077         return is_enabled;
2078 }
2079 EXPORT_SYMBOL_GPL(irq_percpu_is_enabled);
2080
2081 void disable_percpu_irq(unsigned int irq)
2082 {
2083         unsigned int cpu = smp_processor_id();
2084         unsigned long flags;
2085         struct irq_desc *desc = irq_get_desc_lock(irq, &flags, IRQ_GET_DESC_CHECK_PERCPU);
2086
2087         if (!desc)
2088                 return;
2089
2090         irq_percpu_disable(desc, cpu);
2091         irq_put_desc_unlock(desc, flags);
2092 }
2093 EXPORT_SYMBOL_GPL(disable_percpu_irq);
2094
2095 /*
2096  * Internal function to unregister a percpu irqaction.
2097  */
2098 static struct irqaction *__free_percpu_irq(unsigned int irq, void __percpu *dev_id)
2099 {
2100         struct irq_desc *desc = irq_to_desc(irq);
2101         struct irqaction *action;
2102         unsigned long flags;
2103
2104         WARN(in_interrupt(), "Trying to free IRQ %d from IRQ context!\n", irq);
2105
2106         if (!desc)
2107                 return NULL;
2108
2109         raw_spin_lock_irqsave(&desc->lock, flags);
2110
2111         action = desc->action;
2112         if (!action || action->percpu_dev_id != dev_id) {
2113                 WARN(1, "Trying to free already-free IRQ %d\n", irq);
2114                 goto bad;
2115         }
2116
2117         if (!cpumask_empty(desc->percpu_enabled)) {
2118                 WARN(1, "percpu IRQ %d still enabled on CPU%d!\n",
2119                      irq, cpumask_first(desc->percpu_enabled));
2120                 goto bad;
2121         }
2122
2123         /* Found it - now remove it from the list of entries: */
2124         desc->action = NULL;
2125
2126         raw_spin_unlock_irqrestore(&desc->lock, flags);
2127
2128         unregister_handler_proc(irq, action);
2129
2130         irq_chip_pm_put(&desc->irq_data);
2131         module_put(desc->owner);
2132         return action;
2133
2134 bad:
2135         raw_spin_unlock_irqrestore(&desc->lock, flags);
2136         return NULL;
2137 }
2138
2139 /**
2140  *      remove_percpu_irq - free a per-cpu interrupt
2141  *      @irq: Interrupt line to free
2142  *      @act: irqaction for the interrupt
2143  *
2144  * Used to remove interrupts statically setup by the early boot process.
2145  */
2146 void remove_percpu_irq(unsigned int irq, struct irqaction *act)
2147 {
2148         struct irq_desc *desc = irq_to_desc(irq);
2149
2150         if (desc && irq_settings_is_per_cpu_devid(desc))
2151             __free_percpu_irq(irq, act->percpu_dev_id);
2152 }
2153
2154 /**
2155  *      free_percpu_irq - free an interrupt allocated with request_percpu_irq
2156  *      @irq: Interrupt line to free
2157  *      @dev_id: Device identity to free
2158  *
2159  *      Remove a percpu interrupt handler. The handler is removed, but
2160  *      the interrupt line is not disabled. This must be done on each
2161  *      CPU before calling this function. The function does not return
2162  *      until any executing interrupts for this IRQ have completed.
2163  *
2164  *      This function must not be called from interrupt context.
2165  */
2166 void free_percpu_irq(unsigned int irq, void __percpu *dev_id)
2167 {
2168         struct irq_desc *desc = irq_to_desc(irq);
2169
2170         if (!desc || !irq_settings_is_per_cpu_devid(desc))
2171                 return;
2172
2173         chip_bus_lock(desc);
2174         kfree(__free_percpu_irq(irq, dev_id));
2175         chip_bus_sync_unlock(desc);
2176 }
2177 EXPORT_SYMBOL_GPL(free_percpu_irq);
2178
2179 /**
2180  *      setup_percpu_irq - setup a per-cpu interrupt
2181  *      @irq: Interrupt line to setup
2182  *      @act: irqaction for the interrupt
2183  *
2184  * Used to statically setup per-cpu interrupts in the early boot process.
2185  */
2186 int setup_percpu_irq(unsigned int irq, struct irqaction *act)
2187 {
2188         struct irq_desc *desc = irq_to_desc(irq);
2189         int retval;
2190
2191         if (!desc || !irq_settings_is_per_cpu_devid(desc))
2192                 return -EINVAL;
2193
2194         retval = irq_chip_pm_get(&desc->irq_data);
2195         if (retval < 0)
2196                 return retval;
2197
2198         retval = __setup_irq(irq, desc, act);
2199
2200         if (retval)
2201                 irq_chip_pm_put(&desc->irq_data);
2202
2203         return retval;
2204 }
2205
2206 /**
2207  *      __request_percpu_irq - allocate a percpu interrupt line
2208  *      @irq: Interrupt line to allocate
2209  *      @handler: Function to be called when the IRQ occurs.
2210  *      @flags: Interrupt type flags (IRQF_TIMER only)
2211  *      @devname: An ascii name for the claiming device
2212  *      @dev_id: A percpu cookie passed back to the handler function
2213  *
2214  *      This call allocates interrupt resources and enables the
2215  *      interrupt on the local CPU. If the interrupt is supposed to be
2216  *      enabled on other CPUs, it has to be done on each CPU using
2217  *      enable_percpu_irq().
2218  *
2219  *      Dev_id must be globally unique. It is a per-cpu variable, and
2220  *      the handler gets called with the interrupted CPU's instance of
2221  *      that variable.
2222  */
2223 int __request_percpu_irq(unsigned int irq, irq_handler_t handler,
2224                          unsigned long flags, const char *devname,
2225                          void __percpu *dev_id)
2226 {
2227         struct irqaction *action;
2228         struct irq_desc *desc;
2229         int retval;
2230
2231         if (!dev_id)
2232                 return -EINVAL;
2233
2234         desc = irq_to_desc(irq);
2235         if (!desc || !irq_settings_can_request(desc) ||
2236             !irq_settings_is_per_cpu_devid(desc))
2237                 return -EINVAL;
2238
2239         if (flags && flags != IRQF_TIMER)
2240                 return -EINVAL;
2241
2242         action = kzalloc(sizeof(struct irqaction), GFP_KERNEL);
2243         if (!action)
2244                 return -ENOMEM;
2245
2246         action->handler = handler;
2247         action->flags = flags | IRQF_PERCPU | IRQF_NO_SUSPEND;
2248         action->name = devname;
2249         action->percpu_dev_id = dev_id;
2250
2251         retval = irq_chip_pm_get(&desc->irq_data);
2252         if (retval < 0) {
2253                 kfree(action);
2254                 return retval;
2255         }
2256
2257         retval = __setup_irq(irq, desc, action);
2258
2259         if (retval) {
2260                 irq_chip_pm_put(&desc->irq_data);
2261                 kfree(action);
2262         }
2263
2264         return retval;
2265 }
2266 EXPORT_SYMBOL_GPL(__request_percpu_irq);
2267
2268 int __irq_get_irqchip_state(struct irq_data *data, enum irqchip_irq_state which,
2269                             bool *state)
2270 {
2271         struct irq_chip *chip;
2272         int err = -EINVAL;
2273
2274         do {
2275                 chip = irq_data_get_irq_chip(data);
2276                 if (chip->irq_get_irqchip_state)
2277                         break;
2278 #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
2279                 data = data->parent_data;
2280 #else
2281                 data = NULL;
2282 #endif
2283         } while (data);
2284
2285         if (data)
2286                 err = chip->irq_get_irqchip_state(data, which, state);
2287         return err;
2288 }
2289
2290 /**
2291  *      irq_get_irqchip_state - returns the irqchip state of a interrupt.
2292  *      @irq: Interrupt line that is forwarded to a VM
2293  *      @which: One of IRQCHIP_STATE_* the caller wants to know about
2294  *      @state: a pointer to a boolean where the state is to be storeed
2295  *
2296  *      This call snapshots the internal irqchip state of an
2297  *      interrupt, returning into @state the bit corresponding to
2298  *      stage @which
2299  *
2300  *      This function should be called with preemption disabled if the
2301  *      interrupt controller has per-cpu registers.
2302  */
2303 int irq_get_irqchip_state(unsigned int irq, enum irqchip_irq_state which,
2304                           bool *state)
2305 {
2306         struct irq_desc *desc;
2307         struct irq_data *data;
2308         unsigned long flags;
2309         int err = -EINVAL;
2310
2311         desc = irq_get_desc_buslock(irq, &flags, 0);
2312         if (!desc)
2313                 return err;
2314
2315         data = irq_desc_get_irq_data(desc);
2316
2317         err = __irq_get_irqchip_state(data, which, state);
2318
2319         irq_put_desc_busunlock(desc, flags);
2320         return err;
2321 }
2322 EXPORT_SYMBOL_GPL(irq_get_irqchip_state);
2323
2324 /**
2325  *      irq_set_irqchip_state - set the state of a forwarded interrupt.
2326  *      @irq: Interrupt line that is forwarded to a VM
2327  *      @which: State to be restored (one of IRQCHIP_STATE_*)
2328  *      @val: Value corresponding to @which
2329  *
2330  *      This call sets the internal irqchip state of an interrupt,
2331  *      depending on the value of @which.
2332  *
2333  *      This function should be called with preemption disabled if the
2334  *      interrupt controller has per-cpu registers.
2335  */
2336 int irq_set_irqchip_state(unsigned int irq, enum irqchip_irq_state which,
2337                           bool val)
2338 {
2339         struct irq_desc *desc;
2340         struct irq_data *data;
2341         struct irq_chip *chip;
2342         unsigned long flags;
2343         int err = -EINVAL;
2344
2345         desc = irq_get_desc_buslock(irq, &flags, 0);
2346         if (!desc)
2347                 return err;
2348
2349         data = irq_desc_get_irq_data(desc);
2350
2351         do {
2352                 chip = irq_data_get_irq_chip(data);
2353                 if (chip->irq_set_irqchip_state)
2354                         break;
2355 #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
2356                 data = data->parent_data;
2357 #else
2358                 data = NULL;
2359 #endif
2360         } while (data);
2361
2362         if (data)
2363                 err = chip->irq_set_irqchip_state(data, which, val);
2364
2365         irq_put_desc_busunlock(desc, flags);
2366         return err;
2367 }
2368 EXPORT_SYMBOL_GPL(irq_set_irqchip_state);