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