cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

manage.c (79417B)


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