Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull irq fixes from Thomas Gleixner:
"A series of small fixlets for a regression visible on OMAP devices
caused by the conversion of the OMAP interrupt chips to hierarchical
interrupt domains. Mostly one liners on the driver side plus a small
helper function in the core to avoid open coded mess in the drivers"

* 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
irqchip/crossbar: Restore set_wake functionality
irqchip/crossbar: Restore the mask on suspend behaviour
ARM: OMAP: wakeupgen: Restore the irq_set_type() mechanism
irqchip/crossbar: Restore the irq_set_type() mechanism
genirq: Introduce irq_chip_set_type_parent() helper
genirq: Don't return ENOSYS in irq_chip_retrigger_hierarchy

+23 -2
+1
arch/arm/mach-omap2/omap-wakeupgen.c
··· 392 392 .irq_mask = wakeupgen_mask, 393 393 .irq_unmask = wakeupgen_unmask, 394 394 .irq_retrigger = irq_chip_retrigger_hierarchy, 395 + .irq_set_type = irq_chip_set_type_parent, 395 396 .flags = IRQCHIP_SKIP_SET_WAKE | IRQCHIP_MASK_ON_SUSPEND, 396 397 #ifdef CONFIG_SMP 397 398 .irq_set_affinity = irq_chip_set_affinity_parent,
+3 -1
drivers/irqchip/irq-crossbar.c
··· 68 68 .irq_mask = irq_chip_mask_parent, 69 69 .irq_unmask = irq_chip_unmask_parent, 70 70 .irq_retrigger = irq_chip_retrigger_hierarchy, 71 - .irq_set_wake = irq_chip_set_wake_parent, 71 + .irq_set_type = irq_chip_set_type_parent, 72 + .flags = IRQCHIP_MASK_ON_SUSPEND | 73 + IRQCHIP_SKIP_SET_WAKE, 72 74 #ifdef CONFIG_SMP 73 75 .irq_set_affinity = irq_chip_set_affinity_parent, 74 76 #endif
+1
include/linux/irq.h
··· 484 484 extern int irq_chip_set_wake_parent(struct irq_data *data, unsigned int on); 485 485 extern int irq_chip_set_vcpu_affinity_parent(struct irq_data *data, 486 486 void *vcpu_info); 487 + extern int irq_chip_set_type_parent(struct irq_data *data, unsigned int type); 487 488 #endif 488 489 489 490 /* Handling of unhandled and spurious interrupts: */
+18 -1
kernel/irq/chip.c
··· 985 985 } 986 986 987 987 /** 988 + * irq_chip_set_type_parent - Set IRQ type on the parent interrupt 989 + * @data: Pointer to interrupt specific data 990 + * @type: IRQ_TYPE_{LEVEL,EDGE}_* value - see include/linux/irq.h 991 + * 992 + * Conditional, as the underlying parent chip might not implement it. 993 + */ 994 + int irq_chip_set_type_parent(struct irq_data *data, unsigned int type) 995 + { 996 + data = data->parent_data; 997 + 998 + if (data->chip->irq_set_type) 999 + return data->chip->irq_set_type(data, type); 1000 + 1001 + return -ENOSYS; 1002 + } 1003 + 1004 + /** 988 1005 * irq_chip_retrigger_hierarchy - Retrigger an interrupt in hardware 989 1006 * @data: Pointer to interrupt specific data 990 1007 * ··· 1014 997 if (data->chip && data->chip->irq_retrigger) 1015 998 return data->chip->irq_retrigger(data); 1016 999 1017 - return -ENOSYS; 1000 + return 0; 1018 1001 } 1019 1002 1020 1003 /**