Commit 0da202e6 authored by Oleksij Rempel's avatar Oleksij Rempel Committed by Jakub Kicinski
Browse files

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: default avatarOleksij Rempel <o.rempel@pengutronix.de>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Link: https://patch.msgid.link/20241204084142.1152696-10-o.rempel@pengutronix.de


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 65520a70
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -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);
}