LCOV - code coverage report
Current view: top level - kernel/irq - manage.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 18 466 3.9 %
Date: 2014-02-18 Functions: 4 48 8.3 %
Branches: 8 353 2.3 %

           Branch data     Line data    Source code
       1                 :            : /*
       2                 :            :  * linux/kernel/irq/manage.c
       3                 :            :  *
       4                 :            :  * Copyright (C) 1992, 1998-2006 Linus Torvalds, Ingo Molnar
       5                 :            :  * Copyright (C) 2005-2006 Thomas Gleixner
       6                 :            :  *
       7                 :            :  * This file contains driver APIs to the irq subsystem.
       8                 :            :  */
       9                 :            : 
      10                 :            : #define pr_fmt(fmt) "genirq: " fmt
      11                 :            : 
      12                 :            : #include <linux/irq.h>
      13                 :            : #include <linux/kthread.h>
      14                 :            : #include <linux/module.h>
      15                 :            : #include <linux/random.h>
      16                 :            : #include <linux/interrupt.h>
      17                 :            : #include <linux/slab.h>
      18                 :            : #include <linux/sched.h>
      19                 :            : #include <linux/sched/rt.h>
      20                 :            : #include <linux/task_work.h>
      21                 :            : 
      22                 :            : #include "internals.h"
      23                 :            : 
      24                 :            : #ifdef CONFIG_IRQ_FORCED_THREADING
      25                 :            : __read_mostly bool force_irqthreads;
      26                 :            : 
      27                 :          0 : static int __init setup_forced_irqthreads(char *arg)
      28                 :            : {
      29                 :          0 :         force_irqthreads = true;
      30                 :          0 :         return 0;
      31                 :            : }
      32                 :            : early_param("threadirqs", setup_forced_irqthreads);
      33                 :            : #endif
      34                 :            : 
      35                 :            : /**
      36                 :            :  *      synchronize_irq - wait for pending IRQ handlers (on other CPUs)
      37                 :            :  *      @irq: interrupt number to wait for
      38                 :            :  *
      39                 :            :  *      This function waits for any pending IRQ handlers for this interrupt
      40                 :            :  *      to complete before returning. If you use this function while
      41                 :            :  *      holding a resource the IRQ handler may need you will deadlock.
      42                 :            :  *
      43                 :            :  *      This function may be called - with care - from IRQ context.
      44                 :            :  */
      45                 :          0 : void synchronize_irq(unsigned int irq)
      46                 :            : {
      47                 :          0 :         struct irq_desc *desc = irq_to_desc(irq);
      48                 :            :         bool inprogress;
      49                 :            : 
      50         [ #  # ]:          0 :         if (!desc)
      51                 :          0 :                 return;
      52                 :            : 
      53                 :            :         do {
      54                 :            :                 unsigned long flags;
      55                 :            : 
      56                 :            :                 /*
      57                 :            :                  * Wait until we're out of the critical section.  This might
      58                 :            :                  * give the wrong answer due to the lack of memory barriers.
      59                 :            :                  */
      60         [ #  # ]:          0 :                 while (irqd_irq_inprogress(&desc->irq_data))
      61                 :          0 :                         cpu_relax();
      62                 :            : 
      63                 :            :                 /* Ok, that indicated we're done: double-check carefully. */
      64                 :          0 :                 raw_spin_lock_irqsave(&desc->lock, flags);
      65                 :            :                 inprogress = irqd_irq_inprogress(&desc->irq_data);
      66                 :          0 :                 raw_spin_unlock_irqrestore(&desc->lock, flags);
      67                 :            : 
      68                 :            :                 /* Oops, that failed? */
      69         [ #  # ]:          0 :         } while (inprogress);
      70                 :            : 
      71                 :            :         /*
      72                 :            :          * We made sure that no hardirq handler is running. Now verify
      73                 :            :          * that no threaded handlers are active.
      74                 :            :          */
      75 [ #  # ][ #  # ]:          0 :         wait_event(desc->wait_for_threads, !atomic_read(&desc->threads_active));
      76                 :            : }
      77                 :            : EXPORT_SYMBOL(synchronize_irq);
      78                 :            : 
      79                 :            : #ifdef CONFIG_SMP
      80                 :            : cpumask_var_t irq_default_affinity;
      81                 :            : 
      82                 :            : /**
      83                 :            :  *      irq_can_set_affinity - Check if the affinity of a given irq can be set
      84                 :            :  *      @irq:           Interrupt to check
      85                 :            :  *
      86                 :            :  */
      87                 :          0 : int irq_can_set_affinity(unsigned int irq)
      88                 :            : {
      89                 :          0 :         struct irq_desc *desc = irq_to_desc(irq);
      90                 :            : 
      91 [ #  # ][ #  # ]:          0 :         if (!desc || !irqd_can_balance(&desc->irq_data) ||
                 [ #  # ]
      92         [ #  # ]:          0 :             !desc->irq_data.chip || !desc->irq_data.chip->irq_set_affinity)
      93                 :            :                 return 0;
      94                 :            : 
      95                 :          0 :         return 1;
      96                 :            : }
      97                 :            : 
      98                 :            : /**
      99                 :            :  *      irq_set_thread_affinity - Notify irq threads to adjust affinity
     100                 :            :  *      @desc:          irq descriptor which has affitnity changed
     101                 :            :  *
     102                 :            :  *      We just set IRQTF_AFFINITY and delegate the affinity setting
     103                 :            :  *      to the interrupt thread itself. We can not call
     104                 :            :  *      set_cpus_allowed_ptr() here as we hold desc->lock and this
     105                 :            :  *      code can be called from hard interrupt context.
     106                 :            :  */
     107                 :          0 : void irq_set_thread_affinity(struct irq_desc *desc)
     108                 :            : {
     109                 :     402497 :         struct irqaction *action = desc->action;
     110                 :            : 
     111         [ +  + ]:     804994 :         while (action) {
     112         [ -  + ]:     402497 :                 if (action->thread)
     113                 :          0 :                         set_bit(IRQTF_AFFINITY, &action->thread_flags);
     114                 :     402497 :                 action = action->next;
     115                 :            :         }
     116                 :     402497 : }
     117                 :            : 
     118                 :            : #ifdef CONFIG_GENERIC_PENDING_IRQ
     119                 :            : static inline bool irq_can_move_pcntxt(struct irq_data *data)
     120                 :            : {
     121                 :            :         return irqd_can_move_in_process_context(data);
     122                 :            : }
     123                 :            : static inline bool irq_move_pending(struct irq_data *data)
     124                 :            : {
     125                 :            :         return irqd_is_setaffinity_pending(data);
     126                 :            : }
     127                 :            : static inline void
     128                 :            : irq_copy_pending(struct irq_desc *desc, const struct cpumask *mask)
     129                 :            : {
     130                 :            :         cpumask_copy(desc->pending_mask, mask);
     131                 :            : }
     132                 :            : static inline void
     133                 :            : irq_get_pending(struct cpumask *mask, struct irq_desc *desc)
     134                 :            : {
     135                 :            :         cpumask_copy(mask, desc->pending_mask);
     136                 :            : }
     137                 :            : #else
     138                 :            : static inline bool irq_can_move_pcntxt(struct irq_data *data) { return true; }
     139                 :            : static inline bool irq_move_pending(struct irq_data *data) { return false; }
     140                 :            : static inline void
     141                 :            : irq_copy_pending(struct irq_desc *desc, const struct cpumask *mask) { }
     142                 :            : static inline void
     143                 :            : irq_get_pending(struct cpumask *mask, struct irq_desc *desc) { }
     144                 :            : #endif
     145                 :            : 
     146                 :          0 : int irq_do_set_affinity(struct irq_data *data, const struct cpumask *mask,
     147                 :            :                         bool force)
     148                 :            : {
     149                 :            :         struct irq_desc *desc = irq_data_to_desc(data);
     150                 :            :         struct irq_chip *chip = irq_data_get_irq_chip(data);
     151                 :            :         int ret;
     152                 :            : 
     153                 :     402497 :         ret = chip->irq_set_affinity(data, mask, false);
     154      [ +  -  - ]:     402497 :         switch (ret) {
     155                 :            :         case IRQ_SET_MASK_OK:
     156                 :            :                 cpumask_copy(data->affinity, mask);
     157                 :            :         case IRQ_SET_MASK_OK_NOCOPY:
     158                 :     402497 :                 irq_set_thread_affinity(desc);
     159                 :            :                 ret = 0;
     160                 :            :         }
     161                 :            : 
     162                 :          0 :         return ret;
     163                 :            : }
     164                 :            : 
     165                 :          0 : int __irq_set_affinity_locked(struct irq_data *data, const struct cpumask *mask)
     166                 :            : {
     167                 :            :         struct irq_chip *chip = irq_data_get_irq_chip(data);
     168                 :            :         struct irq_desc *desc = irq_data_to_desc(data);
     169                 :            :         int ret = 0;
     170                 :            : 
     171 [ +  - ][ +  - ]:     402497 :         if (!chip || !chip->irq_set_affinity)
     172                 :            :                 return -EINVAL;
     173                 :            : 
     174                 :            :         if (irq_can_move_pcntxt(data)) {
     175                 :     402497 :                 ret = irq_do_set_affinity(data, mask, false);
     176                 :            :         } else {
     177                 :            :                 irqd_set_move_pending(data);
     178                 :            :                 irq_copy_pending(desc, mask);
     179                 :            :         }
     180                 :            : 
     181         [ -  + ]:     402497 :         if (desc->affinity_notify) {
     182                 :            :                 kref_get(&desc->affinity_notify->kref);
     183                 :          0 :                 schedule_work(&desc->affinity_notify->work);
     184                 :            :         }
     185                 :            :         irqd_set(data, IRQD_AFFINITY_SET);
     186                 :            : 
     187                 :     402497 :         return ret;
     188                 :            : }
     189                 :            : 
     190                 :            : /**
     191                 :            :  *      irq_set_affinity - Set the irq affinity of a given irq
     192                 :            :  *      @irq:           Interrupt to set affinity
     193                 :            :  *      @mask:          cpumask
     194                 :            :  *
     195                 :            :  */
     196                 :          0 : int irq_set_affinity(unsigned int irq, const struct cpumask *mask)
     197                 :            : {
     198                 :     402497 :         struct irq_desc *desc = irq_to_desc(irq);
     199                 :            :         unsigned long flags;
     200                 :            :         int ret;
     201                 :            : 
     202         [ +  - ]:     402497 :         if (!desc)
     203                 :            :                 return -EINVAL;
     204                 :            : 
     205                 :     402497 :         raw_spin_lock_irqsave(&desc->lock, flags);
     206                 :     402497 :         ret =  __irq_set_affinity_locked(irq_desc_get_irq_data(desc), mask);
     207                 :     402497 :         raw_spin_unlock_irqrestore(&desc->lock, flags);
     208                 :     402497 :         return ret;
     209                 :            : }
     210                 :            : 
     211                 :          0 : int irq_set_affinity_hint(unsigned int irq, const struct cpumask *m)
     212                 :            : {
     213                 :            :         unsigned long flags;
     214                 :            :         struct irq_desc *desc = irq_get_desc_lock(irq, &flags, IRQ_GET_DESC_CHECK_GLOBAL);
     215                 :            : 
     216         [ #  # ]:          0 :         if (!desc)
     217                 :            :                 return -EINVAL;
     218                 :          0 :         desc->affinity_hint = m;
     219                 :          0 :         irq_put_desc_unlock(desc, flags);
     220                 :          0 :         return 0;
     221                 :            : }
     222                 :            : EXPORT_SYMBOL_GPL(irq_set_affinity_hint);
     223                 :            : 
     224                 :          0 : static void irq_affinity_notify(struct work_struct *work)
     225                 :            : {
     226                 :          0 :         struct irq_affinity_notify *notify =
     227                 :            :                 container_of(work, struct irq_affinity_notify, work);
     228                 :          0 :         struct irq_desc *desc = irq_to_desc(notify->irq);
     229                 :            :         cpumask_var_t cpumask;
     230                 :            :         unsigned long flags;
     231                 :            : 
     232         [ #  # ]:          0 :         if (!desc || !alloc_cpumask_var(&cpumask, GFP_KERNEL))
     233                 :            :                 goto out;
     234                 :            : 
     235                 :          0 :         raw_spin_lock_irqsave(&desc->lock, flags);
     236                 :            :         if (irq_move_pending(&desc->irq_data))
     237                 :            :                 irq_get_pending(cpumask, desc);
     238                 :            :         else
     239                 :            :                 cpumask_copy(cpumask, desc->irq_data.affinity);
     240                 :          0 :         raw_spin_unlock_irqrestore(&desc->lock, flags);
     241                 :            : 
     242                 :          0 :         notify->notify(notify, cpumask);
     243                 :            : 
     244                 :            :         free_cpumask_var(cpumask);
     245                 :            : out:
     246                 :          0 :         kref_put(&notify->kref, notify->release);
     247                 :          0 : }
     248                 :            : 
     249                 :            : /**
     250                 :            :  *      irq_set_affinity_notifier - control notification of IRQ affinity changes
     251                 :            :  *      @irq:           Interrupt for which to enable/disable notification
     252                 :            :  *      @notify:        Context for notification, or %NULL to disable
     253                 :            :  *                      notification.  Function pointers must be initialised;
     254                 :            :  *                      the other fields will be initialised by this function.
     255                 :            :  *
     256                 :            :  *      Must be called in process context.  Notification may only be enabled
     257                 :            :  *      after the IRQ is allocated and must be disabled before the IRQ is
     258                 :            :  *      freed using free_irq().
     259                 :            :  */
     260                 :            : int
     261                 :          0 : irq_set_affinity_notifier(unsigned int irq, struct irq_affinity_notify *notify)
     262                 :            : {
     263                 :          0 :         struct irq_desc *desc = irq_to_desc(irq);
     264                 :            :         struct irq_affinity_notify *old_notify;
     265                 :            :         unsigned long flags;
     266                 :            : 
     267                 :            :         /* The release function is promised process context */
     268                 :            :         might_sleep();
     269                 :            : 
     270         [ #  # ]:          0 :         if (!desc)
     271                 :            :                 return -EINVAL;
     272                 :            : 
     273                 :            :         /* Complete initialisation of *notify */
     274         [ #  # ]:          0 :         if (notify) {
     275                 :          0 :                 notify->irq = irq;
     276                 :            :                 kref_init(&notify->kref);
     277                 :          0 :                 INIT_WORK(&notify->work, irq_affinity_notify);
     278                 :            :         }
     279                 :            : 
     280                 :          0 :         raw_spin_lock_irqsave(&desc->lock, flags);
     281                 :          0 :         old_notify = desc->affinity_notify;
     282                 :          0 :         desc->affinity_notify = notify;
     283                 :          0 :         raw_spin_unlock_irqrestore(&desc->lock, flags);
     284                 :            : 
     285         [ #  # ]:          0 :         if (old_notify)
     286                 :          0 :                 kref_put(&old_notify->kref, old_notify->release);
     287                 :            : 
     288                 :            :         return 0;
     289                 :            : }
     290                 :            : EXPORT_SYMBOL_GPL(irq_set_affinity_notifier);
     291                 :            : 
     292                 :            : #ifndef CONFIG_AUTO_IRQ_AFFINITY
     293                 :            : /*
     294                 :            :  * Generic version of the affinity autoselector.
     295                 :            :  */
     296                 :            : static int
     297                 :          0 : setup_affinity(unsigned int irq, struct irq_desc *desc, struct cpumask *mask)
     298                 :            : {
     299                 :            :         struct cpumask *set = irq_default_affinity;
     300                 :          0 :         int node = desc->irq_data.node;
     301                 :            : 
     302                 :            :         /* Excludes PER_CPU and NO_BALANCE interrupts */
     303         [ #  # ]:          0 :         if (!irq_can_set_affinity(irq))
     304                 :            :                 return 0;
     305                 :            : 
     306                 :            :         /*
     307                 :            :          * Preserve an userspace affinity setup, but make sure that
     308                 :            :          * one of the targets is online.
     309                 :            :          */
     310         [ #  # ]:          0 :         if (irqd_has_set(&desc->irq_data, IRQD_AFFINITY_SET)) {
     311         [ #  # ]:          0 :                 if (cpumask_intersects(desc->irq_data.affinity,
     312                 :            :                                        cpu_online_mask))
     313                 :          0 :                         set = desc->irq_data.affinity;
     314                 :            :                 else
     315                 :            :                         irqd_clear(&desc->irq_data, IRQD_AFFINITY_SET);
     316                 :            :         }
     317                 :            : 
     318                 :          0 :         cpumask_and(mask, cpu_online_mask, set);
     319         [ #  # ]:          0 :         if (node != NUMA_NO_NODE) {
     320                 :            :                 const struct cpumask *nodemask = cpumask_of_node(node);
     321                 :            : 
     322                 :            :                 /* make sure at least one of the cpus in nodemask is online */
     323         [ #  # ]:          0 :                 if (cpumask_intersects(mask, nodemask))
     324                 :            :                         cpumask_and(mask, mask, nodemask);
     325                 :            :         }
     326                 :          0 :         irq_do_set_affinity(&desc->irq_data, mask, false);
     327                 :          0 :         return 0;
     328                 :            : }
     329                 :            : #else
     330                 :            : static inline int
     331                 :            : setup_affinity(unsigned int irq, struct irq_desc *d, struct cpumask *mask)
     332                 :            : {
     333                 :            :         return irq_select_affinity(irq);
     334                 :            : }
     335                 :            : #endif
     336                 :            : 
     337                 :            : /*
     338                 :            :  * Called when affinity is set via /proc/irq
     339                 :            :  */
     340                 :          0 : int irq_select_affinity_usr(unsigned int irq, struct cpumask *mask)
     341                 :            : {
     342                 :          0 :         struct irq_desc *desc = irq_to_desc(irq);
     343                 :            :         unsigned long flags;
     344                 :            :         int ret;
     345                 :            : 
     346                 :          0 :         raw_spin_lock_irqsave(&desc->lock, flags);
     347                 :          0 :         ret = setup_affinity(irq, desc, mask);
     348                 :          0 :         raw_spin_unlock_irqrestore(&desc->lock, flags);
     349                 :          0 :         return ret;
     350                 :            : }
     351                 :            : 
     352                 :            : #else
     353                 :            : static inline int
     354                 :            : setup_affinity(unsigned int irq, struct irq_desc *desc, struct cpumask *mask)
     355                 :            : {
     356                 :            :         return 0;
     357                 :            : }
     358                 :            : #endif
     359                 :            : 
     360                 :          0 : void __disable_irq(struct irq_desc *desc, unsigned int irq, bool suspend)
     361                 :            : {
     362         [ #  # ]:          0 :         if (suspend) {
     363 [ #  # ][ #  # ]:          0 :                 if (!desc->action || (desc->action->flags & IRQF_NO_SUSPEND))
     364                 :          0 :                         return;
     365                 :          0 :                 desc->istate |= IRQS_SUSPENDED;
     366                 :            :         }
     367                 :            : 
     368         [ #  # ]:          0 :         if (!desc->depth++)
     369                 :          0 :                 irq_disable(desc);
     370                 :            : }
     371                 :            : 
     372                 :          0 : static int __disable_irq_nosync(unsigned int irq)
     373                 :            : {
     374                 :            :         unsigned long flags;
     375                 :            :         struct irq_desc *desc = irq_get_desc_buslock(irq, &flags, IRQ_GET_DESC_CHECK_GLOBAL);
     376                 :            : 
     377         [ #  # ]:          0 :         if (!desc)
     378                 :            :                 return -EINVAL;
     379                 :          0 :         __disable_irq(desc, irq, false);
     380                 :          0 :         irq_put_desc_busunlock(desc, flags);
     381                 :          0 :         return 0;
     382                 :            : }
     383                 :            : 
     384                 :            : /**
     385                 :            :  *      disable_irq_nosync - disable an irq without waiting
     386                 :            :  *      @irq: Interrupt to disable
     387                 :            :  *
     388                 :            :  *      Disable the selected interrupt line.  Disables and Enables are
     389                 :            :  *      nested.
     390                 :            :  *      Unlike disable_irq(), this function does not ensure existing
     391                 :            :  *      instances of the IRQ handler have completed before returning.
     392                 :            :  *
     393                 :            :  *      This function may be called from IRQ context.
     394                 :            :  */
     395                 :          0 : void disable_irq_nosync(unsigned int irq)
     396                 :            : {
     397                 :          0 :         __disable_irq_nosync(irq);
     398                 :          0 : }
     399                 :            : EXPORT_SYMBOL(disable_irq_nosync);
     400                 :            : 
     401                 :            : /**
     402                 :            :  *      disable_irq - disable an irq and wait for completion
     403                 :            :  *      @irq: Interrupt to disable
     404                 :            :  *
     405                 :            :  *      Disable the selected interrupt line.  Enables and Disables are
     406                 :            :  *      nested.
     407                 :            :  *      This function waits for any pending IRQ handlers for this interrupt
     408                 :            :  *      to complete before returning. If you use this function while
     409                 :            :  *      holding a resource the IRQ handler may need you will deadlock.
     410                 :            :  *
     411                 :            :  *      This function may be called - with care - from IRQ context.
     412                 :            :  */
     413                 :          0 : void disable_irq(unsigned int irq)
     414                 :            : {
     415         [ #  # ]:          0 :         if (!__disable_irq_nosync(irq))
     416                 :          0 :                 synchronize_irq(irq);
     417                 :          0 : }
     418                 :            : EXPORT_SYMBOL(disable_irq);
     419                 :            : 
     420                 :          0 : void __enable_irq(struct irq_desc *desc, unsigned int irq, bool resume)
     421                 :            : {
     422         [ #  # ]:          0 :         if (resume) {
     423         [ #  # ]:          0 :                 if (!(desc->istate & IRQS_SUSPENDED)) {
     424         [ #  # ]:          0 :                         if (!desc->action)
     425                 :            :                                 return;
     426         [ #  # ]:          0 :                         if (!(desc->action->flags & IRQF_FORCE_RESUME))
     427                 :            :                                 return;
     428                 :            :                         /* Pretend that it got disabled ! */
     429                 :          0 :                         desc->depth++;
     430                 :            :                 }
     431                 :          0 :                 desc->istate &= ~IRQS_SUSPENDED;
     432                 :            :         }
     433                 :            : 
     434      [ #  #  # ]:          0 :         switch (desc->depth) {
     435                 :            :         case 0:
     436                 :            :  err_out:
     437                 :          0 :                 WARN(1, KERN_WARNING "Unbalanced enable for IRQ %d\n", irq);
     438                 :          0 :                 break;
     439                 :            :         case 1: {
     440         [ #  # ]:          0 :                 if (desc->istate & IRQS_SUSPENDED)
     441                 :            :                         goto err_out;
     442                 :            :                 /* Prevent probing on this irq: */
     443                 :            :                 irq_settings_set_noprobe(desc);
     444                 :          0 :                 irq_enable(desc);
     445                 :          0 :                 check_irq_resend(desc, irq);
     446                 :            :                 /* fall-through */
     447                 :            :         }
     448                 :            :         default:
     449                 :          0 :                 desc->depth--;
     450                 :            :         }
     451                 :            : }
     452                 :            : 
     453                 :            : /**
     454                 :            :  *      enable_irq - enable handling of an irq
     455                 :            :  *      @irq: Interrupt to enable
     456                 :            :  *
     457                 :            :  *      Undoes the effect of one call to disable_irq().  If this
     458                 :            :  *      matches the last disable, processing of interrupts on this
     459                 :            :  *      IRQ line is re-enabled.
     460                 :            :  *
     461                 :            :  *      This function may be called from IRQ context only when
     462                 :            :  *      desc->irq_data.chip->bus_lock and desc->chip->bus_sync_unlock are NULL !
     463                 :            :  */
     464                 :          0 : void enable_irq(unsigned int irq)
     465                 :            : {
     466                 :            :         unsigned long flags;
     467                 :            :         struct irq_desc *desc = irq_get_desc_buslock(irq, &flags, IRQ_GET_DESC_CHECK_GLOBAL);
     468                 :            : 
     469         [ #  # ]:          0 :         if (!desc)
     470                 :          0 :                 return;
     471 [ #  # ][ #  # ]:          0 :         if (WARN(!desc->irq_data.chip,
     472                 :            :                  KERN_ERR "enable_irq before setup/request_irq: irq %u\n", irq))
     473                 :            :                 goto out;
     474                 :            : 
     475                 :          0 :         __enable_irq(desc, irq, false);
     476                 :            : out:
     477                 :          0 :         irq_put_desc_busunlock(desc, flags);
     478                 :            : }
     479                 :            : EXPORT_SYMBOL(enable_irq);
     480                 :            : 
     481                 :          0 : static int set_irq_wake_real(unsigned int irq, unsigned int on)
     482                 :            : {
     483                 :          0 :         struct irq_desc *desc = irq_to_desc(irq);
     484                 :            :         int ret = -ENXIO;
     485                 :            : 
     486         [ #  # ]:          0 :         if (irq_desc_get_chip(desc)->flags &  IRQCHIP_SKIP_SET_WAKE)
     487                 :            :                 return 0;
     488                 :            : 
     489         [ #  # ]:          0 :         if (desc->irq_data.chip->irq_set_wake)
     490                 :          0 :                 ret = desc->irq_data.chip->irq_set_wake(&desc->irq_data, on);
     491                 :            : 
     492                 :          0 :         return ret;
     493                 :            : }
     494                 :            : 
     495                 :            : /**
     496                 :            :  *      irq_set_irq_wake - control irq power management wakeup
     497                 :            :  *      @irq:   interrupt to control
     498                 :            :  *      @on:    enable/disable power management wakeup
     499                 :            :  *
     500                 :            :  *      Enable/disable power management wakeup mode, which is
     501                 :            :  *      disabled by default.  Enables and disables must match,
     502                 :            :  *      just as they match for non-wakeup mode support.
     503                 :            :  *
     504                 :            :  *      Wakeup mode lets this IRQ wake the system from sleep
     505                 :            :  *      states like "suspend to RAM".
     506                 :            :  */
     507                 :          0 : int irq_set_irq_wake(unsigned int irq, unsigned int on)
     508                 :            : {
     509                 :            :         unsigned long flags;
     510                 :            :         struct irq_desc *desc = irq_get_desc_buslock(irq, &flags, IRQ_GET_DESC_CHECK_GLOBAL);
     511                 :            :         int ret = 0;
     512                 :            : 
     513         [ #  # ]:          0 :         if (!desc)
     514                 :            :                 return -EINVAL;
     515                 :            : 
     516                 :            :         /* wakeup-capable irqs can be shared between drivers that
     517                 :            :          * don't need to have the same sleep mode behaviors.
     518                 :            :          */
     519         [ #  # ]:          0 :         if (on) {
     520         [ #  # ]:          0 :                 if (desc->wake_depth++ == 0) {
     521                 :          0 :                         ret = set_irq_wake_real(irq, on);
     522         [ #  # ]:          0 :                         if (ret)
     523                 :          0 :                                 desc->wake_depth = 0;
     524                 :            :                         else
     525                 :            :                                 irqd_set(&desc->irq_data, IRQD_WAKEUP_STATE);
     526                 :            :                 }
     527                 :            :         } else {
     528         [ #  # ]:          0 :                 if (desc->wake_depth == 0) {
     529                 :          0 :                         WARN(1, "Unbalanced IRQ %d wake disable\n", irq);
     530         [ #  # ]:          0 :                 } else if (--desc->wake_depth == 0) {
     531                 :          0 :                         ret = set_irq_wake_real(irq, on);
     532         [ #  # ]:          0 :                         if (ret)
     533                 :          0 :                                 desc->wake_depth = 1;
     534                 :            :                         else
     535                 :            :                                 irqd_clear(&desc->irq_data, IRQD_WAKEUP_STATE);
     536                 :            :                 }
     537                 :            :         }
     538                 :          0 :         irq_put_desc_busunlock(desc, flags);
     539                 :          0 :         return ret;
     540                 :            : }
     541                 :            : EXPORT_SYMBOL(irq_set_irq_wake);
     542                 :            : 
     543                 :            : /*
     544                 :            :  * Internal function that tells the architecture code whether a
     545                 :            :  * particular irq has been exclusively allocated or is available
     546                 :            :  * for driver use.
     547                 :            :  */
     548                 :          0 : int can_request_irq(unsigned int irq, unsigned long irqflags)
     549                 :            : {
     550                 :            :         unsigned long flags;
     551                 :          0 :         struct irq_desc *desc = irq_get_desc_lock(irq, &flags, 0);
     552                 :            :         int canrequest = 0;
     553                 :            : 
     554         [ #  # ]:          0 :         if (!desc)
     555                 :            :                 return 0;
     556                 :            : 
     557         [ #  # ]:          0 :         if (irq_settings_can_request(desc)) {
     558 [ #  # ][ #  # ]:          0 :                 if (!desc->action ||
     559                 :          0 :                     irqflags & desc->action->flags & IRQF_SHARED)
     560                 :            :                         canrequest = 1;
     561                 :            :         }
     562                 :          0 :         irq_put_desc_unlock(desc, flags);
     563                 :          0 :         return canrequest;
     564                 :            : }
     565                 :            : 
     566                 :          0 : int __irq_set_trigger(struct irq_desc *desc, unsigned int irq,
     567                 :            :                       unsigned long flags)
     568                 :            : {
     569                 :          0 :         struct irq_chip *chip = desc->irq_data.chip;
     570                 :            :         int ret, unmask = 0;
     571                 :            : 
     572 [ #  # ][ #  # ]:          0 :         if (!chip || !chip->irq_set_type) {
     573                 :            :                 /*
     574                 :            :                  * IRQF_TRIGGER_* but the PIC does not support multiple
     575                 :            :                  * flow-types?
     576                 :            :                  */
     577                 :            :                 pr_debug("No set_type function for IRQ %d (%s)\n", irq,
     578                 :            :                          chip ? (chip->name ? : "unknown") : "unknown");
     579                 :            :                 return 0;
     580                 :            :         }
     581                 :            : 
     582                 :          0 :         flags &= IRQ_TYPE_SENSE_MASK;
     583                 :            : 
     584         [ #  # ]:          0 :         if (chip->flags & IRQCHIP_SET_TYPE_MASKED) {
     585         [ #  # ]:          0 :                 if (!irqd_irq_masked(&desc->irq_data))
     586                 :          0 :                         mask_irq(desc);
     587         [ #  # ]:          0 :                 if (!irqd_irq_disabled(&desc->irq_data))
     588                 :            :                         unmask = 1;
     589                 :            :         }
     590                 :            : 
     591                 :            :         /* caller masked out all except trigger mode flags */
     592                 :          0 :         ret = chip->irq_set_type(&desc->irq_data, flags);
     593                 :            : 
     594      [ #  #  # ]:          0 :         switch (ret) {
     595                 :            :         case IRQ_SET_MASK_OK:
     596                 :            :                 irqd_clear(&desc->irq_data, IRQD_TRIGGER_MASK);
     597                 :            :                 irqd_set(&desc->irq_data, flags);
     598                 :            : 
     599                 :            :         case IRQ_SET_MASK_OK_NOCOPY:
     600                 :            :                 flags = irqd_get_trigger_type(&desc->irq_data);
     601                 :            :                 irq_settings_set_trigger_mask(desc, flags);
     602                 :            :                 irqd_clear(&desc->irq_data, IRQD_LEVEL);
     603                 :            :                 irq_settings_clr_level(desc);
     604         [ #  # ]:          0 :                 if (flags & IRQ_TYPE_LEVEL_MASK) {
     605                 :            :                         irq_settings_set_level(desc);
     606                 :            :                         irqd_set(&desc->irq_data, IRQD_LEVEL);
     607                 :            :                 }
     608                 :            : 
     609                 :            :                 ret = 0;
     610                 :            :                 break;
     611                 :            :         default:
     612                 :          0 :                 pr_err("Setting trigger mode %lu for irq %u failed (%pF)\n",
     613                 :            :                        flags, irq, chip->irq_set_type);
     614                 :            :         }
     615         [ #  # ]:          0 :         if (unmask)
     616                 :          0 :                 unmask_irq(desc);
     617                 :          0 :         return ret;
     618                 :            : }
     619                 :            : 
     620                 :            : #ifdef CONFIG_HARDIRQS_SW_RESEND
     621                 :          0 : int irq_set_parent(int irq, int parent_irq)
     622                 :            : {
     623                 :            :         unsigned long flags;
     624                 :          0 :         struct irq_desc *desc = irq_get_desc_lock(irq, &flags, 0);
     625                 :            : 
     626         [ #  # ]:          0 :         if (!desc)
     627                 :            :                 return -EINVAL;
     628                 :            : 
     629                 :          0 :         desc->parent_irq = parent_irq;
     630                 :            : 
     631                 :          0 :         irq_put_desc_unlock(desc, flags);
     632                 :          0 :         return 0;
     633                 :            : }
     634                 :            : #endif
     635                 :            : 
     636                 :            : /*
     637                 :            :  * Default primary interrupt handler for threaded interrupts. Is
     638                 :            :  * assigned as primary handler when request_threaded_irq is called
     639                 :            :  * with handler == NULL. Useful for oneshot interrupts.
     640                 :            :  */
     641                 :          0 : static irqreturn_t irq_default_primary_handler(int irq, void *dev_id)
     642                 :            : {
     643                 :          0 :         return IRQ_WAKE_THREAD;
     644                 :            : }
     645                 :            : 
     646                 :            : /*
     647                 :            :  * Primary handler for nested threaded interrupts. Should never be
     648                 :            :  * called.
     649                 :            :  */
     650                 :          0 : static irqreturn_t irq_nested_primary_handler(int irq, void *dev_id)
     651                 :            : {
     652                 :          0 :         WARN(1, "Primary handler called for nested irq %d\n", irq);
     653                 :          0 :         return IRQ_NONE;
     654                 :            : }
     655                 :            : 
     656                 :          0 : static int irq_wait_for_interrupt(struct irqaction *action)
     657                 :            : {
     658                 :          0 :         set_current_state(TASK_INTERRUPTIBLE);
     659                 :            : 
     660         [ #  # ]:          0 :         while (!kthread_should_stop()) {
     661                 :            : 
     662         [ #  # ]:          0 :                 if (test_and_clear_bit(IRQTF_RUNTHREAD,
     663                 :            :                                        &action->thread_flags)) {
     664                 :          0 :                         __set_current_state(TASK_RUNNING);
     665                 :          0 :                         return 0;
     666                 :            :                 }
     667                 :          0 :                 schedule();
     668                 :          0 :                 set_current_state(TASK_INTERRUPTIBLE);
     669                 :            :         }
     670                 :          0 :         __set_current_state(TASK_RUNNING);
     671                 :          0 :         return -1;
     672                 :            : }
     673                 :            : 
     674                 :            : /*
     675                 :            :  * Oneshot interrupts keep the irq line masked until the threaded
     676                 :            :  * handler finished. unmask if the interrupt has not been disabled and
     677                 :            :  * is marked MASKED.
     678                 :            :  */
     679                 :          0 : static void irq_finalize_oneshot(struct irq_desc *desc,
     680                 :            :                                  struct irqaction *action)
     681                 :            : {
     682         [ #  # ]:          0 :         if (!(desc->istate & IRQS_ONESHOT))
     683                 :          0 :                 return;
     684                 :            : again:
     685                 :            :         chip_bus_lock(desc);
     686                 :          0 :         raw_spin_lock_irq(&desc->lock);
     687                 :            : 
     688                 :            :         /*
     689                 :            :          * Implausible though it may be we need to protect us against
     690                 :            :          * the following scenario:
     691                 :            :          *
     692                 :            :          * The thread is faster done than the hard interrupt handler
     693                 :            :          * on the other CPU. If we unmask the irq line then the
     694                 :            :          * interrupt can come in again and masks the line, leaves due
     695                 :            :          * to IRQS_INPROGRESS and the irq line is masked forever.
     696                 :            :          *
     697                 :            :          * This also serializes the state of shared oneshot handlers
     698                 :            :          * versus "desc->threads_onehsot |= action->thread_mask;" in
     699                 :            :          * irq_wake_thread(). See the comment there which explains the
     700                 :            :          * serialization.
     701                 :            :          */
     702         [ #  # ]:          0 :         if (unlikely(irqd_irq_inprogress(&desc->irq_data))) {
     703                 :            :                 raw_spin_unlock_irq(&desc->lock);
     704                 :            :                 chip_bus_sync_unlock(desc);
     705                 :          0 :                 cpu_relax();
     706                 :          0 :                 goto again;
     707                 :            :         }
     708                 :            : 
     709                 :            :         /*
     710                 :            :          * Now check again, whether the thread should run. Otherwise
     711                 :            :          * we would clear the threads_oneshot bit of this thread which
     712                 :            :          * was just set.
     713                 :            :          */
     714         [ #  # ]:          0 :         if (test_bit(IRQTF_RUNTHREAD, &action->thread_flags))
     715                 :            :                 goto out_unlock;
     716                 :            : 
     717                 :          0 :         desc->threads_oneshot &= ~action->thread_mask;
     718                 :            : 
     719 [ #  # ][ #  # ]:          0 :         if (!desc->threads_oneshot && !irqd_irq_disabled(&desc->irq_data) &&
                 [ #  # ]
     720                 :            :             irqd_irq_masked(&desc->irq_data))
     721                 :          0 :                 unmask_irq(desc);
     722                 :            : 
     723                 :            : out_unlock:
     724                 :            :         raw_spin_unlock_irq(&desc->lock);
     725                 :            :         chip_bus_sync_unlock(desc);
     726                 :            : }
     727                 :            : 
     728                 :            : #ifdef CONFIG_SMP
     729                 :            : /*
     730                 :            :  * Check whether we need to chasnge the affinity of the interrupt thread.
     731                 :            :  */
     732                 :            : static void
     733                 :          0 : irq_thread_check_affinity(struct irq_desc *desc, struct irqaction *action)
     734                 :            : {
     735                 :            :         cpumask_var_t mask;
     736                 :            :         bool valid = true;
     737                 :            : 
     738         [ #  # ]:          0 :         if (!test_and_clear_bit(IRQTF_AFFINITY, &action->thread_flags))
     739                 :          0 :                 return;
     740                 :            : 
     741                 :            :         /*
     742                 :            :          * In case we are out of memory we set IRQTF_AFFINITY again and
     743                 :            :          * try again next time
     744                 :            :          */
     745                 :            :         if (!alloc_cpumask_var(&mask, GFP_KERNEL)) {
     746                 :            :                 set_bit(IRQTF_AFFINITY, &action->thread_flags);
     747                 :            :                 return;
     748                 :            :         }
     749                 :            : 
     750                 :          0 :         raw_spin_lock_irq(&desc->lock);
     751                 :            :         /*
     752                 :            :          * This code is triggered unconditionally. Check the affinity
     753                 :            :          * mask pointer. For CPU_MASK_OFFSTACK=n this is optimized out.
     754                 :            :          */
     755         [ #  # ]:          0 :         if (desc->irq_data.affinity)
     756                 :            :                 cpumask_copy(mask, desc->irq_data.affinity);
     757                 :            :         else
     758                 :            :                 valid = false;
     759                 :            :         raw_spin_unlock_irq(&desc->lock);
     760                 :            : 
     761         [ #  # ]:          0 :         if (valid)
     762                 :          0 :                 set_cpus_allowed_ptr(current, mask);
     763                 :            :         free_cpumask_var(mask);
     764                 :            : }
     765                 :            : #else
     766                 :            : static inline void
     767                 :            : irq_thread_check_affinity(struct irq_desc *desc, struct irqaction *action) { }
     768                 :            : #endif
     769                 :            : 
     770                 :            : /*
     771                 :            :  * Interrupts which are not explicitely requested as threaded
     772                 :            :  * interrupts rely on the implicit bh/preempt disable of the hard irq
     773                 :            :  * context. So we need to disable bh here to avoid deadlocks and other
     774                 :            :  * side effects.
     775                 :            :  */
     776                 :            : static irqreturn_t
     777                 :          0 : irq_forced_thread_fn(struct irq_desc *desc, struct irqaction *action)
     778                 :            : {
     779                 :            :         irqreturn_t ret;
     780                 :            : 
     781                 :          0 :         local_bh_disable();
     782                 :          0 :         ret = action->thread_fn(action->irq, action->dev_id);
     783                 :          0 :         irq_finalize_oneshot(desc, action);
     784                 :          0 :         local_bh_enable();
     785                 :          0 :         return ret;
     786                 :            : }
     787                 :            : 
     788                 :            : /*
     789                 :            :  * Interrupts explicitly requested as threaded interrupts want to be
     790                 :            :  * preemtible - many of them need to sleep and wait for slow busses to
     791                 :            :  * complete.
     792                 :            :  */
     793                 :          0 : static irqreturn_t irq_thread_fn(struct irq_desc *desc,
     794                 :            :                 struct irqaction *action)
     795                 :            : {
     796                 :            :         irqreturn_t ret;
     797                 :            : 
     798                 :          0 :         ret = action->thread_fn(action->irq, action->dev_id);
     799                 :          0 :         irq_finalize_oneshot(desc, action);
     800                 :          0 :         return ret;
     801                 :            : }
     802                 :            : 
     803                 :          0 : static void wake_threads_waitq(struct irq_desc *desc)
     804                 :            : {
     805 [ #  # ][ #  # ]:          0 :         if (atomic_dec_and_test(&desc->threads_active) &&
     806                 :            :             waitqueue_active(&desc->wait_for_threads))
     807                 :          0 :                 wake_up(&desc->wait_for_threads);
     808                 :          0 : }
     809                 :            : 
     810                 :          0 : static void irq_thread_dtor(struct callback_head *unused)
     811                 :            : {
     812                 :          0 :         struct task_struct *tsk = current;
     813                 :            :         struct irq_desc *desc;
     814                 :            :         struct irqaction *action;
     815                 :            : 
     816 [ #  # ][ #  # ]:          0 :         if (WARN_ON_ONCE(!(current->flags & PF_EXITING)))
         [ #  # ][ #  # ]
     817                 :          0 :                 return;
     818                 :            : 
     819                 :          0 :         action = kthread_data(tsk);
     820                 :            : 
     821                 :          0 :         pr_err("exiting task \"%s\" (%d) is an active IRQ thread (irq %d)\n",
     822                 :            :                tsk->comm, tsk->pid, action->irq);
     823                 :            : 
     824                 :            : 
     825                 :          0 :         desc = irq_to_desc(action->irq);
     826                 :            :         /*
     827                 :            :          * If IRQTF_RUNTHREAD is set, we need to decrement
     828                 :            :          * desc->threads_active and wake possible waiters.
     829                 :            :          */
     830         [ #  # ]:          0 :         if (test_and_clear_bit(IRQTF_RUNTHREAD, &action->thread_flags))
     831                 :          0 :                 wake_threads_waitq(desc);
     832                 :            : 
     833                 :            :         /* Prevent a stale desc->threads_oneshot */
     834                 :          0 :         irq_finalize_oneshot(desc, action);
     835                 :            : }
     836                 :            : 
     837                 :            : /*
     838                 :            :  * Interrupt handler thread
     839                 :            :  */
     840                 :          0 : static int irq_thread(void *data)
     841                 :            : {
     842                 :            :         struct callback_head on_exit_work;
     843                 :            :         struct irqaction *action = data;
     844                 :          0 :         struct irq_desc *desc = irq_to_desc(action->irq);
     845                 :            :         irqreturn_t (*handler_fn)(struct irq_desc *desc,
     846                 :            :                         struct irqaction *action);
     847                 :            : 
     848 [ #  # ][ #  # ]:          0 :         if (force_irqthreads && test_bit(IRQTF_FORCED_THREAD,
     849                 :            :                                         &action->thread_flags))
     850                 :            :                 handler_fn = irq_forced_thread_fn;
     851                 :            :         else
     852                 :            :                 handler_fn = irq_thread_fn;
     853                 :            : 
     854                 :            :         init_task_work(&on_exit_work, irq_thread_dtor);
     855                 :          0 :         task_work_add(current, &on_exit_work, false);
     856                 :            : 
     857                 :          0 :         irq_thread_check_affinity(desc, action);
     858                 :            : 
     859         [ #  # ]:          0 :         while (!irq_wait_for_interrupt(action)) {
     860                 :            :                 irqreturn_t action_ret;
     861                 :            : 
     862                 :          0 :                 irq_thread_check_affinity(desc, action);
     863                 :            : 
     864                 :          0 :                 action_ret = handler_fn(desc, action);
     865         [ #  # ]:          0 :                 if (!noirqdebug)
     866                 :          0 :                         note_interrupt(action->irq, desc, action_ret);
     867                 :            : 
     868                 :          0 :                 wake_threads_waitq(desc);
     869                 :            :         }
     870                 :            : 
     871                 :            :         /*
     872                 :            :          * This is the regular exit path. __free_irq() is stopping the
     873                 :            :          * thread via kthread_stop() after calling
     874                 :            :          * synchronize_irq(). So neither IRQTF_RUNTHREAD nor the
     875                 :            :          * oneshot mask bit can be set. We cannot verify that as we
     876                 :            :          * cannot touch the oneshot mask at this point anymore as
     877                 :            :          * __setup_irq() might have given out currents thread_mask
     878                 :            :          * again.
     879                 :            :          */
     880                 :          0 :         task_work_cancel(current, irq_thread_dtor);
     881                 :          0 :         return 0;
     882                 :            : }
     883                 :            : 
     884                 :          0 : static void irq_setup_forced_threading(struct irqaction *new)
     885                 :            : {
     886         [ #  # ]:          0 :         if (!force_irqthreads)
     887                 :            :                 return;
     888         [ #  # ]:          0 :         if (new->flags & (IRQF_NO_THREAD | IRQF_PERCPU | IRQF_ONESHOT))
     889                 :            :                 return;
     890                 :            : 
     891                 :          0 :         new->flags |= IRQF_ONESHOT;
     892                 :            : 
     893         [ #  # ]:          0 :         if (!new->thread_fn) {
     894                 :          0 :                 set_bit(IRQTF_FORCED_THREAD, &new->thread_flags);
     895                 :          0 :                 new->thread_fn = new->handler;
     896                 :          0 :                 new->handler = irq_default_primary_handler;
     897                 :            :         }
     898                 :            : }
     899                 :            : 
     900                 :            : /*
     901                 :            :  * Internal function to register an irqaction - typically used to
     902                 :            :  * allocate special interrupts that are part of the architecture.
     903                 :            :  */
     904                 :            : static int
     905                 :          0 : __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
     906                 :            : {
     907                 :            :         struct irqaction *old, **old_ptr;
     908                 :            :         unsigned long flags, thread_mask = 0;
     909                 :            :         int ret, nested, shared = 0;
     910                 :            :         cpumask_var_t mask;
     911                 :            : 
     912         [ #  # ]:          0 :         if (!desc)
     913                 :            :                 return -EINVAL;
     914                 :            : 
     915         [ #  # ]:          0 :         if (desc->irq_data.chip == &no_irq_chip)
     916                 :            :                 return -ENOSYS;
     917         [ #  # ]:          0 :         if (!try_module_get(desc->owner))
     918                 :            :                 return -ENODEV;
     919                 :            : 
     920                 :            :         /*
     921                 :            :          * Check whether the interrupt nests into another interrupt
     922                 :            :          * thread.
     923                 :            :          */
     924                 :          0 :         nested = irq_settings_is_nested_thread(desc);
     925         [ #  # ]:          0 :         if (nested) {
     926         [ #  # ]:          0 :                 if (!new->thread_fn) {
     927                 :            :                         ret = -EINVAL;
     928                 :            :                         goto out_mput;
     929                 :            :                 }
     930                 :            :                 /*
     931                 :            :                  * Replace the primary handler which was provided from
     932                 :            :                  * the driver for non nested interrupt handling by the
     933                 :            :                  * dummy function which warns when called.
     934                 :            :                  */
     935                 :          0 :                 new->handler = irq_nested_primary_handler;
     936                 :            :         } else {
     937         [ #  # ]:          0 :                 if (irq_settings_can_thread(desc))
     938                 :          0 :                         irq_setup_forced_threading(new);
     939                 :            :         }
     940                 :            : 
     941                 :            :         /*
     942                 :            :          * Create a handler thread when a thread function is supplied
     943                 :            :          * and the interrupt does not nest into another interrupt
     944                 :            :          * thread.
     945                 :            :          */
     946 [ #  # ][ #  # ]:          0 :         if (new->thread_fn && !nested) {
     947                 :            :                 struct task_struct *t;
     948                 :            :                 static const struct sched_param param = {
     949                 :            :                         .sched_priority = MAX_USER_RT_PRIO/2,
     950                 :            :                 };
     951                 :            : 
     952                 :          0 :                 t = kthread_create(irq_thread, new, "irq/%d-%s", irq,
     953                 :            :                                    new->name);
     954         [ #  # ]:          0 :                 if (IS_ERR(t)) {
     955                 :            :                         ret = PTR_ERR(t);
     956                 :          0 :                         goto out_mput;
     957                 :            :                 }
     958                 :            : 
     959                 :          0 :                 sched_setscheduler_nocheck(t, SCHED_FIFO, &param);
     960                 :            : 
     961                 :            :                 /*
     962                 :            :                  * We keep the reference to the task struct even if
     963                 :            :                  * the thread dies to avoid that the interrupt code
     964                 :            :                  * references an already freed task_struct.
     965                 :            :                  */
     966                 :          0 :                 get_task_struct(t);
     967                 :          0 :                 new->thread = t;
     968                 :            :                 /*
     969                 :            :                  * Tell the thread to set its affinity. This is
     970                 :            :                  * important for shared interrupt handlers as we do
     971                 :            :                  * not invoke setup_affinity() for the secondary
     972                 :            :                  * handlers as everything is already set up. Even for
     973                 :            :                  * interrupts marked with IRQF_NO_BALANCE this is
     974                 :            :                  * correct as we want the thread to move to the cpu(s)
     975                 :            :                  * on which the requesting code placed the interrupt.
     976                 :            :                  */
     977                 :          0 :                 set_bit(IRQTF_AFFINITY, &new->thread_flags);
     978                 :            :         }
     979                 :            : 
     980                 :            :         if (!alloc_cpumask_var(&mask, GFP_KERNEL)) {
     981                 :            :                 ret = -ENOMEM;
     982                 :            :                 goto out_thread;
     983                 :            :         }
     984                 :            : 
     985                 :            :         /*
     986                 :            :          * Drivers are often written to work w/o knowledge about the
     987                 :            :          * underlying irq chip implementation, so a request for a
     988                 :            :          * threaded irq without a primary hard irq context handler
     989                 :            :          * requires the ONESHOT flag to be set. Some irq chips like
     990                 :            :          * MSI based interrupts are per se one shot safe. Check the
     991                 :            :          * chip flags, so we can avoid the unmask dance at the end of
     992                 :            :          * the threaded handler for those.
     993                 :            :          */
     994         [ #  # ]:          0 :         if (desc->irq_data.chip->flags & IRQCHIP_ONESHOT_SAFE)
     995                 :          0 :                 new->flags &= ~IRQF_ONESHOT;
     996                 :            : 
     997                 :            :         /*
     998                 :            :          * The following block of code has to be executed atomically
     999                 :            :          */
    1000                 :          0 :         raw_spin_lock_irqsave(&desc->lock, flags);
    1001                 :          0 :         old_ptr = &desc->action;
    1002                 :          0 :         old = *old_ptr;
    1003         [ #  # ]:          0 :         if (old) {
    1004                 :            :                 /*
    1005                 :            :                  * Can't share interrupts unless both agree to and are
    1006                 :            :                  * the same type (level, edge, polarity). So both flag
    1007                 :            :                  * fields must have IRQF_SHARED set and the bits which
    1008                 :            :                  * set the trigger type must match. Also all must
    1009                 :            :                  * agree on ONESHOT.
    1010                 :            :                  */
    1011         [ #  # ]:          0 :                 if (!((old->flags & new->flags) & IRQF_SHARED) ||
    1012         [ #  # ]:          0 :                     ((old->flags ^ new->flags) & IRQF_TRIGGER_MASK) ||
    1013                 :            :                     ((old->flags ^ new->flags) & IRQF_ONESHOT))
    1014                 :            :                         goto mismatch;
    1015                 :            : 
    1016                 :            :                 /* All handlers must agree on per-cpuness */
    1017         [ #  # ]:          0 :                 if ((old->flags & IRQF_PERCPU) !=
    1018                 :            :                     (new->flags & IRQF_PERCPU))
    1019                 :            :                         goto mismatch;
    1020                 :            : 
    1021                 :            :                 /* add new interrupt at end of irq queue */
    1022                 :            :                 do {
    1023                 :            :                         /*
    1024                 :            :                          * Or all existing action->thread_mask bits,
    1025                 :            :                          * so we can find the next zero bit for this
    1026                 :            :                          * new action.
    1027                 :            :                          */
    1028                 :          0 :                         thread_mask |= old->thread_mask;
    1029                 :          0 :                         old_ptr = &old->next;
    1030                 :          0 :                         old = *old_ptr;
    1031         [ #  # ]:          0 :                 } while (old);
    1032                 :            :                 shared = 1;
    1033                 :            :         }
    1034                 :            : 
    1035                 :            :         /*
    1036                 :            :          * Setup the thread mask for this irqaction for ONESHOT. For
    1037                 :            :          * !ONESHOT irqs the thread mask is 0 so we can avoid a
    1038                 :            :          * conditional in irq_wake_thread().
    1039                 :            :          */
    1040         [ #  # ]:          0 :         if (new->flags & IRQF_ONESHOT) {
    1041                 :            :                 /*
    1042                 :            :                  * Unlikely to have 32 resp 64 irqs sharing one line,
    1043                 :            :                  * but who knows.
    1044                 :            :                  */
    1045         [ #  # ]:          0 :                 if (thread_mask == ~0UL) {
    1046                 :            :                         ret = -EBUSY;
    1047                 :            :                         goto out_mask;
    1048                 :            :                 }
    1049                 :            :                 /*
    1050                 :            :                  * The thread_mask for the action is or'ed to
    1051                 :            :                  * desc->thread_active to indicate that the
    1052                 :            :                  * IRQF_ONESHOT thread handler has been woken, but not
    1053                 :            :                  * yet finished. The bit is cleared when a thread
    1054                 :            :                  * completes. When all threads of a shared interrupt
    1055                 :            :                  * line have completed desc->threads_active becomes
    1056                 :            :                  * zero and the interrupt line is unmasked. See
    1057                 :            :                  * handle.c:irq_wake_thread() for further information.
    1058                 :            :                  *
    1059                 :            :                  * If no thread is woken by primary (hard irq context)
    1060                 :            :                  * interrupt handlers, then desc->threads_active is
    1061                 :            :                  * also checked for zero to unmask the irq line in the
    1062                 :            :                  * affected hard irq flow handlers
    1063                 :            :                  * (handle_[fasteoi|level]_irq).
    1064                 :            :                  *
    1065                 :            :                  * The new action gets the first zero bit of
    1066                 :            :                  * thread_mask assigned. See the loop above which or's
    1067                 :            :                  * all existing action->thread_mask bits.
    1068                 :            :                  */
    1069                 :          0 :                 new->thread_mask = 1 << ffz(thread_mask);
    1070                 :            : 
    1071 [ #  # ][ #  # ]:          0 :         } else if (new->handler == irq_default_primary_handler &&
    1072                 :          0 :                    !(desc->irq_data.chip->flags & IRQCHIP_ONESHOT_SAFE)) {
    1073                 :            :                 /*
    1074                 :            :                  * The interrupt was requested with handler = NULL, so
    1075                 :            :                  * we use the default primary handler for it. But it
    1076                 :            :                  * does not have the oneshot flag set. In combination
    1077                 :            :                  * with level interrupts this is deadly, because the
    1078                 :            :                  * default primary handler just wakes the thread, then
    1079                 :            :                  * the irq lines is reenabled, but the device still
    1080                 :            :                  * has the level irq asserted. Rinse and repeat....
    1081                 :            :                  *
    1082                 :            :                  * While this works for edge type interrupts, we play
    1083                 :            :                  * it safe and reject unconditionally because we can't
    1084                 :            :                  * say for sure which type this interrupt really
    1085                 :            :                  * has. The type flags are unreliable as the
    1086                 :            :                  * underlying chip implementation can override them.
    1087                 :            :                  */
    1088                 :          0 :                 pr_err("Threaded irq requested with handler=NULL and !ONESHOT for irq %d\n",
    1089                 :            :                        irq);
    1090                 :            :                 ret = -EINVAL;
    1091                 :          0 :                 goto out_mask;
    1092                 :            :         }
    1093                 :            : 
    1094         [ #  # ]:          0 :         if (!shared) {
    1095                 :          0 :                 init_waitqueue_head(&desc->wait_for_threads);
    1096                 :            : 
    1097                 :            :                 /* Setup the type (level, edge polarity) if configured: */
    1098         [ #  # ]:          0 :                 if (new->flags & IRQF_TRIGGER_MASK) {
    1099                 :          0 :                         ret = __irq_set_trigger(desc, irq,
    1100                 :            :                                         new->flags & IRQF_TRIGGER_MASK);
    1101                 :            : 
    1102         [ #  # ]:          0 :                         if (ret)
    1103                 :            :                                 goto out_mask;
    1104                 :            :                 }
    1105                 :            : 
    1106                 :          0 :                 desc->istate &= ~(IRQS_AUTODETECT | IRQS_SPURIOUS_DISABLED | \
    1107                 :            :                                   IRQS_ONESHOT | IRQS_WAITING);
    1108                 :            :                 irqd_clear(&desc->irq_data, IRQD_IRQ_INPROGRESS);
    1109                 :            : 
    1110         [ #  # ]:          0 :                 if (new->flags & IRQF_PERCPU) {
    1111                 :            :                         irqd_set(&desc->irq_data, IRQD_PER_CPU);
    1112                 :            :                         irq_settings_set_per_cpu(desc);
    1113                 :            :                 }
    1114                 :            : 
    1115         [ #  # ]:          0 :                 if (new->flags & IRQF_ONESHOT)
    1116                 :          0 :                         desc->istate |= IRQS_ONESHOT;
    1117                 :            : 
    1118         [ #  # ]:          0 :                 if (irq_settings_can_autoenable(desc))
    1119                 :          0 :                         irq_startup(desc, true);
    1120                 :            :                 else
    1121                 :            :                         /* Undo nested disables: */
    1122                 :          0 :                         desc->depth = 1;
    1123                 :            : 
    1124                 :            :                 /* Exclude IRQ from balancing if requested */
    1125         [ #  # ]:          0 :                 if (new->flags & IRQF_NOBALANCING) {
    1126                 :            :                         irq_settings_set_no_balancing(desc);
    1127                 :            :                         irqd_set(&desc->irq_data, IRQD_NO_BALANCING);
    1128                 :            :                 }
    1129                 :            : 
    1130                 :            :                 /* Set default affinity mask once everything is setup */
    1131                 :          0 :                 setup_affinity(irq, desc, mask);
    1132                 :            : 
    1133         [ #  # ]:          0 :         } else if (new->flags & IRQF_TRIGGER_MASK) {
    1134                 :            :                 unsigned int nmsk = new->flags & IRQF_TRIGGER_MASK;
    1135                 :            :                 unsigned int omsk = irq_settings_get_trigger_mask(desc);
    1136                 :            : 
    1137         [ #  # ]:          0 :                 if (nmsk != omsk)
    1138                 :            :                         /* hope the handler works with current  trigger mode */
    1139                 :          0 :                         pr_warning("irq %d uses trigger mode %u; requested %u\n",
    1140                 :            :                                    irq, nmsk, omsk);
    1141                 :            :         }
    1142                 :            : 
    1143                 :          0 :         new->irq = irq;
    1144                 :          0 :         *old_ptr = new;
    1145                 :            : 
    1146                 :            :         /* Reset broken irq detection when installing new handler */
    1147                 :          0 :         desc->irq_count = 0;
    1148                 :          0 :         desc->irqs_unhandled = 0;
    1149                 :            : 
    1150                 :            :         /*
    1151                 :            :          * Check whether we disabled the irq via the spurious handler
    1152                 :            :          * before. Reenable it and give it another chance.
    1153                 :            :          */
    1154 [ #  # ][ #  # ]:          0 :         if (shared && (desc->istate & IRQS_SPURIOUS_DISABLED)) {
    1155                 :          0 :                 desc->istate &= ~IRQS_SPURIOUS_DISABLED;
    1156                 :          0 :                 __enable_irq(desc, irq, false);
    1157                 :            :         }
    1158                 :            : 
    1159                 :          0 :         raw_spin_unlock_irqrestore(&desc->lock, flags);
    1160                 :            : 
    1161                 :            :         /*
    1162                 :            :          * Strictly no need to wake it up, but hung_task complains
    1163                 :            :          * when no hard interrupt wakes the thread up.
    1164                 :            :          */
    1165         [ #  # ]:          0 :         if (new->thread)
    1166                 :          0 :                 wake_up_process(new->thread);
    1167                 :            : 
    1168                 :          0 :         register_irq_proc(irq, desc);
    1169                 :          0 :         new->dir = NULL;
    1170                 :          0 :         register_handler_proc(irq, new);
    1171                 :            :         free_cpumask_var(mask);
    1172                 :            : 
    1173                 :          0 :         return 0;
    1174                 :            : 
    1175                 :            : mismatch:
    1176         [ #  # ]:          0 :         if (!(new->flags & IRQF_PROBE_SHARED)) {
    1177                 :          0 :                 pr_err("Flags mismatch irq %d. %08x (%s) vs. %08x (%s)\n",
    1178                 :            :                        irq, new->flags, new->name, old->flags, old->name);
    1179                 :            : #ifdef CONFIG_DEBUG_SHIRQ
    1180                 :            :                 dump_stack();
    1181                 :            : #endif
    1182                 :            :         }
    1183                 :            :         ret = -EBUSY;
    1184                 :            : 
    1185                 :            : out_mask:
    1186                 :          0 :         raw_spin_unlock_irqrestore(&desc->lock, flags);
    1187                 :            :         free_cpumask_var(mask);
    1188                 :            : 
    1189                 :            : out_thread:
    1190         [ #  # ]:          0 :         if (new->thread) {
    1191                 :            :                 struct task_struct *t = new->thread;
    1192                 :            : 
    1193                 :          0 :                 new->thread = NULL;
    1194                 :          0 :                 kthread_stop(t);
    1195                 :            :                 put_task_struct(t);
    1196                 :            :         }
    1197                 :            : out_mput:
    1198                 :          0 :         module_put(desc->owner);
    1199                 :          0 :         return ret;
    1200                 :            : }
    1201                 :            : 
    1202                 :            : /**
    1203                 :            :  *      setup_irq - setup an interrupt
    1204                 :            :  *      @irq: Interrupt line to setup
    1205                 :            :  *      @act: irqaction for the interrupt
    1206                 :            :  *
    1207                 :            :  * Used to statically setup interrupts in the early boot process.
    1208                 :            :  */
    1209                 :          0 : int setup_irq(unsigned int irq, struct irqaction *act)
    1210                 :            : {
    1211                 :            :         int retval;
    1212                 :          0 :         struct irq_desc *desc = irq_to_desc(irq);
    1213                 :            : 
    1214 [ #  # ][ #  # ]:          0 :         if (WARN_ON(irq_settings_is_per_cpu_devid(desc)))
    1215                 :            :                 return -EINVAL;
    1216                 :            :         chip_bus_lock(desc);
    1217                 :          0 :         retval = __setup_irq(irq, desc, act);
    1218                 :            :         chip_bus_sync_unlock(desc);
    1219                 :            : 
    1220                 :          0 :         return retval;
    1221                 :            : }
    1222                 :            : EXPORT_SYMBOL_GPL(setup_irq);
    1223                 :            : 
    1224                 :            : /*
    1225                 :            :  * Internal function to unregister an irqaction - used to free
    1226                 :            :  * regular and special interrupts that are part of the architecture.
    1227                 :            :  */
    1228                 :          0 : static struct irqaction *__free_irq(unsigned int irq, void *dev_id)
    1229                 :            : {
    1230                 :          0 :         struct irq_desc *desc = irq_to_desc(irq);
    1231                 :            :         struct irqaction *action, **action_ptr;
    1232                 :            :         unsigned long flags;
    1233                 :            : 
    1234         [ #  # ]:          0 :         WARN(in_interrupt(), "Trying to free IRQ %d from IRQ context!\n", irq);
    1235                 :            : 
    1236         [ #  # ]:          0 :         if (!desc)
    1237                 :            :                 return NULL;
    1238                 :            : 
    1239                 :          0 :         raw_spin_lock_irqsave(&desc->lock, flags);
    1240                 :            : 
    1241                 :            :         /*
    1242                 :            :          * There can be multiple actions per IRQ descriptor, find the right
    1243                 :            :          * one based on the dev_id:
    1244                 :            :          */
    1245                 :          0 :         action_ptr = &desc->action;
    1246                 :            :         for (;;) {
    1247                 :          0 :                 action = *action_ptr;
    1248                 :            : 
    1249         [ #  # ]:          0 :                 if (!action) {
    1250                 :          0 :                         WARN(1, "Trying to free already-free IRQ %d\n", irq);
    1251                 :          0 :                         raw_spin_unlock_irqrestore(&desc->lock, flags);
    1252                 :            : 
    1253                 :          0 :                         return NULL;
    1254                 :            :                 }
    1255                 :            : 
    1256         [ #  # ]:          0 :                 if (action->dev_id == dev_id)
    1257                 :            :                         break;
    1258                 :          0 :                 action_ptr = &action->next;
    1259                 :          0 :         }
    1260                 :            : 
    1261                 :            :         /* Found it - now remove it from the list of entries: */
    1262                 :          0 :         *action_ptr = action->next;
    1263                 :            : 
    1264                 :            :         /* If this was the last handler, shut down the IRQ line: */
    1265         [ #  # ]:          0 :         if (!desc->action)
    1266                 :          0 :                 irq_shutdown(desc);
    1267                 :            : 
    1268                 :            : #ifdef CONFIG_SMP
    1269                 :            :         /* make sure affinity_hint is cleaned up */
    1270 [ #  # ][ #  # ]:          0 :         if (WARN_ON_ONCE(desc->affinity_hint))
         [ #  # ][ #  # ]
    1271                 :          0 :                 desc->affinity_hint = NULL;
    1272                 :            : #endif
    1273                 :            : 
    1274                 :          0 :         raw_spin_unlock_irqrestore(&desc->lock, flags);
    1275                 :            : 
    1276                 :          0 :         unregister_handler_proc(irq, action);
    1277                 :            : 
    1278                 :            :         /* Make sure it's not being used on another CPU: */
    1279                 :          0 :         synchronize_irq(irq);
    1280                 :            : 
    1281                 :            : #ifdef CONFIG_DEBUG_SHIRQ
    1282                 :            :         /*
    1283                 :            :          * It's a shared IRQ -- the driver ought to be prepared for an IRQ
    1284                 :            :          * event to happen even now it's being freed, so let's make sure that
    1285                 :            :          * is so by doing an extra call to the handler ....
    1286                 :            :          *
    1287                 :            :          * ( We do this after actually deregistering it, to make sure that a
    1288                 :            :          *   'real' IRQ doesn't run in * parallel with our fake. )
    1289                 :            :          */
    1290                 :            :         if (action->flags & IRQF_SHARED) {
    1291                 :            :                 local_irq_save(flags);
    1292                 :            :                 action->handler(irq, dev_id);
    1293                 :            :                 local_irq_restore(flags);
    1294                 :            :         }
    1295                 :            : #endif
    1296                 :            : 
    1297         [ #  # ]:          0 :         if (action->thread) {
    1298                 :          0 :                 kthread_stop(action->thread);
    1299                 :          0 :                 put_task_struct(action->thread);
    1300                 :            :         }
    1301                 :            : 
    1302                 :          0 :         module_put(desc->owner);
    1303                 :          0 :         return action;
    1304                 :            : }
    1305                 :            : 
    1306                 :            : /**
    1307                 :            :  *      remove_irq - free an interrupt
    1308                 :            :  *      @irq: Interrupt line to free
    1309                 :            :  *      @act: irqaction for the interrupt
    1310                 :            :  *
    1311                 :            :  * Used to remove interrupts statically setup by the early boot process.
    1312                 :            :  */
    1313                 :          0 : void remove_irq(unsigned int irq, struct irqaction *act)
    1314                 :            : {
    1315                 :          0 :         struct irq_desc *desc = irq_to_desc(irq);
    1316                 :            : 
    1317 [ #  # ][ #  # ]:          0 :         if (desc && !WARN_ON(irq_settings_is_per_cpu_devid(desc)))
                 [ #  # ]
    1318                 :          0 :             __free_irq(irq, act->dev_id);
    1319                 :          0 : }
    1320                 :            : EXPORT_SYMBOL_GPL(remove_irq);
    1321                 :            : 
    1322                 :            : /**
    1323                 :            :  *      free_irq - free an interrupt allocated with request_irq
    1324                 :            :  *      @irq: Interrupt line to free
    1325                 :            :  *      @dev_id: Device identity to free
    1326                 :            :  *
    1327                 :            :  *      Remove an interrupt handler. The handler is removed and if the
    1328                 :            :  *      interrupt line is no longer in use by any driver it is disabled.
    1329                 :            :  *      On a shared IRQ the caller must ensure the interrupt is disabled
    1330                 :            :  *      on the card it drives before calling this function. The function
    1331                 :            :  *      does not return until any executing interrupts for this IRQ
    1332                 :            :  *      have completed.
    1333                 :            :  *
    1334                 :            :  *      This function must not be called from interrupt context.
    1335                 :            :  */
    1336                 :          0 : void free_irq(unsigned int irq, void *dev_id)
    1337                 :            : {
    1338                 :          0 :         struct irq_desc *desc = irq_to_desc(irq);
    1339                 :            : 
    1340 [ #  # ][ #  # ]:          0 :         if (!desc || WARN_ON(irq_settings_is_per_cpu_devid(desc)))
                 [ #  # ]
    1341                 :          0 :                 return;
    1342                 :            : 
    1343                 :            : #ifdef CONFIG_SMP
    1344 [ #  # ][ #  # ]:          0 :         if (WARN_ON(desc->affinity_notify))
    1345                 :          0 :                 desc->affinity_notify = NULL;
    1346                 :            : #endif
    1347                 :            : 
    1348                 :            :         chip_bus_lock(desc);
    1349                 :          0 :         kfree(__free_irq(irq, dev_id));
    1350                 :            :         chip_bus_sync_unlock(desc);
    1351                 :            : }
    1352                 :            : EXPORT_SYMBOL(free_irq);
    1353                 :            : 
    1354                 :            : /**
    1355                 :            :  *      request_threaded_irq - allocate an interrupt line
    1356                 :            :  *      @irq: Interrupt line to allocate
    1357                 :            :  *      @handler: Function to be called when the IRQ occurs.
    1358                 :            :  *                Primary handler for threaded interrupts
    1359                 :            :  *                If NULL and thread_fn != NULL the default
    1360                 :            :  *                primary handler is installed
    1361                 :            :  *      @thread_fn: Function called from the irq handler thread
    1362                 :            :  *                  If NULL, no irq thread is created
    1363                 :            :  *      @irqflags: Interrupt type flags
    1364                 :            :  *      @devname: An ascii name for the claiming device
    1365                 :            :  *      @dev_id: A cookie passed back to the handler function
    1366                 :            :  *
    1367                 :            :  *      This call allocates interrupt resources and enables the
    1368                 :            :  *      interrupt line and IRQ handling. From the point this
    1369                 :            :  *      call is made your handler function may be invoked. Since
    1370                 :            :  *      your handler function must clear any interrupt the board
    1371                 :            :  *      raises, you must take care both to initialise your hardware
    1372                 :            :  *      and to set up the interrupt handler in the right order.
    1373                 :            :  *
    1374                 :            :  *      If you want to set up a threaded irq handler for your device
    1375                 :            :  *      then you need to supply @handler and @thread_fn. @handler is
    1376                 :            :  *      still called in hard interrupt context and has to check
    1377                 :            :  *      whether the interrupt originates from the device. If yes it
    1378                 :            :  *      needs to disable the interrupt on the device and return
    1379                 :            :  *      IRQ_WAKE_THREAD which will wake up the handler thread and run
    1380                 :            :  *      @thread_fn. This split handler design is necessary to support
    1381                 :            :  *      shared interrupts.
    1382                 :            :  *
    1383                 :            :  *      Dev_id must be globally unique. Normally the address of the
    1384                 :            :  *      device data structure is used as the cookie. Since the handler
    1385                 :            :  *      receives this value it makes sense to use it.
    1386                 :            :  *
    1387                 :            :  *      If your interrupt is shared you must pass a non NULL dev_id
    1388                 :            :  *      as this is required when freeing the interrupt.
    1389                 :            :  *
    1390                 :            :  *      Flags:
    1391                 :            :  *
    1392                 :            :  *      IRQF_SHARED             Interrupt is shared
    1393                 :            :  *      IRQF_TRIGGER_*          Specify active edge(s) or level
    1394                 :            :  *
    1395                 :            :  */
    1396                 :          0 : int request_threaded_irq(unsigned int irq, irq_handler_t handler,
    1397                 :            :                          irq_handler_t thread_fn, unsigned long irqflags,
    1398                 :            :                          const char *devname, void *dev_id)
    1399                 :            : {
    1400                 :            :         struct irqaction *action;
    1401                 :          0 :         struct irq_desc *desc;
    1402                 :            :         int retval;
    1403                 :            : 
    1404                 :            :         /*
    1405                 :            :          * Sanity-check: shared interrupts must pass in a real dev-ID,
    1406                 :            :          * otherwise we'll have trouble later trying to figure out
    1407                 :            :          * which interrupt is which (messes up the interrupt freeing
    1408                 :            :          * logic etc).
    1409                 :            :          */
    1410 [ #  # ][ #  # ]:          0 :         if ((irqflags & IRQF_SHARED) && !dev_id)
    1411                 :            :                 return -EINVAL;
    1412                 :            : 
    1413                 :          0 :         desc = irq_to_desc(irq);
    1414         [ #  # ]:          0 :         if (!desc)
    1415                 :            :                 return -EINVAL;
    1416                 :            : 
    1417 [ #  # ][ #  # ]:          0 :         if (!irq_settings_can_request(desc) ||
    1418         [ #  # ]:          0 :             WARN_ON(irq_settings_is_per_cpu_devid(desc)))
    1419                 :            :                 return -EINVAL;
    1420                 :            : 
    1421         [ #  # ]:          0 :         if (!handler) {
    1422         [ #  # ]:          0 :                 if (!thread_fn)
    1423                 :            :                         return -EINVAL;
    1424                 :            :                 handler = irq_default_primary_handler;
    1425                 :            :         }
    1426                 :            : 
    1427                 :            :         action = kzalloc(sizeof(struct irqaction), GFP_KERNEL);
    1428         [ #  # ]:          0 :         if (!action)
    1429                 :            :                 return -ENOMEM;
    1430                 :            : 
    1431                 :          0 :         action->handler = handler;
    1432                 :          0 :         action->thread_fn = thread_fn;
    1433                 :          0 :         action->flags = irqflags;
    1434                 :          0 :         action->name = devname;
    1435                 :          0 :         action->dev_id = dev_id;
    1436                 :            : 
    1437                 :            :         chip_bus_lock(desc);
    1438                 :          0 :         retval = __setup_irq(irq, desc, action);
    1439                 :            :         chip_bus_sync_unlock(desc);
    1440                 :            : 
    1441         [ #  # ]:          0 :         if (retval)
    1442                 :          0 :                 kfree(action);
    1443                 :            : 
    1444                 :            : #ifdef CONFIG_DEBUG_SHIRQ_FIXME
    1445                 :            :         if (!retval && (irqflags & IRQF_SHARED)) {
    1446                 :            :                 /*
    1447                 :            :                  * It's a shared IRQ -- the driver ought to be prepared for it
    1448                 :            :                  * to happen immediately, so let's make sure....
    1449                 :            :                  * We disable the irq to make sure that a 'real' IRQ doesn't
    1450                 :            :                  * run in parallel with our fake.
    1451                 :            :                  */
    1452                 :            :                 unsigned long flags;
    1453                 :            : 
    1454                 :            :                 disable_irq(irq);
    1455                 :            :                 local_irq_save(flags);
    1456                 :            : 
    1457                 :            :                 handler(irq, dev_id);
    1458                 :            : 
    1459                 :            :                 local_irq_restore(flags);
    1460                 :            :                 enable_irq(irq);
    1461                 :            :         }
    1462                 :            : #endif
    1463                 :          0 :         return retval;
    1464                 :            : }
    1465                 :            : EXPORT_SYMBOL(request_threaded_irq);
    1466                 :            : 
    1467                 :            : /**
    1468                 :            :  *      request_any_context_irq - allocate an interrupt line
    1469                 :            :  *      @irq: Interrupt line to allocate
    1470                 :            :  *      @handler: Function to be called when the IRQ occurs.
    1471                 :            :  *                Threaded handler for threaded interrupts.
    1472                 :            :  *      @flags: Interrupt type flags
    1473                 :            :  *      @name: An ascii name for the claiming device
    1474                 :            :  *      @dev_id: A cookie passed back to the handler function
    1475                 :            :  *
    1476                 :            :  *      This call allocates interrupt resources and enables the
    1477                 :            :  *      interrupt line and IRQ handling. It selects either a
    1478                 :            :  *      hardirq or threaded handling method depending on the
    1479                 :            :  *      context.
    1480                 :            :  *
    1481                 :            :  *      On failure, it returns a negative value. On success,
    1482                 :            :  *      it returns either IRQC_IS_HARDIRQ or IRQC_IS_NESTED.
    1483                 :            :  */
    1484                 :          0 : int request_any_context_irq(unsigned int irq, irq_handler_t handler,
    1485                 :            :                             unsigned long flags, const char *name, void *dev_id)
    1486                 :            : {
    1487                 :          0 :         struct irq_desc *desc = irq_to_desc(irq);
    1488                 :            :         int ret;
    1489                 :            : 
    1490         [ #  # ]:          0 :         if (!desc)
    1491                 :            :                 return -EINVAL;
    1492                 :            : 
    1493         [ #  # ]:          0 :         if (irq_settings_is_nested_thread(desc)) {
    1494                 :          0 :                 ret = request_threaded_irq(irq, NULL, handler,
    1495                 :            :                                            flags, name, dev_id);
    1496         [ #  # ]:          0 :                 return !ret ? IRQC_IS_NESTED : ret;
    1497                 :            :         }
    1498                 :            : 
    1499                 :            :         ret = request_irq(irq, handler, flags, name, dev_id);
    1500                 :          0 :         return !ret ? IRQC_IS_HARDIRQ : ret;
    1501                 :            : }
    1502                 :            : EXPORT_SYMBOL_GPL(request_any_context_irq);
    1503                 :            : 
    1504                 :          0 : void enable_percpu_irq(unsigned int irq, unsigned int type)
    1505                 :            : {
    1506                 :          0 :         unsigned int cpu = smp_processor_id();
    1507                 :            :         unsigned long flags;
    1508                 :            :         struct irq_desc *desc = irq_get_desc_lock(irq, &flags, IRQ_GET_DESC_CHECK_PERCPU);
    1509                 :            : 
    1510         [ #  # ]:          0 :         if (!desc)
    1511                 :          0 :                 return;
    1512                 :            : 
    1513                 :          0 :         type &= IRQ_TYPE_SENSE_MASK;
    1514         [ #  # ]:          0 :         if (type != IRQ_TYPE_NONE) {
    1515                 :            :                 int ret;
    1516                 :            : 
    1517                 :          0 :                 ret = __irq_set_trigger(desc, irq, type);
    1518                 :            : 
    1519         [ #  # ]:          0 :                 if (ret) {
    1520                 :          0 :                         WARN(1, "failed to set type for IRQ%d\n", irq);
    1521                 :          0 :                         goto out;
    1522                 :            :                 }
    1523                 :            :         }
    1524                 :            : 
    1525                 :          0 :         irq_percpu_enable(desc, cpu);
    1526                 :            : out:
    1527                 :          0 :         irq_put_desc_unlock(desc, flags);
    1528                 :            : }
    1529                 :            : EXPORT_SYMBOL_GPL(enable_percpu_irq);
    1530                 :            : 
    1531                 :          0 : void disable_percpu_irq(unsigned int irq)
    1532                 :            : {
    1533                 :          0 :         unsigned int cpu = smp_processor_id();
    1534                 :            :         unsigned long flags;
    1535                 :            :         struct irq_desc *desc = irq_get_desc_lock(irq, &flags, IRQ_GET_DESC_CHECK_PERCPU);
    1536                 :            : 
    1537         [ #  # ]:          0 :         if (!desc)
    1538                 :          0 :                 return;
    1539                 :            : 
    1540                 :          0 :         irq_percpu_disable(desc, cpu);
    1541                 :          0 :         irq_put_desc_unlock(desc, flags);
    1542                 :            : }
    1543                 :            : EXPORT_SYMBOL_GPL(disable_percpu_irq);
    1544                 :            : 
    1545                 :            : /*
    1546                 :            :  * Internal function to unregister a percpu irqaction.
    1547                 :            :  */
    1548                 :          0 : static struct irqaction *__free_percpu_irq(unsigned int irq, void __percpu *dev_id)
    1549                 :            : {
    1550                 :          0 :         struct irq_desc *desc = irq_to_desc(irq);
    1551                 :            :         struct irqaction *action;
    1552                 :            :         unsigned long flags;
    1553                 :            : 
    1554         [ #  # ]:          0 :         WARN(in_interrupt(), "Trying to free IRQ %d from IRQ context!\n", irq);
    1555                 :            : 
    1556         [ #  # ]:          0 :         if (!desc)
    1557                 :            :                 return NULL;
    1558                 :            : 
    1559                 :          0 :         raw_spin_lock_irqsave(&desc->lock, flags);
    1560                 :            : 
    1561                 :          0 :         action = desc->action;
    1562 [ #  # ][ #  # ]:          0 :         if (!action || action->percpu_dev_id != dev_id) {
    1563                 :          0 :                 WARN(1, "Trying to free already-free IRQ %d\n", irq);
    1564                 :          0 :                 goto bad;
    1565                 :            :         }
    1566                 :            : 
    1567         [ #  # ]:          0 :         if (!cpumask_empty(desc->percpu_enabled)) {
    1568                 :          0 :                 WARN(1, "percpu IRQ %d still enabled on CPU%d!\n",
    1569                 :            :                      irq, cpumask_first(desc->percpu_enabled));
    1570                 :          0 :                 goto bad;
    1571                 :            :         }
    1572                 :            : 
    1573                 :            :         /* Found it - now remove it from the list of entries: */
    1574                 :          0 :         desc->action = NULL;
    1575                 :            : 
    1576                 :          0 :         raw_spin_unlock_irqrestore(&desc->lock, flags);
    1577                 :            : 
    1578                 :          0 :         unregister_handler_proc(irq, action);
    1579                 :            : 
    1580                 :          0 :         module_put(desc->owner);
    1581                 :          0 :         return action;
    1582                 :            : 
    1583                 :            : bad:
    1584                 :          0 :         raw_spin_unlock_irqrestore(&desc->lock, flags);
    1585                 :          0 :         return NULL;
    1586                 :            : }
    1587                 :            : 
    1588                 :            : /**
    1589                 :            :  *      remove_percpu_irq - free a per-cpu interrupt
    1590                 :            :  *      @irq: Interrupt line to free
    1591                 :            :  *      @act: irqaction for the interrupt
    1592                 :            :  *
    1593                 :            :  * Used to remove interrupts statically setup by the early boot process.
    1594                 :            :  */
    1595                 :          0 : void remove_percpu_irq(unsigned int irq, struct irqaction *act)
    1596                 :            : {
    1597                 :          0 :         struct irq_desc *desc = irq_to_desc(irq);
    1598                 :            : 
    1599 [ #  # ][ #  # ]:          0 :         if (desc && irq_settings_is_per_cpu_devid(desc))
    1600                 :          0 :             __free_percpu_irq(irq, act->percpu_dev_id);
    1601                 :          0 : }
    1602                 :            : 
    1603                 :            : /**
    1604                 :            :  *      free_percpu_irq - free an interrupt allocated with request_percpu_irq
    1605                 :            :  *      @irq: Interrupt line to free
    1606                 :            :  *      @dev_id: Device identity to free
    1607                 :            :  *
    1608                 :            :  *      Remove a percpu interrupt handler. The handler is removed, but
    1609                 :            :  *      the interrupt line is not disabled. This must be done on each
    1610                 :            :  *      CPU before calling this function. The function does not return
    1611                 :            :  *      until any executing interrupts for this IRQ have completed.
    1612                 :            :  *
    1613                 :            :  *      This function must not be called from interrupt context.
    1614                 :            :  */
    1615                 :          0 : void free_percpu_irq(unsigned int irq, void __percpu *dev_id)
    1616                 :            : {
    1617                 :          0 :         struct irq_desc *desc = irq_to_desc(irq);
    1618                 :            : 
    1619 [ #  # ][ #  # ]:          0 :         if (!desc || !irq_settings_is_per_cpu_devid(desc))
    1620                 :          0 :                 return;
    1621                 :            : 
    1622                 :            :         chip_bus_lock(desc);
    1623                 :          0 :         kfree(__free_percpu_irq(irq, dev_id));
    1624                 :            :         chip_bus_sync_unlock(desc);
    1625                 :            : }
    1626                 :            : 
    1627                 :            : /**
    1628                 :            :  *      setup_percpu_irq - setup a per-cpu interrupt
    1629                 :            :  *      @irq: Interrupt line to setup
    1630                 :            :  *      @act: irqaction for the interrupt
    1631                 :            :  *
    1632                 :            :  * Used to statically setup per-cpu interrupts in the early boot process.
    1633                 :            :  */
    1634                 :          0 : int setup_percpu_irq(unsigned int irq, struct irqaction *act)
    1635                 :            : {
    1636                 :          0 :         struct irq_desc *desc = irq_to_desc(irq);
    1637                 :            :         int retval;
    1638                 :            : 
    1639 [ #  # ][ #  # ]:          0 :         if (!desc || !irq_settings_is_per_cpu_devid(desc))
    1640                 :            :                 return -EINVAL;
    1641                 :            :         chip_bus_lock(desc);
    1642                 :          0 :         retval = __setup_irq(irq, desc, act);
    1643                 :            :         chip_bus_sync_unlock(desc);
    1644                 :            : 
    1645                 :          0 :         return retval;
    1646                 :            : }
    1647                 :            : 
    1648                 :            : /**
    1649                 :            :  *      request_percpu_irq - allocate a percpu interrupt line
    1650                 :            :  *      @irq: Interrupt line to allocate
    1651                 :            :  *      @handler: Function to be called when the IRQ occurs.
    1652                 :            :  *      @devname: An ascii name for the claiming device
    1653                 :            :  *      @dev_id: A percpu cookie passed back to the handler function
    1654                 :            :  *
    1655                 :            :  *      This call allocates interrupt resources, but doesn't
    1656                 :            :  *      automatically enable the interrupt. It has to be done on each
    1657                 :            :  *      CPU using enable_percpu_irq().
    1658                 :            :  *
    1659                 :            :  *      Dev_id must be globally unique. It is a per-cpu variable, and
    1660                 :            :  *      the handler gets called with the interrupted CPU's instance of
    1661                 :            :  *      that variable.
    1662                 :            :  */
    1663                 :          0 : int request_percpu_irq(unsigned int irq, irq_handler_t handler,
    1664                 :            :                        const char *devname, void __percpu *dev_id)
    1665                 :            : {
    1666                 :            :         struct irqaction *action;
    1667                 :          0 :         struct irq_desc *desc;
    1668                 :            :         int retval;
    1669                 :            : 
    1670         [ #  # ]:          0 :         if (!dev_id)
    1671                 :            :                 return -EINVAL;
    1672                 :            : 
    1673                 :          0 :         desc = irq_to_desc(irq);
    1674 [ #  # ][ #  # ]:          0 :         if (!desc || !irq_settings_can_request(desc) ||
                 [ #  # ]
    1675                 :            :             !irq_settings_is_per_cpu_devid(desc))
    1676                 :            :                 return -EINVAL;
    1677                 :            : 
    1678                 :            :         action = kzalloc(sizeof(struct irqaction), GFP_KERNEL);
    1679         [ #  # ]:          0 :         if (!action)
    1680                 :            :                 return -ENOMEM;
    1681                 :            : 
    1682                 :          0 :         action->handler = handler;
    1683                 :          0 :         action->flags = IRQF_PERCPU | IRQF_NO_SUSPEND;
    1684                 :          0 :         action->name = devname;
    1685                 :          0 :         action->percpu_dev_id = dev_id;
    1686                 :            : 
    1687                 :            :         chip_bus_lock(desc);
    1688                 :          0 :         retval = __setup_irq(irq, desc, action);
    1689                 :            :         chip_bus_sync_unlock(desc);
    1690                 :            : 
    1691         [ #  # ]:          0 :         if (retval)
    1692                 :          0 :                 kfree(action);
    1693                 :            : 
    1694                 :          0 :         return retval;
    1695                 :            : }

Generated by: LCOV version 1.9