diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c index e027229c1955..07f61ee76ca6 100644 --- a/drivers/net/can/m_can/m_can.c +++ b/drivers/net/can/m_can/m_can.c @@ -1840,7 +1840,7 @@ static int m_can_open(struct net_device *dev) /* start the m_can controller */ err = m_can_start(dev); if (err) - goto exit_irq_fail; + goto exit_start_fail; can_led_event(dev, CAN_LED_EVENT_OPEN); @@ -1851,6 +1851,9 @@ static int m_can_open(struct net_device *dev) return 0; +exit_start_fail: + if (cdev->is_peripheral || dev->irq) + free_irq(dev->irq, dev); exit_irq_fail: if (cdev->is_peripheral) destroy_workqueue(cdev->tx_wq);