xref: /openbmc/linux/kernel/irq/manage.c (revision 569bda8df11effa03e618729293c7961696abb10)
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 #include <linux/irq.h>
11 #include <linux/kthread.h>
12 #include <linux/module.h>
13 #include <linux/random.h>
14 #include <linux/interrupt.h>
15 #include <linux/slab.h>
16 #include <linux/sched.h>
17 
18 #include "internals.h"
19 
20 /**
21  *	synchronize_irq - wait for pending IRQ handlers (on other CPUs)
22  *	@irq: interrupt number to wait for
23  *
24  *	This function waits for any pending IRQ handlers for this interrupt
25  *	to complete before returning. If you use this function while
26  *	holding a resource the IRQ handler may need you will deadlock.
27  *
28  *	This function may be called - with care - from IRQ context.
29  */
30 void synchronize_irq(unsigned int irq)
31 {
32 	struct irq_desc *desc = irq_to_desc(irq);
33 	unsigned int status;
34 
35 	if (!desc)
36 		return;
37 
38 	do {
39 		unsigned long flags;
40 
41 		/*
42 		 * Wait until we're out of the critical section.  This might
43 		 * give the wrong answer due to the lack of memory barriers.
44 		 */
45 		while (desc->status & IRQ_INPROGRESS)
46 			cpu_relax();
47 
48 		/* Ok, that indicated we're done: double-check carefully. */
49 		raw_spin_lock_irqsave(&desc->lock, flags);
50 		status = desc->status;
51 		raw_spin_unlock_irqrestore(&desc->lock, flags);
52 
53 		/* Oops, that failed? */
54 	} while (status & IRQ_INPROGRESS);
55 
56 	/*
57 	 * We made sure that no hardirq handler is running. Now verify
58 	 * that no threaded handlers are active.
59 	 */
60 	wait_event(desc->wait_for_threads, !atomic_read(&desc->threads_active));
61 }
62 EXPORT_SYMBOL(synchronize_irq);
63 
64 #ifdef CONFIG_SMP
65 cpumask_var_t irq_default_affinity;
66 
67 /**
68  *	irq_can_set_affinity - Check if the affinity of a given irq can be set
69  *	@irq:		Interrupt to check
70  *
71  */
72 int irq_can_set_affinity(unsigned int irq)
73 {
74 	struct irq_desc *desc = irq_to_desc(irq);
75 
76 	if (CHECK_IRQ_PER_CPU(desc->status) || !desc->irq_data.chip ||
77 	    !desc->irq_data.chip->irq_set_affinity)
78 		return 0;
79 
80 	return 1;
81 }
82 
83 /**
84  *	irq_set_thread_affinity - Notify irq threads to adjust affinity
85  *	@desc:		irq descriptor which has affitnity changed
86  *
87  *	We just set IRQTF_AFFINITY and delegate the affinity setting
88  *	to the interrupt thread itself. We can not call
89  *	set_cpus_allowed_ptr() here as we hold desc->lock and this
90  *	code can be called from hard interrupt context.
91  */
92 void irq_set_thread_affinity(struct irq_desc *desc)
93 {
94 	struct irqaction *action = desc->action;
95 
96 	while (action) {
97 		if (action->thread)
98 			set_bit(IRQTF_AFFINITY, &action->thread_flags);
99 		action = action->next;
100 	}
101 }
102 
103 #ifdef CONFIG_GENERIC_PENDING_IRQ
104 static inline bool irq_can_move_pcntxt(struct irq_desc *desc)
105 {
106 	return desc->status & IRQ_MOVE_PCNTXT;
107 }
108 static inline bool irq_move_pending(struct irq_desc *desc)
109 {
110 	return desc->status & IRQ_MOVE_PENDING;
111 }
112 static inline void
113 irq_copy_pending(struct irq_desc *desc, const struct cpumask *mask)
114 {
115 	cpumask_copy(desc->pending_mask, mask);
116 }
117 static inline void
118 irq_get_pending(struct cpumask *mask, struct irq_desc *desc)
119 {
120 	cpumask_copy(mask, desc->pending_mask);
121 }
122 #else
123 static inline bool irq_can_move_pcntxt(struct irq_desc *desc) { return true; }
124 static inline bool irq_move_pending(struct irq_desc *desc) { return false; }
125 static inline void
126 irq_copy_pending(struct irq_desc *desc, const struct cpumask *mask) { }
127 static inline void
128 irq_get_pending(struct cpumask *mask, struct irq_desc *desc) { }
129 #endif
130 
131 /**
132  *	irq_set_affinity - Set the irq affinity of a given irq
133  *	@irq:		Interrupt to set affinity
134  *	@cpumask:	cpumask
135  *
136  */
137 int irq_set_affinity(unsigned int irq, const struct cpumask *mask)
138 {
139 	struct irq_desc *desc = irq_to_desc(irq);
140 	struct irq_chip *chip = desc->irq_data.chip;
141 	unsigned long flags;
142 	int ret = 0;
143 
144 	if (!chip->irq_set_affinity)
145 		return -EINVAL;
146 
147 	raw_spin_lock_irqsave(&desc->lock, flags);
148 
149 	if (irq_can_move_pcntxt(desc)) {
150 		ret = chip->irq_set_affinity(&desc->irq_data, mask, false);
151 		if (!ret) {
152 			cpumask_copy(desc->irq_data.affinity, mask);
153 			irq_set_thread_affinity(desc);
154 		}
155 	} else {
156 		desc->status |= IRQ_MOVE_PENDING;
157 		irq_copy_pending(desc, mask);
158 	}
159 
160 	if (desc->affinity_notify) {
161 		kref_get(&desc->affinity_notify->kref);
162 		schedule_work(&desc->affinity_notify->work);
163 	}
164 	desc->status |= IRQ_AFFINITY_SET;
165 	raw_spin_unlock_irqrestore(&desc->lock, flags);
166 	return ret;
167 }
168 
169 int irq_set_affinity_hint(unsigned int irq, const struct cpumask *m)
170 {
171 	struct irq_desc *desc = irq_to_desc(irq);
172 	unsigned long flags;
173 
174 	if (!desc)
175 		return -EINVAL;
176 
177 	raw_spin_lock_irqsave(&desc->lock, flags);
178 	desc->affinity_hint = m;
179 	raw_spin_unlock_irqrestore(&desc->lock, flags);
180 
181 	return 0;
182 }
183 EXPORT_SYMBOL_GPL(irq_set_affinity_hint);
184 
185 static void irq_affinity_notify(struct work_struct *work)
186 {
187 	struct irq_affinity_notify *notify =
188 		container_of(work, struct irq_affinity_notify, work);
189 	struct irq_desc *desc = irq_to_desc(notify->irq);
190 	cpumask_var_t cpumask;
191 	unsigned long flags;
192 
193 	if (!desc || !alloc_cpumask_var(&cpumask, GFP_KERNEL))
194 		goto out;
195 
196 	raw_spin_lock_irqsave(&desc->lock, flags);
197 	if (irq_move_pending(desc))
198 		irq_get_pending(cpumask, desc);
199 	else
200 		cpumask_copy(cpumask, desc->irq_data.affinity);
201 	raw_spin_unlock_irqrestore(&desc->lock, flags);
202 
203 	notify->notify(notify, cpumask);
204 
205 	free_cpumask_var(cpumask);
206 out:
207 	kref_put(&notify->kref, notify->release);
208 }
209 
210 /**
211  *	irq_set_affinity_notifier - control notification of IRQ affinity changes
212  *	@irq:		Interrupt for which to enable/disable notification
213  *	@notify:	Context for notification, or %NULL to disable
214  *			notification.  Function pointers must be initialised;
215  *			the other fields will be initialised by this function.
216  *
217  *	Must be called in process context.  Notification may only be enabled
218  *	after the IRQ is allocated and must be disabled before the IRQ is
219  *	freed using free_irq().
220  */
221 int
222 irq_set_affinity_notifier(unsigned int irq, struct irq_affinity_notify *notify)
223 {
224 	struct irq_desc *desc = irq_to_desc(irq);
225 	struct irq_affinity_notify *old_notify;
226 	unsigned long flags;
227 
228 	/* The release function is promised process context */
229 	might_sleep();
230 
231 	if (!desc)
232 		return -EINVAL;
233 
234 	/* Complete initialisation of *notify */
235 	if (notify) {
236 		notify->irq = irq;
237 		kref_init(&notify->kref);
238 		INIT_WORK(&notify->work, irq_affinity_notify);
239 	}
240 
241 	raw_spin_lock_irqsave(&desc->lock, flags);
242 	old_notify = desc->affinity_notify;
243 	desc->affinity_notify = notify;
244 	raw_spin_unlock_irqrestore(&desc->lock, flags);
245 
246 	if (old_notify)
247 		kref_put(&old_notify->kref, old_notify->release);
248 
249 	return 0;
250 }
251 EXPORT_SYMBOL_GPL(irq_set_affinity_notifier);
252 
253 #ifndef CONFIG_AUTO_IRQ_AFFINITY
254 /*
255  * Generic version of the affinity autoselector.
256  */
257 static int setup_affinity(unsigned int irq, struct irq_desc *desc)
258 {
259 	struct cpumask *set = irq_default_affinity;
260 
261 	/* Excludes PER_CPU and NO_BALANCE interrupts */
262 	if (!irq_can_set_affinity(irq))
263 		return 0;
264 
265 	/*
266 	 * Preserve an userspace affinity setup, but make sure that
267 	 * one of the targets is online.
268 	 */
269 	if (desc->status & (IRQ_AFFINITY_SET)) {
270 		if (cpumask_intersects(desc->irq_data.affinity,
271 				       cpu_online_mask))
272 			set = desc->irq_data.affinity;
273 		else
274 			desc->status &= ~IRQ_AFFINITY_SET;
275 	}
276 	cpumask_and(desc->irq_data.affinity, cpu_online_mask, set);
277 	desc->irq_data.chip->irq_set_affinity(&desc->irq_data, desc->irq_data.affinity, false);
278 
279 	return 0;
280 }
281 #else
282 static inline int setup_affinity(unsigned int irq, struct irq_desc *d)
283 {
284 	return irq_select_affinity(irq);
285 }
286 #endif
287 
288 /*
289  * Called when affinity is set via /proc/irq
290  */
291 int irq_select_affinity_usr(unsigned int irq)
292 {
293 	struct irq_desc *desc = irq_to_desc(irq);
294 	unsigned long flags;
295 	int ret;
296 
297 	raw_spin_lock_irqsave(&desc->lock, flags);
298 	ret = setup_affinity(irq, desc);
299 	if (!ret)
300 		irq_set_thread_affinity(desc);
301 	raw_spin_unlock_irqrestore(&desc->lock, flags);
302 
303 	return ret;
304 }
305 
306 #else
307 static inline int setup_affinity(unsigned int irq, struct irq_desc *desc)
308 {
309 	return 0;
310 }
311 #endif
312 
313 void __disable_irq(struct irq_desc *desc, unsigned int irq, bool suspend)
314 {
315 	if (suspend) {
316 		if (!desc->action || (desc->action->flags & IRQF_NO_SUSPEND))
317 			return;
318 		desc->status |= IRQ_SUSPENDED;
319 	}
320 
321 	if (!desc->depth++) {
322 		desc->status |= IRQ_DISABLED;
323 		desc->irq_data.chip->irq_disable(&desc->irq_data);
324 	}
325 }
326 
327 /**
328  *	disable_irq_nosync - disable an irq without waiting
329  *	@irq: Interrupt to disable
330  *
331  *	Disable the selected interrupt line.  Disables and Enables are
332  *	nested.
333  *	Unlike disable_irq(), this function does not ensure existing
334  *	instances of the IRQ handler have completed before returning.
335  *
336  *	This function may be called from IRQ context.
337  */
338 void disable_irq_nosync(unsigned int irq)
339 {
340 	struct irq_desc *desc = irq_to_desc(irq);
341 	unsigned long flags;
342 
343 	if (!desc)
344 		return;
345 
346 	chip_bus_lock(desc);
347 	raw_spin_lock_irqsave(&desc->lock, flags);
348 	__disable_irq(desc, irq, false);
349 	raw_spin_unlock_irqrestore(&desc->lock, flags);
350 	chip_bus_sync_unlock(desc);
351 }
352 EXPORT_SYMBOL(disable_irq_nosync);
353 
354 /**
355  *	disable_irq - disable an irq and wait for completion
356  *	@irq: Interrupt to disable
357  *
358  *	Disable the selected interrupt line.  Enables and Disables are
359  *	nested.
360  *	This function waits for any pending IRQ handlers for this interrupt
361  *	to complete before returning. If you use this function while
362  *	holding a resource the IRQ handler may need you will deadlock.
363  *
364  *	This function may be called - with care - from IRQ context.
365  */
366 void disable_irq(unsigned int irq)
367 {
368 	struct irq_desc *desc = irq_to_desc(irq);
369 
370 	if (!desc)
371 		return;
372 
373 	disable_irq_nosync(irq);
374 	if (desc->action)
375 		synchronize_irq(irq);
376 }
377 EXPORT_SYMBOL(disable_irq);
378 
379 void __enable_irq(struct irq_desc *desc, unsigned int irq, bool resume)
380 {
381 	if (resume) {
382 		if (!(desc->status & IRQ_SUSPENDED)) {
383 			if (!desc->action)
384 				return;
385 			if (!(desc->action->flags & IRQF_FORCE_RESUME))
386 				return;
387 			/* Pretend that it got disabled ! */
388 			desc->depth++;
389 		}
390 		desc->status &= ~IRQ_SUSPENDED;
391 	}
392 
393 	switch (desc->depth) {
394 	case 0:
395  err_out:
396 		WARN(1, KERN_WARNING "Unbalanced enable for IRQ %d\n", irq);
397 		break;
398 	case 1: {
399 		unsigned int status = desc->status & ~IRQ_DISABLED;
400 
401 		if (desc->status & IRQ_SUSPENDED)
402 			goto err_out;
403 		/* Prevent probing on this irq: */
404 		desc->status = status | IRQ_NOPROBE;
405 		check_irq_resend(desc, irq);
406 		/* fall-through */
407 	}
408 	default:
409 		desc->depth--;
410 	}
411 }
412 
413 /**
414  *	enable_irq - enable handling of an irq
415  *	@irq: Interrupt to enable
416  *
417  *	Undoes the effect of one call to disable_irq().  If this
418  *	matches the last disable, processing of interrupts on this
419  *	IRQ line is re-enabled.
420  *
421  *	This function may be called from IRQ context only when
422  *	desc->irq_data.chip->bus_lock and desc->chip->bus_sync_unlock are NULL !
423  */
424 void enable_irq(unsigned int irq)
425 {
426 	struct irq_desc *desc = irq_to_desc(irq);
427 	unsigned long flags;
428 
429 	if (!desc)
430 		return;
431 
432 	if (WARN(!desc->irq_data.chip || !desc->irq_data.chip->irq_enable,
433 	    KERN_ERR "enable_irq before setup/request_irq: irq %u\n", irq))
434 		return;
435 
436 	chip_bus_lock(desc);
437 	raw_spin_lock_irqsave(&desc->lock, flags);
438 	__enable_irq(desc, irq, false);
439 	raw_spin_unlock_irqrestore(&desc->lock, flags);
440 	chip_bus_sync_unlock(desc);
441 }
442 EXPORT_SYMBOL(enable_irq);
443 
444 static int set_irq_wake_real(unsigned int irq, unsigned int on)
445 {
446 	struct irq_desc *desc = irq_to_desc(irq);
447 	int ret = -ENXIO;
448 
449 	if (desc->irq_data.chip->irq_set_wake)
450 		ret = desc->irq_data.chip->irq_set_wake(&desc->irq_data, on);
451 
452 	return ret;
453 }
454 
455 /**
456  *	irq_set_irq_wake - control irq power management wakeup
457  *	@irq:	interrupt to control
458  *	@on:	enable/disable power management wakeup
459  *
460  *	Enable/disable power management wakeup mode, which is
461  *	disabled by default.  Enables and disables must match,
462  *	just as they match for non-wakeup mode support.
463  *
464  *	Wakeup mode lets this IRQ wake the system from sleep
465  *	states like "suspend to RAM".
466  */
467 int irq_set_irq_wake(unsigned int irq, unsigned int on)
468 {
469 	struct irq_desc *desc = irq_to_desc(irq);
470 	unsigned long flags;
471 	int ret = 0;
472 
473 	/* wakeup-capable irqs can be shared between drivers that
474 	 * don't need to have the same sleep mode behaviors.
475 	 */
476 	chip_bus_lock(desc);
477 	raw_spin_lock_irqsave(&desc->lock, flags);
478 	if (on) {
479 		if (desc->wake_depth++ == 0) {
480 			ret = set_irq_wake_real(irq, on);
481 			if (ret)
482 				desc->wake_depth = 0;
483 			else
484 				desc->status |= IRQ_WAKEUP;
485 		}
486 	} else {
487 		if (desc->wake_depth == 0) {
488 			WARN(1, "Unbalanced IRQ %d wake disable\n", irq);
489 		} else if (--desc->wake_depth == 0) {
490 			ret = set_irq_wake_real(irq, on);
491 			if (ret)
492 				desc->wake_depth = 1;
493 			else
494 				desc->status &= ~IRQ_WAKEUP;
495 		}
496 	}
497 
498 	raw_spin_unlock_irqrestore(&desc->lock, flags);
499 	chip_bus_sync_unlock(desc);
500 	return ret;
501 }
502 EXPORT_SYMBOL(irq_set_irq_wake);
503 
504 /*
505  * Internal function that tells the architecture code whether a
506  * particular irq has been exclusively allocated or is available
507  * for driver use.
508  */
509 int can_request_irq(unsigned int irq, unsigned long irqflags)
510 {
511 	struct irq_desc *desc = irq_to_desc(irq);
512 	struct irqaction *action;
513 	unsigned long flags;
514 
515 	if (!desc)
516 		return 0;
517 
518 	if (desc->status & IRQ_NOREQUEST)
519 		return 0;
520 
521 	raw_spin_lock_irqsave(&desc->lock, flags);
522 	action = desc->action;
523 	if (action)
524 		if (irqflags & action->flags & IRQF_SHARED)
525 			action = NULL;
526 
527 	raw_spin_unlock_irqrestore(&desc->lock, flags);
528 
529 	return !action;
530 }
531 
532 void compat_irq_chip_set_default_handler(struct irq_desc *desc)
533 {
534 	/*
535 	 * If the architecture still has not overriden
536 	 * the flow handler then zap the default. This
537 	 * should catch incorrect flow-type setting.
538 	 */
539 	if (desc->handle_irq == &handle_bad_irq)
540 		desc->handle_irq = NULL;
541 }
542 
543 int __irq_set_trigger(struct irq_desc *desc, unsigned int irq,
544 		      unsigned long flags)
545 {
546 	int ret;
547 	struct irq_chip *chip = desc->irq_data.chip;
548 
549 	if (!chip || !chip->irq_set_type) {
550 		/*
551 		 * IRQF_TRIGGER_* but the PIC does not support multiple
552 		 * flow-types?
553 		 */
554 		pr_debug("No set_type function for IRQ %d (%s)\n", irq,
555 				chip ? (chip->name ? : "unknown") : "unknown");
556 		return 0;
557 	}
558 
559 	/* caller masked out all except trigger mode flags */
560 	ret = chip->irq_set_type(&desc->irq_data, flags);
561 
562 	if (ret)
563 		pr_err("setting trigger mode %lu for irq %u failed (%pF)\n",
564 		       flags, irq, chip->irq_set_type);
565 	else {
566 		if (flags & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH))
567 			flags |= IRQ_LEVEL;
568 		/* note that IRQF_TRIGGER_MASK == IRQ_TYPE_SENSE_MASK */
569 		desc->status &= ~(IRQ_LEVEL | IRQ_TYPE_SENSE_MASK);
570 		desc->status |= flags;
571 
572 		if (chip != desc->irq_data.chip)
573 			irq_chip_set_defaults(desc->irq_data.chip);
574 	}
575 
576 	return ret;
577 }
578 
579 /*
580  * Default primary interrupt handler for threaded interrupts. Is
581  * assigned as primary handler when request_threaded_irq is called
582  * with handler == NULL. Useful for oneshot interrupts.
583  */
584 static irqreturn_t irq_default_primary_handler(int irq, void *dev_id)
585 {
586 	return IRQ_WAKE_THREAD;
587 }
588 
589 /*
590  * Primary handler for nested threaded interrupts. Should never be
591  * called.
592  */
593 static irqreturn_t irq_nested_primary_handler(int irq, void *dev_id)
594 {
595 	WARN(1, "Primary handler called for nested irq %d\n", irq);
596 	return IRQ_NONE;
597 }
598 
599 static int irq_wait_for_interrupt(struct irqaction *action)
600 {
601 	while (!kthread_should_stop()) {
602 		set_current_state(TASK_INTERRUPTIBLE);
603 
604 		if (test_and_clear_bit(IRQTF_RUNTHREAD,
605 				       &action->thread_flags)) {
606 			__set_current_state(TASK_RUNNING);
607 			return 0;
608 		}
609 		schedule();
610 	}
611 	return -1;
612 }
613 
614 /*
615  * Oneshot interrupts keep the irq line masked until the threaded
616  * handler finished. unmask if the interrupt has not been disabled and
617  * is marked MASKED.
618  */
619 static void irq_finalize_oneshot(unsigned int irq, struct irq_desc *desc)
620 {
621 again:
622 	chip_bus_lock(desc);
623 	raw_spin_lock_irq(&desc->lock);
624 
625 	/*
626 	 * Implausible though it may be we need to protect us against
627 	 * the following scenario:
628 	 *
629 	 * The thread is faster done than the hard interrupt handler
630 	 * on the other CPU. If we unmask the irq line then the
631 	 * interrupt can come in again and masks the line, leaves due
632 	 * to IRQ_INPROGRESS and the irq line is masked forever.
633 	 */
634 	if (unlikely(desc->status & IRQ_INPROGRESS)) {
635 		raw_spin_unlock_irq(&desc->lock);
636 		chip_bus_sync_unlock(desc);
637 		cpu_relax();
638 		goto again;
639 	}
640 
641 	if (!(desc->status & IRQ_DISABLED) && (desc->status & IRQ_MASKED)) {
642 		desc->status &= ~IRQ_MASKED;
643 		desc->irq_data.chip->irq_unmask(&desc->irq_data);
644 	}
645 	raw_spin_unlock_irq(&desc->lock);
646 	chip_bus_sync_unlock(desc);
647 }
648 
649 #ifdef CONFIG_SMP
650 /*
651  * Check whether we need to change the affinity of the interrupt thread.
652  */
653 static void
654 irq_thread_check_affinity(struct irq_desc *desc, struct irqaction *action)
655 {
656 	cpumask_var_t mask;
657 
658 	if (!test_and_clear_bit(IRQTF_AFFINITY, &action->thread_flags))
659 		return;
660 
661 	/*
662 	 * In case we are out of memory we set IRQTF_AFFINITY again and
663 	 * try again next time
664 	 */
665 	if (!alloc_cpumask_var(&mask, GFP_KERNEL)) {
666 		set_bit(IRQTF_AFFINITY, &action->thread_flags);
667 		return;
668 	}
669 
670 	raw_spin_lock_irq(&desc->lock);
671 	cpumask_copy(mask, desc->irq_data.affinity);
672 	raw_spin_unlock_irq(&desc->lock);
673 
674 	set_cpus_allowed_ptr(current, mask);
675 	free_cpumask_var(mask);
676 }
677 #else
678 static inline void
679 irq_thread_check_affinity(struct irq_desc *desc, struct irqaction *action) { }
680 #endif
681 
682 /*
683  * Interrupt handler thread
684  */
685 static int irq_thread(void *data)
686 {
687 	static const struct sched_param param = {
688 		.sched_priority = MAX_USER_RT_PRIO/2,
689 	};
690 	struct irqaction *action = data;
691 	struct irq_desc *desc = irq_to_desc(action->irq);
692 	int wake, oneshot = desc->status & IRQ_ONESHOT;
693 
694 	sched_setscheduler(current, SCHED_FIFO, &param);
695 	current->irqaction = action;
696 
697 	while (!irq_wait_for_interrupt(action)) {
698 
699 		irq_thread_check_affinity(desc, action);
700 
701 		atomic_inc(&desc->threads_active);
702 
703 		raw_spin_lock_irq(&desc->lock);
704 		if (unlikely(desc->status & IRQ_DISABLED)) {
705 			/*
706 			 * CHECKME: We might need a dedicated
707 			 * IRQ_THREAD_PENDING flag here, which
708 			 * retriggers the thread in check_irq_resend()
709 			 * but AFAICT IRQ_PENDING should be fine as it
710 			 * retriggers the interrupt itself --- tglx
711 			 */
712 			desc->status |= IRQ_PENDING;
713 			raw_spin_unlock_irq(&desc->lock);
714 		} else {
715 			raw_spin_unlock_irq(&desc->lock);
716 
717 			action->thread_fn(action->irq, action->dev_id);
718 
719 			if (oneshot)
720 				irq_finalize_oneshot(action->irq, desc);
721 		}
722 
723 		wake = atomic_dec_and_test(&desc->threads_active);
724 
725 		if (wake && waitqueue_active(&desc->wait_for_threads))
726 			wake_up(&desc->wait_for_threads);
727 	}
728 
729 	/*
730 	 * Clear irqaction. Otherwise exit_irq_thread() would make
731 	 * fuzz about an active irq thread going into nirvana.
732 	 */
733 	current->irqaction = NULL;
734 	return 0;
735 }
736 
737 /*
738  * Called from do_exit()
739  */
740 void exit_irq_thread(void)
741 {
742 	struct task_struct *tsk = current;
743 
744 	if (!tsk->irqaction)
745 		return;
746 
747 	printk(KERN_ERR
748 	       "exiting task \"%s\" (%d) is an active IRQ thread (irq %d)\n",
749 	       tsk->comm ? tsk->comm : "", tsk->pid, tsk->irqaction->irq);
750 
751 	/*
752 	 * Set the THREAD DIED flag to prevent further wakeups of the
753 	 * soon to be gone threaded handler.
754 	 */
755 	set_bit(IRQTF_DIED, &tsk->irqaction->flags);
756 }
757 
758 /*
759  * Internal function to register an irqaction - typically used to
760  * allocate special interrupts that are part of the architecture.
761  */
762 static int
763 __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
764 {
765 	struct irqaction *old, **old_ptr;
766 	const char *old_name = NULL;
767 	unsigned long flags;
768 	int nested, shared = 0;
769 	int ret;
770 
771 	if (!desc)
772 		return -EINVAL;
773 
774 	if (desc->irq_data.chip == &no_irq_chip)
775 		return -ENOSYS;
776 	/*
777 	 * Some drivers like serial.c use request_irq() heavily,
778 	 * so we have to be careful not to interfere with a
779 	 * running system.
780 	 */
781 	if (new->flags & IRQF_SAMPLE_RANDOM) {
782 		/*
783 		 * This function might sleep, we want to call it first,
784 		 * outside of the atomic block.
785 		 * Yes, this might clear the entropy pool if the wrong
786 		 * driver is attempted to be loaded, without actually
787 		 * installing a new handler, but is this really a problem,
788 		 * only the sysadmin is able to do this.
789 		 */
790 		rand_initialize_irq(irq);
791 	}
792 
793 	/* Oneshot interrupts are not allowed with shared */
794 	if ((new->flags & IRQF_ONESHOT) && (new->flags & IRQF_SHARED))
795 		return -EINVAL;
796 
797 	/*
798 	 * Check whether the interrupt nests into another interrupt
799 	 * thread.
800 	 */
801 	nested = desc->status & IRQ_NESTED_THREAD;
802 	if (nested) {
803 		if (!new->thread_fn)
804 			return -EINVAL;
805 		/*
806 		 * Replace the primary handler which was provided from
807 		 * the driver for non nested interrupt handling by the
808 		 * dummy function which warns when called.
809 		 */
810 		new->handler = irq_nested_primary_handler;
811 	}
812 
813 	/*
814 	 * Create a handler thread when a thread function is supplied
815 	 * and the interrupt does not nest into another interrupt
816 	 * thread.
817 	 */
818 	if (new->thread_fn && !nested) {
819 		struct task_struct *t;
820 
821 		t = kthread_create(irq_thread, new, "irq/%d-%s", irq,
822 				   new->name);
823 		if (IS_ERR(t))
824 			return PTR_ERR(t);
825 		/*
826 		 * We keep the reference to the task struct even if
827 		 * the thread dies to avoid that the interrupt code
828 		 * references an already freed task_struct.
829 		 */
830 		get_task_struct(t);
831 		new->thread = t;
832 	}
833 
834 	/*
835 	 * The following block of code has to be executed atomically
836 	 */
837 	raw_spin_lock_irqsave(&desc->lock, flags);
838 	old_ptr = &desc->action;
839 	old = *old_ptr;
840 	if (old) {
841 		/*
842 		 * Can't share interrupts unless both agree to and are
843 		 * the same type (level, edge, polarity). So both flag
844 		 * fields must have IRQF_SHARED set and the bits which
845 		 * set the trigger type must match.
846 		 */
847 		if (!((old->flags & new->flags) & IRQF_SHARED) ||
848 		    ((old->flags ^ new->flags) & IRQF_TRIGGER_MASK)) {
849 			old_name = old->name;
850 			goto mismatch;
851 		}
852 
853 #if defined(CONFIG_IRQ_PER_CPU)
854 		/* All handlers must agree on per-cpuness */
855 		if ((old->flags & IRQF_PERCPU) !=
856 		    (new->flags & IRQF_PERCPU))
857 			goto mismatch;
858 #endif
859 
860 		/* add new interrupt at end of irq queue */
861 		do {
862 			old_ptr = &old->next;
863 			old = *old_ptr;
864 		} while (old);
865 		shared = 1;
866 	}
867 
868 	if (!shared) {
869 		irq_chip_set_defaults(desc->irq_data.chip);
870 
871 		init_waitqueue_head(&desc->wait_for_threads);
872 
873 		/* Setup the type (level, edge polarity) if configured: */
874 		if (new->flags & IRQF_TRIGGER_MASK) {
875 			ret = __irq_set_trigger(desc, irq,
876 					new->flags & IRQF_TRIGGER_MASK);
877 
878 			if (ret)
879 				goto out_thread;
880 		} else
881 			compat_irq_chip_set_default_handler(desc);
882 #if defined(CONFIG_IRQ_PER_CPU)
883 		if (new->flags & IRQF_PERCPU)
884 			desc->status |= IRQ_PER_CPU;
885 #endif
886 
887 		desc->status &= ~(IRQ_AUTODETECT | IRQ_WAITING | IRQ_ONESHOT |
888 				  IRQ_INPROGRESS | IRQ_SPURIOUS_DISABLED);
889 
890 		if (new->flags & IRQF_ONESHOT)
891 			desc->status |= IRQ_ONESHOT;
892 
893 		if (!(desc->status & IRQ_NOAUTOEN)) {
894 			desc->depth = 0;
895 			desc->status &= ~IRQ_DISABLED;
896 			desc->irq_data.chip->irq_startup(&desc->irq_data);
897 		} else
898 			/* Undo nested disables: */
899 			desc->depth = 1;
900 
901 		/* Exclude IRQ from balancing if requested */
902 		if (new->flags & IRQF_NOBALANCING)
903 			desc->status |= IRQ_NO_BALANCING;
904 
905 		/* Set default affinity mask once everything is setup */
906 		setup_affinity(irq, desc);
907 
908 	} else if ((new->flags & IRQF_TRIGGER_MASK)
909 			&& (new->flags & IRQF_TRIGGER_MASK)
910 				!= (desc->status & IRQ_TYPE_SENSE_MASK)) {
911 		/* hope the handler works with the actual trigger mode... */
912 		pr_warning("IRQ %d uses trigger mode %d; requested %d\n",
913 				irq, (int)(desc->status & IRQ_TYPE_SENSE_MASK),
914 				(int)(new->flags & IRQF_TRIGGER_MASK));
915 	}
916 
917 	new->irq = irq;
918 	*old_ptr = new;
919 
920 	/* Reset broken irq detection when installing new handler */
921 	desc->irq_count = 0;
922 	desc->irqs_unhandled = 0;
923 
924 	/*
925 	 * Check whether we disabled the irq via the spurious handler
926 	 * before. Reenable it and give it another chance.
927 	 */
928 	if (shared && (desc->status & IRQ_SPURIOUS_DISABLED)) {
929 		desc->status &= ~IRQ_SPURIOUS_DISABLED;
930 		__enable_irq(desc, irq, false);
931 	}
932 
933 	raw_spin_unlock_irqrestore(&desc->lock, flags);
934 
935 	/*
936 	 * Strictly no need to wake it up, but hung_task complains
937 	 * when no hard interrupt wakes the thread up.
938 	 */
939 	if (new->thread)
940 		wake_up_process(new->thread);
941 
942 	register_irq_proc(irq, desc);
943 	new->dir = NULL;
944 	register_handler_proc(irq, new);
945 
946 	return 0;
947 
948 mismatch:
949 #ifdef CONFIG_DEBUG_SHIRQ
950 	if (!(new->flags & IRQF_PROBE_SHARED)) {
951 		printk(KERN_ERR "IRQ handler type mismatch for IRQ %d\n", irq);
952 		if (old_name)
953 			printk(KERN_ERR "current handler: %s\n", old_name);
954 		dump_stack();
955 	}
956 #endif
957 	ret = -EBUSY;
958 
959 out_thread:
960 	raw_spin_unlock_irqrestore(&desc->lock, flags);
961 	if (new->thread) {
962 		struct task_struct *t = new->thread;
963 
964 		new->thread = NULL;
965 		if (likely(!test_bit(IRQTF_DIED, &new->thread_flags)))
966 			kthread_stop(t);
967 		put_task_struct(t);
968 	}
969 	return ret;
970 }
971 
972 /**
973  *	setup_irq - setup an interrupt
974  *	@irq: Interrupt line to setup
975  *	@act: irqaction for the interrupt
976  *
977  * Used to statically setup interrupts in the early boot process.
978  */
979 int setup_irq(unsigned int irq, struct irqaction *act)
980 {
981 	int retval;
982 	struct irq_desc *desc = irq_to_desc(irq);
983 
984 	chip_bus_lock(desc);
985 	retval = __setup_irq(irq, desc, act);
986 	chip_bus_sync_unlock(desc);
987 
988 	return retval;
989 }
990 EXPORT_SYMBOL_GPL(setup_irq);
991 
992  /*
993  * Internal function to unregister an irqaction - used to free
994  * regular and special interrupts that are part of the architecture.
995  */
996 static struct irqaction *__free_irq(unsigned int irq, void *dev_id)
997 {
998 	struct irq_desc *desc = irq_to_desc(irq);
999 	struct irqaction *action, **action_ptr;
1000 	unsigned long flags;
1001 
1002 	WARN(in_interrupt(), "Trying to free IRQ %d from IRQ context!\n", irq);
1003 
1004 	if (!desc)
1005 		return NULL;
1006 
1007 	raw_spin_lock_irqsave(&desc->lock, flags);
1008 
1009 	/*
1010 	 * There can be multiple actions per IRQ descriptor, find the right
1011 	 * one based on the dev_id:
1012 	 */
1013 	action_ptr = &desc->action;
1014 	for (;;) {
1015 		action = *action_ptr;
1016 
1017 		if (!action) {
1018 			WARN(1, "Trying to free already-free IRQ %d\n", irq);
1019 			raw_spin_unlock_irqrestore(&desc->lock, flags);
1020 
1021 			return NULL;
1022 		}
1023 
1024 		if (action->dev_id == dev_id)
1025 			break;
1026 		action_ptr = &action->next;
1027 	}
1028 
1029 	/* Found it - now remove it from the list of entries: */
1030 	*action_ptr = action->next;
1031 
1032 	/* Currently used only by UML, might disappear one day: */
1033 #ifdef CONFIG_IRQ_RELEASE_METHOD
1034 	if (desc->irq_data.chip->release)
1035 		desc->irq_data.chip->release(irq, dev_id);
1036 #endif
1037 
1038 	/* If this was the last handler, shut down the IRQ line: */
1039 	if (!desc->action) {
1040 		desc->status |= IRQ_DISABLED;
1041 		if (desc->irq_data.chip->irq_shutdown)
1042 			desc->irq_data.chip->irq_shutdown(&desc->irq_data);
1043 		else
1044 			desc->irq_data.chip->irq_disable(&desc->irq_data);
1045 	}
1046 
1047 #ifdef CONFIG_SMP
1048 	/* make sure affinity_hint is cleaned up */
1049 	if (WARN_ON_ONCE(desc->affinity_hint))
1050 		desc->affinity_hint = NULL;
1051 #endif
1052 
1053 	raw_spin_unlock_irqrestore(&desc->lock, flags);
1054 
1055 	unregister_handler_proc(irq, action);
1056 
1057 	/* Make sure it's not being used on another CPU: */
1058 	synchronize_irq(irq);
1059 
1060 #ifdef CONFIG_DEBUG_SHIRQ
1061 	/*
1062 	 * It's a shared IRQ -- the driver ought to be prepared for an IRQ
1063 	 * event to happen even now it's being freed, so let's make sure that
1064 	 * is so by doing an extra call to the handler ....
1065 	 *
1066 	 * ( We do this after actually deregistering it, to make sure that a
1067 	 *   'real' IRQ doesn't run in * parallel with our fake. )
1068 	 */
1069 	if (action->flags & IRQF_SHARED) {
1070 		local_irq_save(flags);
1071 		action->handler(irq, dev_id);
1072 		local_irq_restore(flags);
1073 	}
1074 #endif
1075 
1076 	if (action->thread) {
1077 		if (!test_bit(IRQTF_DIED, &action->thread_flags))
1078 			kthread_stop(action->thread);
1079 		put_task_struct(action->thread);
1080 	}
1081 
1082 	return action;
1083 }
1084 
1085 /**
1086  *	remove_irq - free an interrupt
1087  *	@irq: Interrupt line to free
1088  *	@act: irqaction for the interrupt
1089  *
1090  * Used to remove interrupts statically setup by the early boot process.
1091  */
1092 void remove_irq(unsigned int irq, struct irqaction *act)
1093 {
1094 	__free_irq(irq, act->dev_id);
1095 }
1096 EXPORT_SYMBOL_GPL(remove_irq);
1097 
1098 /**
1099  *	free_irq - free an interrupt allocated with request_irq
1100  *	@irq: Interrupt line to free
1101  *	@dev_id: Device identity to free
1102  *
1103  *	Remove an interrupt handler. The handler is removed and if the
1104  *	interrupt line is no longer in use by any driver it is disabled.
1105  *	On a shared IRQ the caller must ensure the interrupt is disabled
1106  *	on the card it drives before calling this function. The function
1107  *	does not return until any executing interrupts for this IRQ
1108  *	have completed.
1109  *
1110  *	This function must not be called from interrupt context.
1111  */
1112 void free_irq(unsigned int irq, void *dev_id)
1113 {
1114 	struct irq_desc *desc = irq_to_desc(irq);
1115 
1116 	if (!desc)
1117 		return;
1118 
1119 #ifdef CONFIG_SMP
1120 	if (WARN_ON(desc->affinity_notify))
1121 		desc->affinity_notify = NULL;
1122 #endif
1123 
1124 	chip_bus_lock(desc);
1125 	kfree(__free_irq(irq, dev_id));
1126 	chip_bus_sync_unlock(desc);
1127 }
1128 EXPORT_SYMBOL(free_irq);
1129 
1130 /**
1131  *	request_threaded_irq - allocate an interrupt line
1132  *	@irq: Interrupt line to allocate
1133  *	@handler: Function to be called when the IRQ occurs.
1134  *		  Primary handler for threaded interrupts
1135  *		  If NULL and thread_fn != NULL the default
1136  *		  primary handler is installed
1137  *	@thread_fn: Function called from the irq handler thread
1138  *		    If NULL, no irq thread is created
1139  *	@irqflags: Interrupt type flags
1140  *	@devname: An ascii name for the claiming device
1141  *	@dev_id: A cookie passed back to the handler function
1142  *
1143  *	This call allocates interrupt resources and enables the
1144  *	interrupt line and IRQ handling. From the point this
1145  *	call is made your handler function may be invoked. Since
1146  *	your handler function must clear any interrupt the board
1147  *	raises, you must take care both to initialise your hardware
1148  *	and to set up the interrupt handler in the right order.
1149  *
1150  *	If you want to set up a threaded irq handler for your device
1151  *	then you need to supply @handler and @thread_fn. @handler ist
1152  *	still called in hard interrupt context and has to check
1153  *	whether the interrupt originates from the device. If yes it
1154  *	needs to disable the interrupt on the device and return
1155  *	IRQ_WAKE_THREAD which will wake up the handler thread and run
1156  *	@thread_fn. This split handler design is necessary to support
1157  *	shared interrupts.
1158  *
1159  *	Dev_id must be globally unique. Normally the address of the
1160  *	device data structure is used as the cookie. Since the handler
1161  *	receives this value it makes sense to use it.
1162  *
1163  *	If your interrupt is shared you must pass a non NULL dev_id
1164  *	as this is required when freeing the interrupt.
1165  *
1166  *	Flags:
1167  *
1168  *	IRQF_SHARED		Interrupt is shared
1169  *	IRQF_SAMPLE_RANDOM	The interrupt can be used for entropy
1170  *	IRQF_TRIGGER_*		Specify active edge(s) or level
1171  *
1172  */
1173 int request_threaded_irq(unsigned int irq, irq_handler_t handler,
1174 			 irq_handler_t thread_fn, unsigned long irqflags,
1175 			 const char *devname, void *dev_id)
1176 {
1177 	struct irqaction *action;
1178 	struct irq_desc *desc;
1179 	int retval;
1180 
1181 	/*
1182 	 * Sanity-check: shared interrupts must pass in a real dev-ID,
1183 	 * otherwise we'll have trouble later trying to figure out
1184 	 * which interrupt is which (messes up the interrupt freeing
1185 	 * logic etc).
1186 	 */
1187 	if ((irqflags & IRQF_SHARED) && !dev_id)
1188 		return -EINVAL;
1189 
1190 	desc = irq_to_desc(irq);
1191 	if (!desc)
1192 		return -EINVAL;
1193 
1194 	if (desc->status & IRQ_NOREQUEST)
1195 		return -EINVAL;
1196 
1197 	if (!handler) {
1198 		if (!thread_fn)
1199 			return -EINVAL;
1200 		handler = irq_default_primary_handler;
1201 	}
1202 
1203 	action = kzalloc(sizeof(struct irqaction), GFP_KERNEL);
1204 	if (!action)
1205 		return -ENOMEM;
1206 
1207 	action->handler = handler;
1208 	action->thread_fn = thread_fn;
1209 	action->flags = irqflags;
1210 	action->name = devname;
1211 	action->dev_id = dev_id;
1212 
1213 	chip_bus_lock(desc);
1214 	retval = __setup_irq(irq, desc, action);
1215 	chip_bus_sync_unlock(desc);
1216 
1217 	if (retval)
1218 		kfree(action);
1219 
1220 #ifdef CONFIG_DEBUG_SHIRQ_FIXME
1221 	if (!retval && (irqflags & IRQF_SHARED)) {
1222 		/*
1223 		 * It's a shared IRQ -- the driver ought to be prepared for it
1224 		 * to happen immediately, so let's make sure....
1225 		 * We disable the irq to make sure that a 'real' IRQ doesn't
1226 		 * run in parallel with our fake.
1227 		 */
1228 		unsigned long flags;
1229 
1230 		disable_irq(irq);
1231 		local_irq_save(flags);
1232 
1233 		handler(irq, dev_id);
1234 
1235 		local_irq_restore(flags);
1236 		enable_irq(irq);
1237 	}
1238 #endif
1239 	return retval;
1240 }
1241 EXPORT_SYMBOL(request_threaded_irq);
1242 
1243 /**
1244  *	request_any_context_irq - allocate an interrupt line
1245  *	@irq: Interrupt line to allocate
1246  *	@handler: Function to be called when the IRQ occurs.
1247  *		  Threaded handler for threaded interrupts.
1248  *	@flags: Interrupt type flags
1249  *	@name: An ascii name for the claiming device
1250  *	@dev_id: A cookie passed back to the handler function
1251  *
1252  *	This call allocates interrupt resources and enables the
1253  *	interrupt line and IRQ handling. It selects either a
1254  *	hardirq or threaded handling method depending on the
1255  *	context.
1256  *
1257  *	On failure, it returns a negative value. On success,
1258  *	it returns either IRQC_IS_HARDIRQ or IRQC_IS_NESTED.
1259  */
1260 int request_any_context_irq(unsigned int irq, irq_handler_t handler,
1261 			    unsigned long flags, const char *name, void *dev_id)
1262 {
1263 	struct irq_desc *desc = irq_to_desc(irq);
1264 	int ret;
1265 
1266 	if (!desc)
1267 		return -EINVAL;
1268 
1269 	if (desc->status & IRQ_NESTED_THREAD) {
1270 		ret = request_threaded_irq(irq, NULL, handler,
1271 					   flags, name, dev_id);
1272 		return !ret ? IRQC_IS_NESTED : ret;
1273 	}
1274 
1275 	ret = request_irq(irq, handler, flags, name, dev_id);
1276 	return !ret ? IRQC_IS_HARDIRQ : ret;
1277 }
1278 EXPORT_SYMBOL_GPL(request_any_context_irq);
1279