Message ID | 1328774114-28894-1-git-send-email-peppe.cavallaro@st.com |
---|---|
State | Changes Requested, archived |
Delegated to: | David Miller |
Headers | show |
From: Giuseppe CAVALLARO <peppe.cavallaro@st.com> Date: Thu, 9 Feb 2012 08:55:13 +0100 > From: Francesco Virlinzi <francesco.virlinzi@st.com> > > In case of we use an external Wake-Up IRQ line > (priv->wol_irq != dev->irq) we need to invoke the > request_irq. > > Signed-off-by: Francesco Virlinzi <francesco.virlinzi@st.com> > Signed-off-by: Giuseppe Cavallaro <peppe.cavallaro@st.com> You never free the IRQ in the driver close path, so it leaks. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 2/9/2012 8:02 PM, David Miller wrote: > From: Giuseppe CAVALLARO <peppe.cavallaro@st.com> > Date: Thu, 9 Feb 2012 08:55:13 +0100 > >> From: Francesco Virlinzi <francesco.virlinzi@st.com> >> >> In case of we use an external Wake-Up IRQ line >> (priv->wol_irq != dev->irq) we need to invoke the >> request_irq. >> >> Signed-off-by: Francesco Virlinzi <francesco.virlinzi@st.com> >> Signed-off-by: Giuseppe Cavallaro <peppe.cavallaro@st.com> > > You never free the IRQ in the driver close path, so it leaks. Yes you are right. I'm reviewing the patch and send it again. Thx peppe > -- > To unsubscribe from this list: send the line "unsubscribe netdev" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index 96fa2da..36ee77f 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c @@ -1047,6 +1047,17 @@ static int stmmac_open(struct net_device *dev) goto open_error; } + /* Request the Wake IRQ in case of another line is used for WoL */ + if (priv->wol_irq != dev->irq) { + ret = request_irq(priv->wol_irq, stmmac_interrupt, + IRQF_SHARED, dev->name, dev); + if (unlikely(ret < 0)) { + pr_err("%s: ERROR: allocating the ext WoL IRQ %d " + "(error: %d)\n", __func__, priv->wol_irq, ret); + goto open_error_wolirq; + } + } + /* Enable the MAC Rx/Tx */ stmmac_set_mac(priv->ioaddr, true); @@ -1087,6 +1098,9 @@ static int stmmac_open(struct net_device *dev) return 0; +open_error_wolirq: + free_irq(dev->irq, dev); + open_error: #ifdef CONFIG_STMMAC_TIMER kfree(priv->tm);