LCOV - code coverage report
Current view: top level - kernel/irq - manage.c (source / functions) Hit Total Coverage
Test: landlock.info Lines: 129 1048 12.3 %
Date: 2021-04-22 12:43:58 Functions: 8 77 10.4 %

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

Generated by: LCOV version 1.14