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