gianfar: Fix reported number of sent bytes to BQL
authorClaudiu Manoil <claudiu.manoil@freescale.com>
Fri, 30 Aug 2013 12:01:15 +0000 (15:01 +0300)
committerDavid S. Miller <davem@davemloft.net>
Wed, 4 Sep 2013 02:14:28 +0000 (22:14 -0400)
commit50ad076ba43d88956707cd9d6849715de5e282bf
treea6f58ef984281520b61b9ebd2bda53aa624f8a2e
parent7a163bfb7ce50895bbe67300ea610d31b9c09230
gianfar: Fix reported number of sent bytes to BQL

Fix the amount of sent bytes reported to BQL by reporting the
number of bytes on wire in the xmit routine, and recording that
value for each skb in order to be correctly confirmed on Tx
confirmation cleanup.

Reporting skb->len to BQL just before exiting xmit is not correct
due to possible insertions of TOE block and alignment bytes in the
skb->data, which are being stripped off by the controller before
transmission on wire.  This led to mismatch of (incorrectly)
reported bytes to BQL b/w xmit and Tx confirmation, resulting in
Tx timeout firing, for the h/w tx timestamping acceleration case.

There's no easy way to obtain the number of bytes on wire in the Tx
confirmation routine, so skb->cb is used to convey that information
from xmit to Tx confirmation, for now (as proposed by Eric). Revived
the currently unused GFAR_CB() construct for that purpose.

Signed-off-by: Claudiu Manoil <claudiu.manoil@freescale.com>
Cc: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/freescale/gianfar.c
drivers/net/ethernet/freescale/gianfar.h