>> + if (queue < tx_cnt) { >> + ec->tx_coalesce_usecs = priv->tx_coal_timer[queue]; >> + ec->tx_max_coalesced_frames = priv->tx_coal_frames[queue]; >> + } else { >> + ec->tx_coalesce_usecs = -1; >> + ec->tx_max_coalesced_frames = -1; >> + } >> + >> + if (priv->use_riwt && queue < rx_cnt) { >> + ec->rx_max_coalesced_frames = priv->rx_coal_frames[queue]; >> + ec->rx_coalesce_usecs = stmmac_riwt2usec(priv- >>rx_riwt[queue], >> + priv); >> + } else { >> + ec->rx_max_coalesced_frames = -1; >> + ec->rx_coalesce_usecs = -1; > >Why the use of negative values? why not leave them as 0? The initial logic was to return negative value to unsupported TXQ & RXQ since they are invalid. No preference here. So, we can leave it as all zeros.
> >> } >> >> return 0; >> } >> >> -static int stmmac_set_coalesce(struct net_device *dev, >> +static int stmmac_get_coalesce(struct net_device *dev, >> struct ethtool_coalesce *ec) >> +{ >> + return __stmmac_get_coalesce(dev, ec, -1); >> +} >> + >> +static int stmmac_get_per_queue_coalesce(struct net_device *dev, u32 >queue, >> + struct ethtool_coalesce *ec) >> +{ >> + return __stmmac_get_coalesce(dev, ec, queue); >> +} >> + >> +static int __stmmac_set_coalesce(struct net_device *dev, >> + struct ethtool_coalesce *ec, >> + int queue) >> { >> struct stmmac_priv *priv = netdev_priv(dev); >> - u32 rx_cnt = priv->plat->rx_queues_to_use; >> + bool all_queues = false; >> unsigned int rx_riwt; >> + u32 max_cnt; >> + u32 rx_cnt; >> + u32 tx_cnt; >> + >> + rx_cnt = priv->plat->rx_queues_to_use; >> + tx_cnt = priv->plat->tx_queues_to_use; >> + max_cnt = max(rx_cnt, tx_cnt); >> + >> + if (queue < 0) >> + all_queues = true; >> + else if (queue >= max_cnt) >> + return -EINVAL; >> + >> + /* Check not supported parameters */ >> + if (ec->rx_coalesce_usecs_irq || >> + ec->rx_max_coalesced_frames_irq || ec->tx_coalesce_usecs_irq || >> + ec->use_adaptive_rx_coalesce || ec->use_adaptive_tx_coalesce || >> + ec->pkt_rate_low || ec->rx_coalesce_usecs_low || >> + ec->rx_max_coalesced_frames_low || ec->tx_coalesce_usecs_high || >> + ec->tx_max_coalesced_frames_low || ec->pkt_rate_high || >> + ec->tx_coalesce_usecs_low || ec->rx_coalesce_usecs_high || >> + ec->rx_max_coalesced_frames_high || >> + ec->tx_max_coalesced_frames_irq || >> + ec->stats_block_coalesce_usecs || >> + ec->tx_max_coalesced_frames_high || ec->rate_sample_interval) >> + return -EOPNOTSUPP; > >This shouldn't be needed now that supporter types are expressed in >dev->ethtool_ops->supported_coalesce_params, no? Wil fix this. Thanks for pointing out.