Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3418d724 authored by Thomas Gleixner's avatar Thomas Gleixner Committed by Linus Torvalds
Browse files

[PATCH] genirq: add IRQ_NOPROBE support



Introduce IRQ_NOPROBE: enables platforms to control chip-probing.

Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent a4633adc
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -40,6 +40,7 @@
# define CHECK_IRQ_PER_CPU(var) 0
# define CHECK_IRQ_PER_CPU(var) 0
#endif
#endif


#define IRQ_NOPROBE	512	/* IRQ is not valid for probing */
/**
/**
 * struct hw_interrupt_type - hardware interrupt type descriptor
 * struct hw_interrupt_type - hardware interrupt type descriptor
 *
 *
+2 −2
Original line number Original line Diff line number Diff line
@@ -40,7 +40,7 @@ unsigned long probe_irq_on(void)
		desc = irq_desc + i;
		desc = irq_desc + i;


		spin_lock_irq(&desc->lock);
		spin_lock_irq(&desc->lock);
		if (!desc->action)
		if (!desc->action && !(desc->status & IRQ_NOPROBE))
			desc->chip->startup(i);
			desc->chip->startup(i);
		spin_unlock_irq(&desc->lock);
		spin_unlock_irq(&desc->lock);
	}
	}
@@ -57,7 +57,7 @@ unsigned long probe_irq_on(void)
		desc = irq_desc + i;
		desc = irq_desc + i;


		spin_lock_irq(&desc->lock);
		spin_lock_irq(&desc->lock);
		if (!desc->action) {
		if (!desc->action && !(desc->status & IRQ_NOPROBE)) {
			desc->status |= IRQ_AUTODETECT | IRQ_WAITING;
			desc->status |= IRQ_AUTODETECT | IRQ_WAITING;
			if (desc->chip->startup(i))
			if (desc->chip->startup(i))
				desc->status |= IRQ_PENDING;
				desc->status |= IRQ_PENDING;
+4 −0
Original line number Original line Diff line number Diff line
@@ -118,6 +118,10 @@ void enable_irq(unsigned int irq)
		WARN_ON(1);
		WARN_ON(1);
		break;
		break;
	case 1: {
	case 1: {
		unsigned int status = desc->status & ~IRQ_DISABLED;

		/* Prevent probing on this irq: */
		desc->status = status | IRQ_NOPROBE;
		check_irq_resend(desc, irq);
		check_irq_resend(desc, irq);
		/* fall-through */
		/* fall-through */
	}
	}