LCOV - code coverage report
Current view: top level - kernel/irq - manage.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 79 706 11.2 %
Date: 2023-04-06 08:38:28 Functions: 3 57 5.3 %

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

Generated by: LCOV version 1.14