mirror of
https://github.com/torvalds/linux.git
synced 2026-06-07 14:04:54 +02:00
net: bcmgenet: hide status block before TX timestamping
[ Upstream commitacac0541d1] The hardware checksum offloading requires use of a transmit status block inserted before the outgoing frame data, this was updated in '9a9ba2a4aaaa ("net: bcmgenet: always enable status blocks")' However, skb_tx_timestamp() assumes that it is passed a raw frame and PTP parsing chokes on this status block. Fix this by calling __skb_pull(), which hides the TSB before calling skb_tx_timestamp(), so an outgoing PTP packet is parsed correctly. As the data in the skb has already been set up for DMA, and the dma_unmap_* calls use a separately stored address, there is no no effective change in the data transmission. Signed-off-by: Jonathan Lemon <jonathan.lemon@gmail.com> Acked-by: Florian Fainelli <f.fainelli@gmail.com> Link: https://lore.kernel.org/r/20220424165307.591145-1-jonathan.lemon@gmail.com Fixes:d03825fba4("net: bcmgenet: add skb_tx_timestamp call") Signed-off-by: Paolo Abeni <pabeni@redhat.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
ee71b47da5
commit
e974c730f0
|
|
@ -1987,6 +1987,11 @@ static struct sk_buff *bcmgenet_add_tsb(struct net_device *dev,
|
||||||
return skb;
|
return skb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void bcmgenet_hide_tsb(struct sk_buff *skb)
|
||||||
|
{
|
||||||
|
__skb_pull(skb, sizeof(struct status_64));
|
||||||
|
}
|
||||||
|
|
||||||
static netdev_tx_t bcmgenet_xmit(struct sk_buff *skb, struct net_device *dev)
|
static netdev_tx_t bcmgenet_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct bcmgenet_priv *priv = netdev_priv(dev);
|
struct bcmgenet_priv *priv = netdev_priv(dev);
|
||||||
|
|
@ -2093,6 +2098,8 @@ static netdev_tx_t bcmgenet_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
GENET_CB(skb)->last_cb = tx_cb_ptr;
|
GENET_CB(skb)->last_cb = tx_cb_ptr;
|
||||||
|
|
||||||
|
bcmgenet_hide_tsb(skb);
|
||||||
skb_tx_timestamp(skb);
|
skb_tx_timestamp(skb);
|
||||||
|
|
||||||
/* Decrement total BD count and advance our write pointer */
|
/* Decrement total BD count and advance our write pointer */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user