netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Petko Manolov <petko.manolov@konsulko.com>
To: Jakub Kicinski <kuba@kernel.org>
Cc: netdev@vger.kernel.org, paskripkin@gmail.com,
	stable@vger.kernel.org, davem@davemloft.net
Subject: Re: [PATCH] net: usb: pegasus: ignore the return value from set_registers();
Date: Mon, 16 Aug 2021 22:14:47 +0300	[thread overview]
Message-ID: <YRq5JyLbkU8hN/fG@carbon> (raw)
In-Reply-To: <20210816070640.2a7a6f5d@kicinski-fedora-pc1c0hjn.dhcp.thefacebook.com>

On 21-08-16 07:06:40, Jakub Kicinski wrote:
> On Sun, 15 Aug 2021 11:54:55 +0300 Petko Manolov wrote:
> > > > @@ -433,7 +433,7 @@ static int enable_net_traffic(struct net_device *dev, struct usb_device *usb)
> > > >  	data[2] = loopback ? 0x09 : 0x01;
> > > >  
> > > >  	memcpy(pegasus->eth_regs, data, sizeof(data));
> > > > -	ret = set_registers(pegasus, EthCtrl0, 3, data);
> > > > +	set_registers(pegasus, EthCtrl0, 3, data);
> > > >  
> > > >  	if (usb_dev_id[pegasus->dev_index].vendor == VENDOR_LINKSYS ||
> > > >  	    usb_dev_id[pegasus->dev_index].vendor == VENDOR_LINKSYS2 ||  
> > > 
> > > This one is not added by the recent changes as I initially thought, 
> > > the driver has always checked this return value. The recent changes 
> > > did this:
> > > 
> > >         ret = set_registers(pegasus, EthCtrl0, 3, data);
> > >  
> > >         if (usb_dev_id[pegasus->dev_index].vendor == VENDOR_LINKSYS ||
> > >             usb_dev_id[pegasus->dev_index].vendor == VENDOR_LINKSYS2 ||
> > >             usb_dev_id[pegasus->dev_index].vendor == VENDOR_DLINK) {
> > >                 u16 auxmode;
> > > -               read_mii_word(pegasus, 0, 0x1b, &auxmode);
> > > +               ret = read_mii_word(pegasus, 0, 0x1b, &auxmode);
> > > +               if (ret < 0)
> > > +                       goto fail;
> > >                 auxmode |= 4;
> > >                 write_mii_word(pegasus, 0, 0x1b, &auxmode);
> > >         }
> > >  
> > > +       return 0;
> > > +fail:
> > > +       netif_dbg(pegasus, drv, pegasus->net, "%s failed\n", __func__);
> > >         return ret;
> > > }
> > > 
> > > now the return value of set_registeres() is ignored. 
> > > 
> > > Seems like  a better fix would be to bring back the error checking, 
> > > why not?  
> > 
> > Mostly because for this particular adapter checking the read failure makes much
> > more sense than write failure.
> 
> This is not an either-or choice.
> 
> > Checking the return value of set_register(s) is often usless because device's
> > default register values are sane enough to get a working ethernet adapter even
> > without much prodding.  There are exceptions, though, one of them being
> > set_ethernet_addr().
> > 
> > You could read the discussing in the netdev ML, but the essence of it is that
> > set_ethernet_addr() should not give up if set_register(s) fail.  Instead, the
> > driver should assign a valid, even if random, MAC address.
> > 
> > It is much the same situation with enable_net_traffic() - it should continue
> > regardless.  There are two options to resolve this: a) remove the error check
> > altogether; b) do the check and print a debug message.  I prefer a), but i am
> > also not strongly opposed to b).  Comments?
> 
> c) keep propagating the error like the driver used to.

If you carefully read the code, which dates back to at least 2005, you'll see
that on line 436 (v5.14-rc6) 'ret' is assigned with the return value of
set_registers(), but 'ret' is never evaluated and thus not acted upon.

> I don't understand why that's not the most obvious option.

Which part of "this is not a fatal error" you did not understand?

> The driver used to propagate the errors from the set_registers() call in
> enable_net_traffic() since the beginning of the git era. This is _not_ one of
> the error checking that you recently added.

The driver hasn't propagated an error at this particular location in the last 16
years.  So how exactly removing this assignment will make the driver worse than
it is now?

Anyway, i'll add a warn() and be done with it.


		Petko


  reply	other threads:[~2021-08-16 19:14 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-12  8:23 [PATCH] net: usb: pegasus: ignore the return value from set_registers(); Petko Manolov
2021-08-13 23:24 ` Jakub Kicinski
2021-08-14 13:18   ` Pavel Skripkin
2021-08-15  8:54   ` Petko Manolov
2021-08-16 14:06     ` Jakub Kicinski
2021-08-16 19:14       ` Petko Manolov [this message]
2021-08-16 20:18         ` Jakub Kicinski
2021-08-17 14:11           ` Petko Manolov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YRq5JyLbkU8hN/fG@carbon \
    --to=petko.manolov@konsulko.com \
    --cc=davem@davemloft.net \
    --cc=kuba@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=paskripkin@gmail.com \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).