]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
irqchip/sifive-plic: Return error code on failure
authorCharlie Jenkins <charlie@rivosinc.com>
Tue, 3 Sep 2024 23:36:19 +0000 (16:36 -0700)
committerThomas Gleixner <tglx@linutronix.de>
Wed, 2 Oct 2024 13:15:33 +0000 (15:15 +0200)
Set error to -ENOMEM if kcalloc() fails or if irq_domain_add_linear()
fails inside of plic_probe() instead of returning 0.

Fixes: 4d936f10ff80 ("irqchip/sifive-plic: Probe plic driver early for Allwinner D1 platform")
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
Signed-off-by: Charlie Jenkins <charlie@rivosinc.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Anup Patel <anup@brainfault.org>
Reviewed-by: Alexandre Ghiti <alexghiti@rivosinc.com>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/all/20240903-correct_error_codes_sifive_plic-v1-1-d929b79663a2@rivosinc.com
Closes: https://lore.kernel.org/r/202409031122.yBh8HrxA-lkp@intel.com/
drivers/irqchip/irq-sifive-plic.c

index 2f6ef5c495bdaa4c34a76e1f9575c54a8eade95a..0b730e3057488b44ffe78df3857429993474b72e 100644 (file)
@@ -626,8 +626,10 @@ static int plic_probe(struct fwnode_handle *fwnode)
 
                handler->enable_save = kcalloc(DIV_ROUND_UP(nr_irqs, 32),
                                               sizeof(*handler->enable_save), GFP_KERNEL);
-               if (!handler->enable_save)
+               if (!handler->enable_save) {
+                       error = -ENOMEM;
                        goto fail_cleanup_contexts;
+               }
 done:
                for (hwirq = 1; hwirq <= nr_irqs; hwirq++) {
                        plic_toggle(handler, hwirq, 0);
@@ -639,8 +641,10 @@ done:
 
        priv->irqdomain = irq_domain_create_linear(fwnode, nr_irqs + 1,
                                                   &plic_irqdomain_ops, priv);
-       if (WARN_ON(!priv->irqdomain))
+       if (WARN_ON(!priv->irqdomain)) {
+               error = -ENOMEM;
                goto fail_cleanup_contexts;
+       }
 
        /*
         * We can have multiple PLIC instances so setup global state