Thomas Gleixner <tglx@linutronix.de> writes:Yes. keeping this alive is good. The practical question is how do we make this change without breaking the drivers that use their irq argument. There are two problems with that suggestion. - We don't have all of the architectures converted. - We don't have a solid plan for how to keep drivers that are using the irq parameter today working. I don't think the irq argument is something we want to keep around forever, and I certainly don't see the need to do the error prone get_irqfunc_irq and set_irqfunc_irq logic. How about: irqreturn_t handle_IRQ_event(unsigned int irq, struct irqaction *action) { irqreturn_t ret, retval = IRQ_NONE; unsigned int status = 0; handle_dynamic_tick(action); if (!(action->flags & IRQF_DISABLED)) local_irq_enable_in_hardirq(); do { if (action->flags & IRQF_VERBOSE) ret = action->handler_verbose(irq, action->dev_id); else ret = action->handler(action->dev_id); if (ret == IRQ_HANDLED) status |= action->flags; retval |= ret; action = action->next; } while (action); if (status & IRQF_SAMPLE_RANDOM) add_interrupt_randomness(irq); local_irq_disable(); return retval; } And then: typedef irqreturn_t (*irq_handler_verbose_t)(int, void *); typedef irqreturn_t (*irq_handler_t)(void *); struct irqaction { union { irq_handler_verbose_t handler_verbose; irq_handler_t handler; }; unsigned long flags; cpumask_t mask; const char *name; void *dev_id; struct irqaction *next; int irq; struct proc_dir_entry *dir; }; int request_irq(unsigned int irq, irq_handler_t handler, unsigned long irqflags, const char *devname, void *dev_id) int request_verbose_irq(unsigned int irq, irq_handler_verbose_t handler, unsigned long irqflags, const char *devname, void *dev_id) Then we just need to go through all of the drivers and either change their interrupt handler prototype or change the flavor of request_irq. It is a bit of a pain but we should be able to do that without breaking any drivers. Which it looks like we are in real danger of if someone goes through them all interrupt handlers that are using the irq argument and change them all at once. Especially since most of those drivers are old an rarely used right now. Eric -
| Ingo Molnar | Re: [BUG] long freezes on thinkpad t60 |
| Rafael J. Wysocki | Re: [Bug 10030] Suspend doesn't work when SD card is inserted |
| Jamie Lokier | Proposal for "proper" durable fsync() and fdatasync() |
| jimmy bahuleyan | Re: how about mutual compatibility between Linux's GPLv2 and GPLv3? |
git: | |
| Martin Langhoff | Handling large files with GIT |
| Matt Mackall | Re: cleaner/better zlib sources? |
| Wink Saville | git-svn segmetation fault |
| Bill Lear | Meaning of "fatal: protocol error: bad line length character"? |
| Florin Andrei | firewall is very slow, something's wrong |
| Wijnand Wiersma | Almost success: OpenBSD on Xen |
| Marcus Andree | Re: OpenBSD kernel janitors |
| Richard Stallman | Real men don't attack straw men |
| David Miller | Re: tcp bw in 2.6 |
| Rick Jones | Re: 2.6.24 BUG: soft lockup - CPU#X |
| Patrick McHardy | [NET_SCHED 00/04]: External SFQ classifiers/flow classifier |
| Patrick McHardy | Re: [PATCH 2/2] [e1000 VLAN] Disable vlan hw accel when promiscuous mode |
