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

Commit 13e87ec6 authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds
Browse files

[PATCH] request_irq(): remove warnings from irq probing



- Add new SA_PROBEIRQ which suppresses the new sharing-mismatch warning.
  Some drivers like to use request_irq() to find an unused interrupt slot.

- Use it in i82365.c

- Kill unused SA_PROBE.

Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 47bb7899
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -509,7 +509,8 @@ static irqreturn_t i365_count_irq(int irq, void *dev, struct pt_regs *regs)
static u_int __init test_irq(u_short sock, int irq)
{
    debug(2, "  testing ISA irq %d\n", irq);
    if (request_irq(irq, i365_count_irq, 0, "scan", i365_count_irq) != 0)
    if (request_irq(irq, i365_count_irq, SA_PROBEIRQ, "scan",
			i365_count_irq) != 0)
	return 1;
    irq_hits = 0; irq_sock = sock;
    msleep(10);
@@ -561,7 +562,7 @@ static u_int __init isa_scan(u_short sock, u_int mask0)
    } else {
	/* Fallback: just find interrupts that aren't in use */
	for (i = 0; i < 16; i++)
	    if ((mask0 & (1 << i)) && (_check_irq(i, 0) == 0))
	    if ((mask0 & (1 << i)) && (_check_irq(i, SA_PROBEIRQ) == 0))
		mask1 |= (1 << i);
	printk("default");
	/* If scan failed, default to polled status */
@@ -725,7 +726,7 @@ static void __init add_pcic(int ns, int type)
	u_int cs_mask = mask & ((cs_irq) ? (1<<cs_irq) : ~(1<<12));
	for (cs_irq = 15; cs_irq > 0; cs_irq--)
	    if ((cs_mask & (1 << cs_irq)) &&
		(_check_irq(cs_irq, 0) == 0))
		(_check_irq(cs_irq, SA_PROBEIRQ) == 0))
		break;
	if (cs_irq) {
	    grab_irq = 1;
+1 −1
Original line number Diff line number Diff line
@@ -118,9 +118,9 @@ typedef struct {
 * SA_INTERRUPT is also used by the irq handling routines.
 * SA_SHIRQ is for shared interrupt support on PCI and EISA.
 */
#define SA_PROBE		SA_ONESHOT
#define SA_SAMPLE_RANDOM	SA_RESTART
#define SA_SHIRQ		0x04000000
#define SA_PROBEIRQ		0x08000000
#endif

#define SIG_BLOCK          0	/* for blocking signals */
+3 −1
Original line number Diff line number Diff line
@@ -14,10 +14,12 @@
 *
 * SA_INTERRUPT is also used by the irq handling routines.
 * SA_SHIRQ is for shared interrupt support on PCI and EISA.
 * SA_PROBEIRQ is set by callers when they expect sharing mismatches to occur
 */
#define SA_PROBE		SA_ONESHOT
#define SA_SAMPLE_RANDOM	SA_RESTART
#define SA_SHIRQ		0x04000000
#define SA_PROBEIRQ		0x08000000

/*
 * As above, these correspond to the IORESOURCE_IRQ_* defines in
 * linux/ioport.h to select the interrupt line behaviour.  When
+4 −2
Original line number Diff line number Diff line
@@ -246,8 +246,10 @@ int setup_irq(unsigned int irq, struct irqaction * new)

mismatch:
	spin_unlock_irqrestore(&desc->lock, flags);
	if (!(new->flags & SA_PROBEIRQ)) {
		printk(KERN_ERR "%s: irq handler mismatch\n", __FUNCTION__);
		dump_stack();
	}
	return -EBUSY;
}