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. I don't understand why that's not the most obvious option. 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.