Index: linux-2.6.16.1/include/linux/ipipe.h =================================================================== --- linux-2.6.16.1.orig/include/linux/ipipe.h +++ linux-2.6.16.1/include/linux/ipipe.h @@ -125,9 +125,13 @@ typedef void (*ipipe_irq_handler_t)(unsigned irq, void *cookie); +#define IPIPE_SAME_HANDLER ((ipipe_irq_handler_t)(-1)) + typedef int (*ipipe_irq_ackfn_t)(unsigned irq); -#define IPIPE_SAME_HANDLER ((ipipe_irq_handler_t)(-1)) +typedef int (*ipipe_event_handler_t)(unsigned event, + struct ipipe_domain *from, + void *data); struct ipipe_domain { @@ -150,9 +154,7 @@ void *cookie; } ____cacheline_aligned irqs[IPIPE_NR_IRQS]; - int (*evhand[IPIPE_NR_EVENTS])(unsigned event, - struct ipipe_domain *from, - void *data); /* Event handlers. */ + ipipe_event_handler_t evhand[IPIPE_NR_EVENTS]; /* Event handlers. */ unsigned long long evself; /* Self-monitored event bits. */ #ifdef CONFIG_IPIPE_STATS @@ -711,11 +713,9 @@ clear_bit(IPIPE_SPRINTK_FLAG, &ipd->flags); } -int ipipe_catch_event(struct ipipe_domain *ipd, - unsigned event, - int (*handler)(unsigned event, - struct ipipe_domain *ipd, - void *data)); +ipipe_event_handler_t ipipe_catch_event(struct ipipe_domain *ipd, + unsigned event, + ipipe_event_handler_t handler); cpumask_t ipipe_set_irq_affinity(unsigned irq, cpumask_t cpumask); Index: linux-2.6.16.1/kernel/ipipe/generic.c =================================================================== --- linux-2.6.16.1.orig/kernel/ipipe/generic.c +++ linux-2.6.16.1/kernel/ipipe/generic.c @@ -266,9 +266,9 @@ * ipipe_catch_event() -- Interpose or remove an event handler for a * given domain. */ -int ipipe_catch_event(struct ipipe_domain *ipd, - unsigned event, - int (*handler)(unsigned event, struct ipipe_domain *ipd, void *data)) +ipipe_event_handler_t ipipe_catch_event(struct ipipe_domain *ipd, + unsigned event, + ipipe_event_handler_t handler) { int self = 0; @@ -278,7 +278,7 @@ } if (event >= IPIPE_NR_EVENTS) - return -EINVAL; + return NULL; if (!xchg(&ipd->evhand[event],handler)) { if (handler) { @@ -301,7 +301,7 @@ ipd->evself |= (1LL << event); } - return 0; + return handler; } cpumask_t ipipe_set_irq_affinity (unsigned irq, cpumask_t cpumask)