On Thu Mar 5 11:39:16 2026 +0100, Johan Hovold wrote:
> Driver core holds a reference to the USB interface and its parent USB
> device while the interface is bound to a driver and there is no need to
> take additional references unless the structures are needed after
> disconnect.
> 
> Drop the redundant device references to reduce cargo culting, make it
> easier to spot drivers where extra references are needed, and reduce the
> risk of memory leaks when drivers fail to release them.
> 
> Signed-off-by: Johan Hovold <[email protected]>
> Signed-off-by: Sean Young <[email protected]>
> Signed-off-by: Hans Verkuil <[email protected]>

Patch committed.

Thanks,
Hans Verkuil

 drivers/media/rc/imon.c | 13 +++----------
 1 file changed, 3 insertions(+), 10 deletions(-)

---

diff --git a/drivers/media/rc/imon.c b/drivers/media/rc/imon.c
index 310c9fc9ae91..9bb27ba8240f 100644
--- a/drivers/media/rc/imon.c
+++ b/drivers/media/rc/imon.c
@@ -2250,7 +2250,7 @@ static struct imon_context *imon_init_intf0(struct 
usb_interface *intf,
        mutex_lock(&ictx->lock);
 
        ictx->dev = dev;
-       ictx->usbdev_intf0 = usb_get_dev(interface_to_usbdev(intf));
+       ictx->usbdev_intf0 = interface_to_usbdev(intf);
        ictx->rx_urb_intf0 = rx_urb;
        ictx->tx_urb = tx_urb;
        ictx->rf_device = false;
@@ -2308,7 +2308,6 @@ idev_setup_failed:
        usb_kill_urb(ictx->rx_urb_intf0);
 urb_submit_failed:
 find_endpoint_failed:
-       usb_put_dev(ictx->usbdev_intf0);
        mutex_unlock(&ictx->lock);
        usb_free_urb(tx_urb);
 tx_urb_alloc_failed:
@@ -2338,7 +2337,7 @@ static struct imon_context *imon_init_intf1(struct 
usb_interface *intf,
                timer_setup(&ictx->ttimer, imon_touch_display_timeout, 0);
        }
 
-       ictx->usbdev_intf1 = usb_get_dev(interface_to_usbdev(intf));
+       ictx->usbdev_intf1 = interface_to_usbdev(intf);
        ictx->rx_urb_intf1 = rx_urb;
 
        ret = -ENODEV;
@@ -2377,7 +2376,6 @@ urb_submit_failed:
                input_unregister_device(ictx->touch);
 touch_setup_failed:
 find_endpoint_failed:
-       usb_put_dev(ictx->usbdev_intf1);
        ictx->usbdev_intf1 = NULL;
        mutex_unlock(&ictx->lock);
        usb_free_urb(rx_urb);
@@ -2426,7 +2424,7 @@ static int imon_probe(struct usb_interface *interface,
        struct imon_context *ictx = NULL;
        u16 vendor, product;
 
-       usbdev     = usb_get_dev(interface_to_usbdev(interface));
+       usbdev     = interface_to_usbdev(interface);
        iface_desc = interface->cur_altsetting;
        ifnum      = iface_desc->desc.bInterfaceNumber;
        vendor     = le16_to_cpu(usbdev->descriptor.idVendor);
@@ -2495,12 +2493,9 @@ static int imon_probe(struct usb_interface *interface,
                 vendor, product, ifnum,
                 usbdev->bus->busnum, usbdev->devnum);
 
-       usb_put_dev(usbdev);
-
        return 0;
 
 fail:
-       usb_put_dev(usbdev);
        dev_err(dev, "unable to register, err %d\n", ret);
 
        return ret;
@@ -2551,7 +2546,6 @@ static void imon_disconnect(struct usb_interface 
*interface)
                        else if (ictx->display_type == IMON_DISPLAY_TYPE_VFD)
                                usb_deregister_dev(interface, &imon_vfd_class);
                }
-               usb_put_dev(ictx->usbdev_intf0);
        } else {
                ictx->dev_present_intf1 = false;
                usb_kill_urb(ictx->rx_urb_intf1);
@@ -2559,7 +2553,6 @@ static void imon_disconnect(struct usb_interface 
*interface)
                        timer_delete_sync(&ictx->ttimer);
                        input_unregister_device(ictx->touch);
                }
-               usb_put_dev(ictx->usbdev_intf1);
        }
 
        if (refcount_dec_and_test(&ictx->users))
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to