|
@@ -1105,17 +1105,36 @@ static int i40e_set_coalesce(struct net_device *netdev,
|
|
|
if (ec->tx_max_coalesced_frames_irq || ec->rx_max_coalesced_frames_irq)
|
|
|
vsi->work_limit = ec->tx_max_coalesced_frames_irq;
|
|
|
|
|
|
+ vector = vsi->base_vector;
|
|
|
if ((ec->rx_coalesce_usecs >= (I40E_MIN_ITR << 1)) &&
|
|
|
- (ec->rx_coalesce_usecs <= (I40E_MAX_ITR << 1)))
|
|
|
+ (ec->rx_coalesce_usecs <= (I40E_MAX_ITR << 1))) {
|
|
|
vsi->rx_itr_setting = ec->rx_coalesce_usecs;
|
|
|
- else
|
|
|
+ } else if (ec->rx_coalesce_usecs == 0) {
|
|
|
+ vsi->rx_itr_setting = ec->rx_coalesce_usecs;
|
|
|
+ i40e_irq_dynamic_disable(vsi, vector);
|
|
|
+ if (ec->use_adaptive_rx_coalesce)
|
|
|
+ netif_info(pf, drv, netdev,
|
|
|
+ "Rx-secs=0, need to disable adaptive-Rx for a complete disable\n");
|
|
|
+ } else {
|
|
|
+ netif_info(pf, drv, netdev,
|
|
|
+ "Invalid value, Rx-usecs range is 0, 8-8160\n");
|
|
|
return -EINVAL;
|
|
|
+ }
|
|
|
|
|
|
if ((ec->tx_coalesce_usecs >= (I40E_MIN_ITR << 1)) &&
|
|
|
- (ec->tx_coalesce_usecs <= (I40E_MAX_ITR << 1)))
|
|
|
+ (ec->tx_coalesce_usecs <= (I40E_MAX_ITR << 1))) {
|
|
|
vsi->tx_itr_setting = ec->tx_coalesce_usecs;
|
|
|
- else
|
|
|
+ } else if (ec->tx_coalesce_usecs == 0) {
|
|
|
+ vsi->tx_itr_setting = ec->tx_coalesce_usecs;
|
|
|
+ i40e_irq_dynamic_disable(vsi, vector);
|
|
|
+ if (ec->use_adaptive_tx_coalesce)
|
|
|
+ netif_info(pf, drv, netdev,
|
|
|
+ "Tx-secs=0, need to disable adaptive-Tx for a complete disable\n");
|
|
|
+ } else {
|
|
|
+ netif_info(pf, drv, netdev,
|
|
|
+ "Invalid value, Tx-usecs range is 0, 8-8160\n");
|
|
|
return -EINVAL;
|
|
|
+ }
|
|
|
|
|
|
if (ec->use_adaptive_rx_coalesce)
|
|
|
vsi->rx_itr_setting |= I40E_ITR_DYNAMIC;
|
|
@@ -1127,7 +1146,6 @@ static int i40e_set_coalesce(struct net_device *netdev,
|
|
|
else
|
|
|
vsi->tx_itr_setting &= ~I40E_ITR_DYNAMIC;
|
|
|
|
|
|
- vector = vsi->base_vector;
|
|
|
for (i = 0; i < vsi->num_q_vectors; i++, vector++) {
|
|
|
q_vector = vsi->q_vectors[i];
|
|
|
q_vector->rx.itr = ITR_TO_REG(vsi->rx_itr_setting);
|