Commit 6eabf656 authored by Charlie Jenkins's avatar Charlie Jenkins Committed by Thomas Gleixner
Browse files

irqchip/sifive-plic: Return error code on failure



Set error to -ENOMEM if kcalloc() fails or if irq_domain_add_linear()
fails inside of plic_probe() instead of returning 0.

Fixes: 4d936f10 ("irqchip/sifive-plic: Probe plic driver early for Allwinner D1 platform")
Reported-by: default avatarkernel test robot <lkp@intel.com>
Reported-by: default avatarDan Carpenter <dan.carpenter@linaro.org>
Signed-off-by: default avatarCharlie Jenkins <charlie@rivosinc.com>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Reviewed-by: default avatarAnup Patel <anup@brainfault.org>
Reviewed-by: default avatarAlexandre 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/
parent 4a1361e9
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -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 @@ static int plic_probe(struct fwnode_handle *fwnode)

	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