diff options
Diffstat (limited to 'drivers/net/ethernet/mscc/ocelot_net.c')
| -rw-r--r-- | drivers/net/ethernet/mscc/ocelot_net.c | 12 | 
1 files changed, 6 insertions, 6 deletions
| diff --git a/drivers/net/ethernet/mscc/ocelot_net.c b/drivers/net/ethernet/mscc/ocelot_net.c index 0668d23cdbfa..8490e42e9e2d 100644 --- a/drivers/net/ethernet/mscc/ocelot_net.c +++ b/drivers/net/ethernet/mscc/ocelot_net.c @@ -330,6 +330,7 @@ static int ocelot_port_xmit(struct sk_buff *skb, struct net_device *dev)  	u8 grp = 0; /* Send everything on CPU group 0 */  	unsigned int i, count, last;  	int port = priv->chip_port; +	bool do_tstamp;  	val = ocelot_read(ocelot, QS_INJ_STATUS);  	if (!(val & QS_INJ_STATUS_FIFO_RDY(BIT(grp))) || @@ -344,10 +345,12 @@ static int ocelot_port_xmit(struct sk_buff *skb, struct net_device *dev)  	info.vid = skb_vlan_tag_get(skb);  	/* Check if timestamping is needed */ +	do_tstamp = (ocelot_port_add_txtstamp_skb(ocelot_port, skb) == 0); +  	if (ocelot->ptp && shinfo->tx_flags & SKBTX_HW_TSTAMP) {  		info.rew_op = ocelot_port->ptp_cmd;  		if (ocelot_port->ptp_cmd == IFH_REW_OP_TWO_STEP_PTP) -			info.rew_op |= (ocelot_port->ts_id  % 4) << 3; +			info.rew_op |= skb->cb[0] << 3;  	}  	ocelot_gen_ifh(ifh, &info); @@ -380,12 +383,9 @@ static int ocelot_port_xmit(struct sk_buff *skb, struct net_device *dev)  	dev->stats.tx_packets++;  	dev->stats.tx_bytes += skb->len; -	if (!ocelot_port_add_txtstamp_skb(ocelot_port, skb)) { -		ocelot_port->ts_id++; -		return NETDEV_TX_OK; -	} +	if (!do_tstamp) +		dev_kfree_skb_any(skb); -	dev_kfree_skb_any(skb);  	return NETDEV_TX_OK;  } |