Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ravb: Add missing free_irq() calls to ravb_close()

When reopening the network device on ra7795/salvator-x, e.g. after a
DHCP timeout:

IP-Config: Reopening network devices...
genirq: Flags mismatch irq 139. 00000000 (eth0:ch0:rx_be) vs. 00000000 (ravb e6800000.ethernet eth0: cannot request IRQ eth0:ch0:rx_be
IP-Config: Failed to open eth0
IP-Config: No network devices available

The "mismatch" is due to requesting an IRQ that is already in use,
while IRQF_PROBE_SHARED wasn't set.

However, the real cause is that ravb_close() doesn't release any of the
R-Car Gen3-specific secondary IRQs.

Add the missing free_irq() calls to fix this.

Fixes: f51bdc236b6c5835 ("ravb: Add dma queue interrupt support")
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Acked-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Geert Uytterhoeven and committed by
David S. Miller
ccf92824 f82731b4

+6 -1
+6 -1
drivers/net/ethernet/renesas/ravb_main.c
··· 1667 1667 priv->phydev = NULL; 1668 1668 } 1669 1669 1670 - if (priv->chip_id == RCAR_GEN3) 1670 + if (priv->chip_id != RCAR_GEN2) { 1671 + free_irq(priv->tx_irqs[RAVB_NC], ndev); 1672 + free_irq(priv->rx_irqs[RAVB_NC], ndev); 1673 + free_irq(priv->tx_irqs[RAVB_BE], ndev); 1674 + free_irq(priv->rx_irqs[RAVB_BE], ndev); 1671 1675 free_irq(priv->emac_irq, ndev); 1676 + } 1672 1677 free_irq(ndev->irq, ndev); 1673 1678 1674 1679 napi_disable(&priv->napi[RAVB_NC]);