net: usb: lan78xx: Add error handling to lan78xx_irq_bus_sync_unlock

Update `lan78xx_irq_bus_sync_unlock` to handle errors in register
read/write operations. If an error occurs, log it and exit the function
appropriately.  This ensures proper handling of failures during IRQ
synchronization.

Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Link: https://patch.msgid.link/20241204084142.1152696-10-o.rempel@pengutronix.de
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Oleksij Rempel 2024-12-04 09:41:41 +01:00 committed by Jakub Kicinski
parent 65520a70cb
commit 0da202e6a5

View File

@ -2382,13 +2382,22 @@ static void lan78xx_irq_bus_sync_unlock(struct irq_data *irqd)
struct lan78xx_net *dev =
container_of(data, struct lan78xx_net, domain_data);
u32 buf;
int ret;
/* call register access here because irq_bus_lock & irq_bus_sync_unlock
* are only two callbacks executed in non-atomic contex.
*/
lan78xx_read_reg(dev, INT_EP_CTL, &buf);
ret = lan78xx_read_reg(dev, INT_EP_CTL, &buf);
if (ret < 0)
goto irq_bus_sync_unlock;
if (buf != data->irqenable)
lan78xx_write_reg(dev, INT_EP_CTL, data->irqenable);
ret = lan78xx_write_reg(dev, INT_EP_CTL, data->irqenable);
irq_bus_sync_unlock:
if (ret < 0)
netdev_err(dev->net, "Failed to sync IRQ enable register: %pe\n",
ERR_PTR(ret));
mutex_unlock(&data->irq_lock);
}