ibmvnic: Zero used TX descriptor counter on reset
authorThomas Falcon <tlfalcon@linux.vnet.ibm.com>
Fri, 6 Apr 2018 23:37:03 +0000 (18:37 -0500)
committerDavid S. Miller <davem@davemloft.net>
Sun, 8 Apr 2018 16:39:47 +0000 (12:39 -0400)
The counter that tracks used TX descriptors pending completion
needs to be zeroed as part of a device reset. This change fixes
a bug causing transmit queues to be stopped unnecessarily and in
some cases a transmit queue stall and timeout reset. If the counter
is not reset, the remaining descriptors will not be "removed",
effectively reducing queue capacity. If the queue is over half full,
it will cause the queue to stall if stopped.

Signed-off-by: Thomas Falcon <tlfalcon@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/ibm/ibmvnic.c

index 58e01432c2aaf5d9ea4238572fc517ea6f9166a0..153a868c5135a421803b1eeebd1a72c3a419c800 100644 (file)
@@ -2361,6 +2361,7 @@ static int reset_one_sub_crq_queue(struct ibmvnic_adapter *adapter,
        }
 
        memset(scrq->msgs, 0, 4 * PAGE_SIZE);
+       atomic_set(&scrq->used, 0);
        scrq->cur = 0;
 
        rc = h_reg_sub_crq(adapter->vdev->unit_address, scrq->msg_token,