]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: usb: lan78xx: Add error handling to lan78xx_irq_bus_sync_unlock
authorOleksij Rempel <o.rempel@pengutronix.de>
Wed, 4 Dec 2024 08:41:41 +0000 (09:41 +0100)
committerJakub Kicinski <kuba@kernel.org>
Sat, 7 Dec 2024 01:53:08 +0000 (17:53 -0800)
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>
drivers/net/usb/lan78xx.c

index 2d16c1fc850e93c7121a4a5e06fe3da4553103d0..2ae9565b5044fcef192cd44c8080dc7d9e4d6da6 100644 (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);
 }