[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20231025162824.GK57304@kernel.org>
Date: Wed, 25 Oct 2023 17:28:24 +0100
From: Simon Horman <horms@...nel.org>
To: Douglas Anderson <dianders@...omium.org>
Cc: Jakub Kicinski <kuba@...nel.org>,
Hayes Wang <hayeswang@...ltek.com>,
"David S . Miller" <davem@...emloft.net>,
Edward Hill <ecgh@...omium.org>,
Laura Nao <laura.nao@...labora.com>,
Alan Stern <stern@...land.harvard.edu>,
linux-usb@...r.kernel.org, Grant Grundler <grundler@...omium.org>,
Bjørn Mork <bjorn@...k.no>,
Eric Dumazet <edumazet@...gle.com>,
Paolo Abeni <pabeni@...hat.com>, linux-kernel@...r.kernel.org,
netdev@...r.kernel.org
Subject: Re: [PATCH v5 8/8] r8152: Block future register access if register
access fails
On Fri, Oct 20, 2023 at 02:06:59PM -0700, Douglas Anderson wrote:
...
> @@ -9603,25 +9713,14 @@ static bool rtl8152_supports_lenovo_macpassthru(struct usb_device *udev)
> return 0;
> }
>
> -static int rtl8152_probe(struct usb_interface *intf,
> - const struct usb_device_id *id)
> +static int rtl8152_probe_once(struct usb_interface *intf,
> + const struct usb_device_id *id, u8 version)
> {
> struct usb_device *udev = interface_to_usbdev(intf);
> struct r8152 *tp;
> struct net_device *netdev;
> - u8 version;
> int ret;
>
> - if (intf->cur_altsetting->desc.bInterfaceClass != USB_CLASS_VENDOR_SPEC)
> - return -ENODEV;
> -
> - if (!rtl_check_vendor_ok(intf))
> - return -ENODEV;
> -
> - version = rtl8152_get_version(intf);
> - if (version == RTL_VER_UNKNOWN)
> - return -ENODEV;
> -
> usb_reset_device(udev);
> netdev = alloc_etherdev(sizeof(struct r8152));
> if (!netdev) {
> @@ -9784,10 +9883,20 @@ static int rtl8152_probe(struct usb_interface *intf,
> else
> device_set_wakeup_enable(&udev->dev, false);
>
> + /* If we saw a control transfer error while probing then we may
> + * want to try probe() again. Consider this an error.
> + */
> + if (test_bit(PROBE_SHOULD_RETRY, &tp->flags))
> + goto out2;
Sorry for being a bit slow here, but if this is an error condition,
sould ret be set to an error value?
As flagged by Smatch.
> +
> + set_bit(PROBED_WITH_NO_ERRORS, &tp->flags);
> netif_info(tp, probe, netdev, "%s\n", DRIVER_VERSION);
>
> return 0;
>
> +out2:
> + unregister_netdev(netdev);
> +
> out1:
> tasklet_kill(&tp->tx_tl);
> cancel_delayed_work_sync(&tp->hw_phy_work);
...
Powered by blists - more mailing lists