On Fri, May 15, 2020 at 08:13:30PM +0200, Michal Kubecek wrote: [...] > > +int hinic_set_channels(struct net_device *netdev, > > + struct ethtool_channels *channels) > > +{ > > + struct hinic_dev *nic_dev = netdev_priv(netdev); > > + unsigned int count = channels->combined_count; > > + int err; > > + > > + if (!count) { > > + netif_err(nic_dev, drv, netdev, > > + "Unsupported combined_count: 0\n"); > > + return -EINVAL; > > + } > > + > > + if (channels->tx_count || channels->rx_count || channels->other_count) { > > + netif_err(nic_dev, drv, netdev, > > + "Setting rx/tx/other count not supported\n"); > > + return -EINVAL; > > + } > > With max_* reported as 0, these will be caught in ethnl_set_channels() > or ethtool_set_channels(). > > > + if (!(nic_dev->flags & HINIC_RSS_ENABLE)) { > > + netif_err(nic_dev, drv, netdev, > > + "This function doesn't support RSS, only support 1 > > queue pair\n"); > > + return -EOPNOTSUPP; > > + } > > I'm not sure if the request should fail even if requested count is > actually 1.
Thinking about it again, as long as you report max_combined=1 in this case, anything higher than 1 would be rejected by general ethtool code and 0 is rejected by the first check above so that you can in fact only get here for combined_count=1 - and only for ioctl requests as netlink code path won't call the ethtool_ops callback if there is no change. Michal