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

Merge tag 'irq_urgent_for_v5.19_rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull irq fixes from Borislav Petkov:

- Gracefully handle failure to request MMIO resources in the GICv3
driver

- Make a static key static in the Apple AIC driver

- Fix the Xilinx intc driver dependency on OF_ADDRESS

* tag 'irq_urgent_for_v5.19_rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
irqchip/apple-aic: Make symbol 'use_fast_ipi' static
irqchip/xilinx: Add explicit dependency on OF_ADDRESS
irqchip/gicv3: Handle resource request failure consistently

+33 -12
+1 -1
drivers/irqchip/Kconfig
··· 298 298 299 299 config XILINX_INTC 300 300 bool "Xilinx Interrupt Controller IP" 301 - depends on OF 301 + depends on OF_ADDRESS 302 302 select IRQ_DOMAIN 303 303 help 304 304 Support for the Xilinx Interrupt Controller IP core.
+1 -1
drivers/irqchip/irq-apple-aic.c
··· 228 228 #define AIC_TMR_EL02_PHYS AIC_TMR_GUEST_PHYS 229 229 #define AIC_TMR_EL02_VIRT AIC_TMR_GUEST_VIRT 230 230 231 - DEFINE_STATIC_KEY_TRUE(use_fast_ipi); 231 + static DEFINE_STATIC_KEY_TRUE(use_fast_ipi); 232 232 233 233 struct aic_info { 234 234 int version;
+31 -10
drivers/irqchip/irq-gic-v3.c
··· 2042 2042 vgic_set_kvm_info(&gic_v3_kvm_info); 2043 2043 } 2044 2044 2045 + static void gic_request_region(resource_size_t base, resource_size_t size, 2046 + const char *name) 2047 + { 2048 + if (!request_mem_region(base, size, name)) 2049 + pr_warn_once(FW_BUG "%s region %pa has overlapping address\n", 2050 + name, &base); 2051 + } 2052 + 2053 + static void __iomem *gic_of_iomap(struct device_node *node, int idx, 2054 + const char *name, struct resource *res) 2055 + { 2056 + void __iomem *base; 2057 + int ret; 2058 + 2059 + ret = of_address_to_resource(node, idx, res); 2060 + if (ret) 2061 + return IOMEM_ERR_PTR(ret); 2062 + 2063 + gic_request_region(res->start, resource_size(res), name); 2064 + base = of_iomap(node, idx); 2065 + 2066 + return base ?: IOMEM_ERR_PTR(-ENOMEM); 2067 + } 2068 + 2045 2069 static int __init gic_of_init(struct device_node *node, struct device_node *parent) 2046 2070 { 2047 2071 void __iomem *dist_base; 2048 2072 struct redist_region *rdist_regs; 2073 + struct resource res; 2049 2074 u64 redist_stride; 2050 2075 u32 nr_redist_regions; 2051 2076 int err, i; 2052 2077 2053 - dist_base = of_io_request_and_map(node, 0, "GICD"); 2078 + dist_base = gic_of_iomap(node, 0, "GICD", &res); 2054 2079 if (IS_ERR(dist_base)) { 2055 2080 pr_err("%pOF: unable to map gic dist registers\n", node); 2056 2081 return PTR_ERR(dist_base); ··· 2098 2073 } 2099 2074 2100 2075 for (i = 0; i < nr_redist_regions; i++) { 2101 - struct resource res; 2102 - int ret; 2103 - 2104 - ret = of_address_to_resource(node, 1 + i, &res); 2105 - rdist_regs[i].redist_base = of_io_request_and_map(node, 1 + i, "GICR"); 2106 - if (ret || IS_ERR(rdist_regs[i].redist_base)) { 2076 + rdist_regs[i].redist_base = gic_of_iomap(node, 1 + i, "GICR", &res); 2077 + if (IS_ERR(rdist_regs[i].redist_base)) { 2107 2078 pr_err("%pOF: couldn't map region %d\n", node, i); 2108 2079 err = -ENODEV; 2109 2080 goto out_unmap_rdist; ··· 2172 2151 pr_err("Couldn't map GICR region @%llx\n", redist->base_address); 2173 2152 return -ENOMEM; 2174 2153 } 2175 - request_mem_region(redist->base_address, redist->length, "GICR"); 2154 + gic_request_region(redist->base_address, redist->length, "GICR"); 2176 2155 2177 2156 gic_acpi_register_redist(redist->base_address, redist_base); 2178 2157 return 0; ··· 2195 2174 redist_base = ioremap(gicc->gicr_base_address, size); 2196 2175 if (!redist_base) 2197 2176 return -ENOMEM; 2198 - request_mem_region(gicc->gicr_base_address, size, "GICR"); 2177 + gic_request_region(gicc->gicr_base_address, size, "GICR"); 2199 2178 2200 2179 gic_acpi_register_redist(gicc->gicr_base_address, redist_base); 2201 2180 return 0; ··· 2397 2376 pr_err("Unable to map GICD registers\n"); 2398 2377 return -ENOMEM; 2399 2378 } 2400 - request_mem_region(dist->base_address, ACPI_GICV3_DIST_MEM_SIZE, "GICD"); 2379 + gic_request_region(dist->base_address, ACPI_GICV3_DIST_MEM_SIZE, "GICD"); 2401 2380 2402 2381 err = gic_validate_dist_version(acpi_data.dist_base); 2403 2382 if (err) {