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 -
| Linus Torvalds | Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3 |
| Tony Lindgren | [PATCH 37/90] ARM: OMAP: MPUIO wake updates |
| Greg KH | [GIT PATCH] driver core patches against 2.6.24 |
| Miklos Szeredi | -rt doesn't compile for UML |
git: | |
| Florian Weimer | Re: Handling large files with GIT |
| Dana How | [PATCH] Prevent megablobs from gunking up git packs |
| Denis Bueno | Recovering from repository corruption |
| Peter Stahlir | Git as a filesystem |
| Richard Stallman | Real men don't attack straw men |
| Brian A. Seklecki | sshd_config(5) PermitRootLogin yes |
| Theo de Raadt | Re: dmesg IBM x3650 OpenBSD 4.3 |
| Stuart Henderson | Re: Actual BIND error - Patching OpenBSD 4.3 named ? |
| Auke Kok | [PATCH 5/6] e1000: Secondary unicast address support |
| Jon Nelson | tg3: strange errors and non-working-ness |
| Indan Zupancic | Re: Realtek 8111C transmit timed out |
| Brandeburg, Jesse | RE: 2.6.24 BUG: soft lockup - CPU#X |
| Shared swap partition | 4 minutes ago | Linux general |
| usb mic not detected | 4 hours ago | Applications and Utilities |
| Problem in Inserting a module | 5 hours ago | Linux kernel |
| Treason Uncloaked | 10 hours ago | Linux kernel |
| high memory | 2 days ago | Linux kernel |
| semaphore access speed | 2 days ago | Applications and Utilities |
| the kernel how to power off the machine | 2 days ago | Linux kernel |
| Easter Eggs in windows XP | 2 days ago | Windows |
| Root password | 3 days ago | Linux general |
| Where/when DNOTIFY is used? | 3 days ago | Linux kernel |
