Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4d95987a authored by Chris Brandt's avatar Chris Brandt Committed by Greg Kroah-Hartman
Browse files

serial: sh-sci: Do not free irqs that have already been freed



Since IRQs might be muxed on some parts, we need to pay attention when we
are freeing them.
Otherwise we get the ugly WARNING "Trying to free already-free IRQ 20".

Fixes: 628c534a ("serial: sh-sci: Improve support for separate TEI and DRI interrupts")
Cc: stable <stable@vger.kernel.org>
Signed-off-by: default avatarChris Brandt <chris.brandt@renesas.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 824d17c5
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -1921,7 +1921,7 @@ static int sci_request_irq(struct sci_port *port)

static void sci_free_irq(struct sci_port *port)
{
	int i;
	int i, j;

	/*
	 * Intentionally in reverse order so we iterate over the muxed
@@ -1937,6 +1937,13 @@ static void sci_free_irq(struct sci_port *port)
		if (unlikely(irq < 0))
			continue;

		/* Check if already freed (irq was muxed) */
		for (j = 0; j < i; j++)
			if (port->irqs[j] == irq)
				j = i + 1;
		if (j > i)
			continue;

		free_irq(port->irqs[i], port);
		kfree(port->irqstr[i]);