From: bui duc phuc Propagate the error codes returned by platform_get_irq() and platform_get_irq_optional() instead of converting them to -EINVAL. For the optional WoL IRQ, allow -ENXIO to indicate that the IRQ is not available, but propagate any other error returned by the IRQ lookup. Found by manual code inspection. Signed-off-by: bui duc phuc --- drivers/net/ethernet/broadcom/bcmsysport.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c index 4d06c6ba6641..2acaffccdb08 100644 --- a/drivers/net/ethernet/broadcom/bcmsysport.c +++ b/drivers/net/ethernet/broadcom/bcmsysport.c @@ -2499,14 +2499,22 @@ static int bcm_sysport_probe(struct platform_device *pdev) priv->num_rx_desc_words = params->num_rx_desc_words; priv->irq0 = platform_get_irq(pdev, 0); + if (priv->irq0 < 0) { + ret = priv->irq0; + goto err_free_netdev; + } if (!priv->is_lite) { priv->irq1 = platform_get_irq(pdev, 1); priv->wol_irq = platform_get_irq_optional(pdev, 2); } else { priv->wol_irq = platform_get_irq_optional(pdev, 1); } - if (priv->irq0 <= 0 || (priv->irq1 <= 0 && !priv->is_lite)) { - ret = -EINVAL; + if (priv->irq1 < 0 && !priv->is_lite) { + ret = priv->irq1; + goto err_free_netdev; + } + if (priv->wol_irq < 0 && priv->wol_irq != -ENXIO) { + ret = priv->wol_irq; goto err_free_netdev; } -- 2.43.0