drivers/irqchip/irq-apple-aic.c:849 aic_of_ic_init() warn: 'regs' not released on lines: 803.

From: Dan Carpenter
Date: Sat Jul 03 2021 - 08:52:07 EST


tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 35e43538af8fd2cb39d58caca1134a87db173f75
commit: 76cde26394114f6af2710c6b2ad6854f1e8ee859 irqchip/apple-aic: Add support for the Apple Interrupt Controller
config: arm64-randconfig-m031-20210702 (attached as .config)
compiler: aarch64-linux-gcc (GCC) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>
Reported-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>

smatch warnings:
drivers/irqchip/irq-apple-aic.c:849 aic_of_ic_init() warn: 'regs' not released on lines: 803.

vim +/regs +849 drivers/irqchip/irq-apple-aic.c

76cde26394114f Hector Martin 2021-01-21 790 static int __init aic_of_ic_init(struct device_node *node, struct device_node *parent)
76cde26394114f Hector Martin 2021-01-21 791 {
76cde26394114f Hector Martin 2021-01-21 792 int i;
76cde26394114f Hector Martin 2021-01-21 793 void __iomem *regs;
76cde26394114f Hector Martin 2021-01-21 794 u32 info;
76cde26394114f Hector Martin 2021-01-21 795 struct aic_irq_chip *irqc;
76cde26394114f Hector Martin 2021-01-21 796
76cde26394114f Hector Martin 2021-01-21 797 regs = of_iomap(node, 0);
76cde26394114f Hector Martin 2021-01-21 798 if (WARN_ON(!regs))
76cde26394114f Hector Martin 2021-01-21 799 return -EIO;
76cde26394114f Hector Martin 2021-01-21 800
76cde26394114f Hector Martin 2021-01-21 801 irqc = kzalloc(sizeof(*irqc), GFP_KERNEL);
76cde26394114f Hector Martin 2021-01-21 802 if (!irqc)
76cde26394114f Hector Martin 2021-01-21 803 return -ENOMEM;

iounmap() before returning.

76cde26394114f Hector Martin 2021-01-21 804
76cde26394114f Hector Martin 2021-01-21 805 aic_irqc = irqc;
76cde26394114f Hector Martin 2021-01-21 806 irqc->base = regs;
76cde26394114f Hector Martin 2021-01-21 807
76cde26394114f Hector Martin 2021-01-21 808 info = aic_ic_read(irqc, AIC_INFO);
76cde26394114f Hector Martin 2021-01-21 809 irqc->nr_hw = FIELD_GET(AIC_INFO_NR_HW, info);
76cde26394114f Hector Martin 2021-01-21 810
76cde26394114f Hector Martin 2021-01-21 811 irqc->hw_domain = irq_domain_create_linear(of_node_to_fwnode(node),
76cde26394114f Hector Martin 2021-01-21 812 irqc->nr_hw + AIC_NR_FIQ,
76cde26394114f Hector Martin 2021-01-21 813 &aic_irq_domain_ops, irqc);
76cde26394114f Hector Martin 2021-01-21 814 if (WARN_ON(!irqc->hw_domain)) {
76cde26394114f Hector Martin 2021-01-21 815 iounmap(irqc->base);
76cde26394114f Hector Martin 2021-01-21 816 kfree(irqc);
76cde26394114f Hector Martin 2021-01-21 817 return -ENODEV;
76cde26394114f Hector Martin 2021-01-21 818 }
76cde26394114f Hector Martin 2021-01-21 819
76cde26394114f Hector Martin 2021-01-21 820 irq_domain_update_bus_token(irqc->hw_domain, DOMAIN_BUS_WIRED);
76cde26394114f Hector Martin 2021-01-21 821
76cde26394114f Hector Martin 2021-01-21 822 if (aic_init_smp(irqc, node)) {
76cde26394114f Hector Martin 2021-01-21 823 irq_domain_remove(irqc->hw_domain);
76cde26394114f Hector Martin 2021-01-21 824 iounmap(irqc->base);
76cde26394114f Hector Martin 2021-01-21 825 kfree(irqc);
76cde26394114f Hector Martin 2021-01-21 826 return -ENODEV;
76cde26394114f Hector Martin 2021-01-21 827 }
76cde26394114f Hector Martin 2021-01-21 828
76cde26394114f Hector Martin 2021-01-21 829 set_handle_irq(aic_handle_irq);
76cde26394114f Hector Martin 2021-01-21 830 set_handle_fiq(aic_handle_fiq);
76cde26394114f Hector Martin 2021-01-21 831
76cde26394114f Hector Martin 2021-01-21 832 for (i = 0; i < BITS_TO_U32(irqc->nr_hw); i++)
76cde26394114f Hector Martin 2021-01-21 833 aic_ic_write(irqc, AIC_MASK_SET + i * 4, U32_MAX);
76cde26394114f Hector Martin 2021-01-21 834 for (i = 0; i < BITS_TO_U32(irqc->nr_hw); i++)
76cde26394114f Hector Martin 2021-01-21 835 aic_ic_write(irqc, AIC_SW_CLR + i * 4, U32_MAX);
76cde26394114f Hector Martin 2021-01-21 836 for (i = 0; i < irqc->nr_hw; i++)
76cde26394114f Hector Martin 2021-01-21 837 aic_ic_write(irqc, AIC_TARGET_CPU + i * 4, 1);
76cde26394114f Hector Martin 2021-01-21 838
76cde26394114f Hector Martin 2021-01-21 839 if (!is_kernel_in_hyp_mode())
76cde26394114f Hector Martin 2021-01-21 840 pr_info("Kernel running in EL1, mapping interrupts");
76cde26394114f Hector Martin 2021-01-21 841
76cde26394114f Hector Martin 2021-01-21 842 cpuhp_setup_state(CPUHP_AP_IRQ_APPLE_AIC_STARTING,
76cde26394114f Hector Martin 2021-01-21 843 "irqchip/apple-aic/ipi:starting",
76cde26394114f Hector Martin 2021-01-21 844 aic_init_cpu, NULL);
76cde26394114f Hector Martin 2021-01-21 845
76cde26394114f Hector Martin 2021-01-21 846 pr_info("Initialized with %d IRQs, %d FIQs, %d vIPIs\n",
76cde26394114f Hector Martin 2021-01-21 847 irqc->nr_hw, AIC_NR_FIQ, AIC_NR_SWIPI);
76cde26394114f Hector Martin 2021-01-21 848
76cde26394114f Hector Martin 2021-01-21 @849 return 0;
76cde26394114f Hector Martin 2021-01-21 850 }

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx