diff options
| author | Michael Ellerman <michael@ellerman.id.au> | 2007-08-28 18:47:55 +1000 | 
|---|---|---|
| committer | Paul Mackerras <paulus@samba.org> | 2007-09-14 01:33:20 +1000 | 
| commit | 8528ab84ebe7a1eeed9b0acc808df86663d506c0 (patch) | |
| tree | b1037def36002586de1e366686376e29e451199d | |
| parent | 52964f87c64e6c6ea671b5bf3030fb1494090a48 (diff) | |
| download | olio-linux-3.10-8528ab84ebe7a1eeed9b0acc808df86663d506c0.tar.xz olio-linux-3.10-8528ab84ebe7a1eeed9b0acc808df86663d506c0.zip  | |
[POWERPC] Invert null match behaviour for irq_hosts
Currently if you don't specify a match callback for your irq_host it's
assumed you match everything. This is a kind of opt-out approach, and
turns out to be the exception rather than the rule.
So change the semantics to be opt-in, ie. you don't match anything unless
you provide a match callback.  This in itself isn't very useful, but will
allow us to provide a default match implementation in a subsequent patch.
Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Signed-off-by: Paul Mackerras <paulus@samba.org>
| -rw-r--r-- | arch/powerpc/kernel/irq.c | 2 | ||||
| -rw-r--r-- | arch/powerpc/platforms/celleb/interrupt.c | 7 | ||||
| -rw-r--r-- | arch/powerpc/platforms/iseries/irq.c | 7 | ||||
| -rw-r--r-- | arch/powerpc/platforms/ps3/interrupt.c | 7 | 
4 files changed, 22 insertions, 1 deletions
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c index 79b451247b8..30fb8e2c5c9 100644 --- a/arch/powerpc/kernel/irq.c +++ b/arch/powerpc/kernel/irq.c @@ -523,7 +523,7 @@ struct irq_host *irq_find_host(struct device_node *node)  	 */  	spin_lock_irqsave(&irq_big_lock, flags);  	list_for_each_entry(h, &irq_hosts, link) -		if (h->ops->match == NULL || h->ops->match(h, node)) { +		if (h->ops->match != NULL && h->ops->match(h, node)) {  			found = h;  			break;  		} diff --git a/arch/powerpc/platforms/celleb/interrupt.c b/arch/powerpc/platforms/celleb/interrupt.c index 4ecdf06e421..c7c68ca70c8 100644 --- a/arch/powerpc/platforms/celleb/interrupt.c +++ b/arch/powerpc/platforms/celleb/interrupt.c @@ -175,11 +175,18 @@ static int beatic_pic_host_xlate(struct irq_host *h, struct device_node *ct,  	return 0;  } +static int beatic_pic_host_match(struct irq_host *h, struct device_node *np) +{ +	/* Match all */ +	return 1; +} +  static struct irq_host_ops beatic_pic_host_ops = {  	.map = beatic_pic_host_map,  	.remap = beatic_pic_host_remap,  	.unmap = beatic_pic_host_unmap,  	.xlate = beatic_pic_host_xlate, +	.match = beatic_pic_host_match,  };  /* diff --git a/arch/powerpc/platforms/iseries/irq.c b/arch/powerpc/platforms/iseries/irq.c index 36667460c92..701d9297c20 100644 --- a/arch/powerpc/platforms/iseries/irq.c +++ b/arch/powerpc/platforms/iseries/irq.c @@ -346,8 +346,15 @@ static int iseries_irq_host_map(struct irq_host *h, unsigned int virq,  	return 0;  } +static int iseries_irq_host_match(struct irq_host *h, struct device_node *np) +{ +	/* Match all */ +	return 1; +} +  static struct irq_host_ops iseries_irq_host_ops = {  	.map = iseries_irq_host_map, +	.match = iseries_irq_host_match,  };  /* diff --git a/arch/powerpc/platforms/ps3/interrupt.c b/arch/powerpc/platforms/ps3/interrupt.c index 30b9f4c6eb5..3a6db04aa94 100644 --- a/arch/powerpc/platforms/ps3/interrupt.c +++ b/arch/powerpc/platforms/ps3/interrupt.c @@ -673,9 +673,16 @@ static int ps3_host_map(struct irq_host *h, unsigned int virq,  	return 0;  } +static int ps3_host_match(struct irq_host *h, struct device_node *np) +{ +	/* Match all */ +	return 1; +} +  static struct irq_host_ops ps3_host_ops = {  	.map = ps3_host_map,  	.unmap = ps3_host_unmap, +	.match = ps3_host_match,  };  void __init ps3_register_ipi_debug_brk(unsigned int cpu, unsigned int virq)  |