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 update from Thomas Gleixner:
"A small set of updats/fixes for the irq subsystem:

- Allow GICv3 interrupts to be configured as wake-up sources to
enable wakeup from suspend

- Make the error handling of the STM32 irqchip init function work

- A set of small cleanups and improvements"

* 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
irqchip/gic-v3: Allow interrupt to be configured as wake-up sources
irqchip/tango: Set irq handler and data in one go
dt-bindings: irqchip: renesas-irqc: Document r8a774a1 support
irqchip/s3c24xx: Remove unneeded comparison of unsigned long to 0
irqchip/stm32: Fix init error handling
irqchip/bcm7038-l1: Hide cpu offline callback when building for !SMP

+26 -17
+1
Documentation/devicetree/bindings/interrupt-controller/renesas,irqc.txt
··· 13 13 - "renesas,irqc-r8a7792" (R-Car V2H) 14 14 - "renesas,irqc-r8a7793" (R-Car M2-N) 15 15 - "renesas,irqc-r8a7794" (R-Car E2) 16 + - "renesas,intc-ex-r8a774a1" (RZ/G2M) 16 17 - "renesas,intc-ex-r8a7795" (R-Car H3) 17 18 - "renesas,intc-ex-r8a7796" (R-Car M3-W) 18 19 - "renesas,intc-ex-r8a77965" (R-Car M3-N)
+4
drivers/irqchip/irq-bcm7038-l1.c
··· 217 217 return 0; 218 218 } 219 219 220 + #ifdef CONFIG_SMP 220 221 static void bcm7038_l1_cpu_offline(struct irq_data *d) 221 222 { 222 223 struct cpumask *mask = irq_data_get_affinity_mask(d); ··· 242 241 } 243 242 irq_set_affinity_locked(d, &new_affinity, false); 244 243 } 244 + #endif 245 245 246 246 static int __init bcm7038_l1_init_one(struct device_node *dn, 247 247 unsigned int idx, ··· 295 293 .irq_mask = bcm7038_l1_mask, 296 294 .irq_unmask = bcm7038_l1_unmask, 297 295 .irq_set_affinity = bcm7038_l1_set_affinity, 296 + #ifdef CONFIG_SMP 298 297 .irq_cpu_offline = bcm7038_l1_cpu_offline, 298 + #endif 299 299 }; 300 300 301 301 static int bcm7038_l1_map(struct irq_domain *d, unsigned int virq,
+6 -2
drivers/irqchip/irq-gic-v3.c
··· 861 861 .irq_set_affinity = gic_set_affinity, 862 862 .irq_get_irqchip_state = gic_irq_get_irqchip_state, 863 863 .irq_set_irqchip_state = gic_irq_set_irqchip_state, 864 - .flags = IRQCHIP_SET_TYPE_MASKED, 864 + .flags = IRQCHIP_SET_TYPE_MASKED | 865 + IRQCHIP_SKIP_SET_WAKE | 866 + IRQCHIP_MASK_ON_SUSPEND, 865 867 }; 866 868 867 869 static struct irq_chip gic_eoimode1_chip = { ··· 876 874 .irq_get_irqchip_state = gic_irq_get_irqchip_state, 877 875 .irq_set_irqchip_state = gic_irq_set_irqchip_state, 878 876 .irq_set_vcpu_affinity = gic_irq_set_vcpu_affinity, 879 - .flags = IRQCHIP_SET_TYPE_MASKED, 877 + .flags = IRQCHIP_SET_TYPE_MASKED | 878 + IRQCHIP_SKIP_SET_WAKE | 879 + IRQCHIP_MASK_ON_SUSPEND, 880 880 }; 881 881 882 882 #define GIC_ID_NR (1U << GICD_TYPER_ID_BITS(gic_data.rdists.gicd_typer))
+1 -1
drivers/irqchip/irq-s3c24xx.c
··· 250 250 void __iomem *gpcon_reg; 251 251 unsigned long gpcon_offset, extint_offset; 252 252 253 - if ((data->hwirq >= 0) && (data->hwirq <= 3)) { 253 + if (data->hwirq <= 3) { 254 254 gpcon_reg = S3C2410_GPFCON; 255 255 extint_reg = S3C24XX_EXTINT0; 256 256 gpcon_offset = (data->hwirq) * 2;
+13 -12
drivers/irqchip/irq-stm32-exti.c
··· 603 603 sizeof(struct stm32_exti_chip_data), 604 604 GFP_KERNEL); 605 605 if (!host_data->chips_data) 606 - return NULL; 606 + goto free_host_data; 607 607 608 608 host_data->base = of_iomap(node, 0); 609 609 if (!host_data->base) { 610 610 pr_err("%pOF: Unable to map registers\n", node); 611 - return NULL; 611 + goto free_chips_data; 612 612 } 613 613 614 614 stm32_host_data = host_data; 615 615 616 616 return host_data; 617 + 618 + free_chips_data: 619 + kfree(host_data->chips_data); 620 + free_host_data: 621 + kfree(host_data); 622 + 623 + return NULL; 617 624 } 618 625 619 626 static struct ··· 672 665 struct irq_domain *domain; 673 666 674 667 host_data = stm32_exti_host_init(drv_data, node); 675 - if (!host_data) { 676 - ret = -ENOMEM; 677 - goto out_free_mem; 678 - } 668 + if (!host_data) 669 + return -ENOMEM; 679 670 680 671 domain = irq_domain_add_linear(node, drv_data->bank_nr * IRQS_PER_BANK, 681 672 &irq_exti_domain_ops, NULL); ··· 730 725 irq_domain_remove(domain); 731 726 out_unmap: 732 727 iounmap(host_data->base); 733 - out_free_mem: 734 728 kfree(host_data->chips_data); 735 729 kfree(host_data); 736 730 return ret; ··· 756 752 } 757 753 758 754 host_data = stm32_exti_host_init(drv_data, node); 759 - if (!host_data) { 760 - ret = -ENOMEM; 761 - goto out_free_mem; 762 - } 755 + if (!host_data) 756 + return -ENOMEM; 763 757 764 758 for (i = 0; i < drv_data->bank_nr; i++) 765 759 stm32_exti_chip_init(host_data, i, node); ··· 779 777 780 778 out_unmap: 781 779 iounmap(host_data->base); 782 - out_free_mem: 783 780 kfree(host_data->chips_data); 784 781 kfree(host_data); 785 782 return ret;
+1 -2
drivers/irqchip/irq-tango.c
··· 205 205 206 206 tangox_irq_domain_init(dom); 207 207 208 - irq_set_chained_handler(irq, tangox_irq_handler); 209 - irq_set_handler_data(irq, dom); 208 + irq_set_chained_handler_and_data(irq, tangox_irq_handler, dom); 210 209 211 210 return 0; 212 211 }