Merge tag 'irq-urgent-2026-01-24' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull irq fixes from Ingo Molnar:

- Fix spurious interrupts during resume in the renesas-rzv2h driver

- Fix a 32+ bit physical memory truncation bug in the gic-v3-its driver

* tag 'irq-urgent-2026-01-24' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
irqchip/gic-v3-its: Avoid truncating memory addresses
irqchip/renesas-rzv2h: Prevent TINT spurious interrupt during resume

+12 -5
+4 -4
drivers/irqchip/irq-gic-v3-its.c
··· 709 709 struct its_cmd_block *cmd, 710 710 struct its_cmd_desc *desc) 711 711 { 712 - unsigned long itt_addr; 712 + phys_addr_t itt_addr; 713 713 u8 size = ilog2(desc->its_mapd_cmd.dev->nr_ites); 714 714 715 715 itt_addr = virt_to_phys(desc->its_mapd_cmd.dev->itt); ··· 879 879 struct its_cmd_desc *desc) 880 880 { 881 881 struct its_vpe *vpe = valid_vpe(its, desc->its_vmapp_cmd.vpe); 882 - unsigned long vpt_addr, vconf_addr; 882 + phys_addr_t vpt_addr, vconf_addr; 883 883 u64 target; 884 884 bool alloc; 885 885 ··· 2477 2477 baser->psz = psz; 2478 2478 tmp = indirect ? GITS_LVL1_ENTRY_SIZE : esz; 2479 2479 2480 - pr_info("ITS@%pa: allocated %d %s @%lx (%s, esz %d, psz %dK, shr %d)\n", 2480 + pr_info("ITS@%pa: allocated %d %s @%llx (%s, esz %d, psz %dK, shr %d)\n", 2481 2481 &its->phys_base, (int)(PAGE_ORDER_TO_SIZE(order) / (int)tmp), 2482 2482 its_base_type_string[type], 2483 - (unsigned long)virt_to_phys(base), 2483 + (u64)virt_to_phys(base), 2484 2484 indirect ? "indirect" : "flat", (int)esz, 2485 2485 psz / SZ_1K, (int)shr >> GITS_BASER_SHAREABILITY_SHIFT); 2486 2486
+8 -1
drivers/irqchip/irq-renesas-rzv2h.c
··· 328 328 u32 titsr, titsr_k, titsel_n, tien; 329 329 struct rzv2h_icu_priv *priv; 330 330 u32 tssr, tssr_k, tssel_n; 331 + u32 titsr_cur, tssr_cur; 331 332 unsigned int hwirq; 332 333 u32 tint, sense; 333 334 int tint_nr; ··· 377 376 guard(raw_spinlock)(&priv->lock); 378 377 379 378 tssr = readl_relaxed(priv->base + priv->info->t_offs + ICU_TSSR(tssr_k)); 379 + titsr = readl_relaxed(priv->base + priv->info->t_offs + ICU_TITSR(titsr_k)); 380 + 381 + tssr_cur = field_get(ICU_TSSR_TSSEL_MASK(tssel_n, priv->info->field_width), tssr); 382 + titsr_cur = field_get(ICU_TITSR_TITSEL_MASK(titsel_n), titsr); 383 + if (tssr_cur == tint && titsr_cur == sense) 384 + return 0; 385 + 380 386 tssr &= ~(ICU_TSSR_TSSEL_MASK(tssel_n, priv->info->field_width) | tien); 381 387 tssr |= ICU_TSSR_TSSEL_PREP(tint, tssel_n, priv->info->field_width); 382 388 383 389 writel_relaxed(tssr, priv->base + priv->info->t_offs + ICU_TSSR(tssr_k)); 384 390 385 - titsr = readl_relaxed(priv->base + priv->info->t_offs + ICU_TITSR(titsr_k)); 386 391 titsr &= ~ICU_TITSR_TITSEL_MASK(titsel_n); 387 392 titsr |= ICU_TITSR_TITSEL_PREP(sense, titsel_n); 388 393