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 set of small fixes for the irq subsystem:

- Cure a data ordering problem with chained interrupts

- Three small fixlets for the mbigen irq chip"

* 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
genirq: Fix chained interrupt data ordering
irqchip/mbigen: Fix the clear register offset calculation
irqchip/mbigen: Fix potential NULL dereferencing
irqchip/mbigen: Fix memory mapping code

Changed files
+11 -8
drivers
irqchip
kernel
irq
+10 -7
drivers/irqchip/irq-mbigen.c
··· 106 106 static inline void get_mbigen_clear_reg(irq_hw_number_t hwirq, 107 107 u32 *mask, u32 *addr) 108 108 { 109 - unsigned int ofst; 110 - 111 - hwirq -= RESERVED_IRQ_PER_MBIGEN_CHIP; 112 - ofst = hwirq / 32 * 4; 109 + unsigned int ofst = (hwirq / 32) * 4; 113 110 114 111 *mask = 1 << (hwirq % 32); 115 112 *addr = ofst + REG_MBIGEN_CLEAR_OFFSET; ··· 334 337 mgn_chip->pdev = pdev; 335 338 336 339 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 337 - mgn_chip->base = devm_ioremap_resource(&pdev->dev, res); 338 - if (IS_ERR(mgn_chip->base)) 339 - return PTR_ERR(mgn_chip->base); 340 + if (!res) 341 + return -EINVAL; 342 + 343 + mgn_chip->base = devm_ioremap(&pdev->dev, res->start, 344 + resource_size(res)); 345 + if (!mgn_chip->base) { 346 + dev_err(&pdev->dev, "failed to ioremap %pR\n", res); 347 + return -ENOMEM; 348 + } 340 349 341 350 if (IS_ENABLED(CONFIG_OF) && pdev->dev.of_node) 342 351 err = mbigen_of_create_domain(pdev, mgn_chip);
+1 -1
kernel/irq/chip.c
··· 880 880 if (!desc) 881 881 return; 882 882 883 - __irq_do_set_handler(desc, handle, 1, NULL); 884 883 desc->irq_common_data.handler_data = data; 884 + __irq_do_set_handler(desc, handle, 1, NULL); 885 885 886 886 irq_put_desc_busunlock(desc, flags); 887 887 }