]> www.infradead.org Git - users/jedix/linux-maple.git/commit
qede: Fix Tx timeout due to xmit_more
authorYuval Mintz <Yuval.Mintz@qlogic.com>
Tue, 16 Aug 2016 15:40:18 +0000 (18:40 +0300)
committerChuck Anderson <chuck.anderson@oracle.com>
Mon, 6 Mar 2017 04:59:35 +0000 (20:59 -0800)
commit6f2c154f0d03eaa076546c7ae385704f37fb3e22
tree4c02febe23e274ba41d55b75b4a7abc6201ee7db
parent4bf0db80242b72b1f328fd3457c49c774c1b3f9d
qede: Fix Tx timeout due to xmit_more

Orabug: 25477939

Driver uses netif_tx_queue_stopped() to make sure the xmit_more
indication will be honored, but that only checks for DRV_XOFF.

At the same time, it's possible that during transmission the DQL will
close the transmission queue with STACK_XOFF indication.
In re-configuration flows, when the threshold is relatively low, it's
possible that the device has no pending tranmissions, and during
tranmission the driver would miss doorbelling the HW.
Since there are no pending transmission, there will never be a Tx
completion [and thus the DQL would not remove the STACK_XOFF indication],
eventually causing the Tx queue to timeout.

While we're at it - also doorbell in case driver has to close the
transmission queue on its own [although this one is less important -
if the ring is full, we're bound to receive completion eventually,
which means the doorbell would only be postponed and not indefinetly
blocked].

Fixes: 312e06761c99 ("qede: Utilize xmit_more")
Signed-off-by: Yuval Mintz <Yuval.Mintz@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit 039a392733600d35c80d406a98151b2a9a0a74b4)
Signed-off-by: Brian Maly <brian.maly@oracle.com>
drivers/net/ethernet/qlogic/qede/qede_main.c