mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 01:53:29 +02:00
net: mscc: ocelot: extract ocelot_xmit_timestamp() helper
Extract the PTP timestamp handling logic from ocelot_port_xmit() into a separate ocelot_xmit_timestamp() helper function. This is a pure refactor with no behavioral change. The helper returns false if the skb was consumed (freed) due to a timestamp request failure, and true if the caller should continue with frame injection. The rew_op value is returned via pointer. This prepares for splitting ocelot_port_xmit() into separate FDMA and register injection paths in a subsequent patch. Signed-off-by: Ziyi Guo <n7l8m4@u.northwestern.edu> Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com> Link: https://patch.msgid.link/20260208225602.1339325-2-n7l8m4@u.northwestern.edu Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
6c28aa8dfd
commit
29372f07f7
|
|
@ -551,6 +551,26 @@ static int ocelot_port_stop(struct net_device *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static bool ocelot_xmit_timestamp(struct ocelot *ocelot, int port,
|
||||
struct sk_buff *skb, u32 *rew_op)
|
||||
{
|
||||
if (ocelot->ptp && (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) {
|
||||
struct sk_buff *clone = NULL;
|
||||
|
||||
if (ocelot_port_txtstamp_request(ocelot, port, skb, &clone)) {
|
||||
kfree_skb(skb);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (clone)
|
||||
OCELOT_SKB_CB(skb)->clone = clone;
|
||||
|
||||
*rew_op = ocelot_ptp_rew_op(skb);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static netdev_tx_t ocelot_port_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
{
|
||||
struct ocelot_port_private *priv = netdev_priv(dev);
|
||||
|
|
@ -563,20 +583,8 @@ static netdev_tx_t ocelot_port_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
!ocelot_can_inject(ocelot, 0))
|
||||
return NETDEV_TX_BUSY;
|
||||
|
||||
/* Check if timestamping is needed */
|
||||
if (ocelot->ptp && (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) {
|
||||
struct sk_buff *clone = NULL;
|
||||
|
||||
if (ocelot_port_txtstamp_request(ocelot, port, skb, &clone)) {
|
||||
kfree_skb(skb);
|
||||
return NETDEV_TX_OK;
|
||||
}
|
||||
|
||||
if (clone)
|
||||
OCELOT_SKB_CB(skb)->clone = clone;
|
||||
|
||||
rew_op = ocelot_ptp_rew_op(skb);
|
||||
}
|
||||
if (!ocelot_xmit_timestamp(ocelot, port, skb, &rew_op))
|
||||
return NETDEV_TX_OK;
|
||||
|
||||
if (static_branch_unlikely(&ocelot_fdma_enabled)) {
|
||||
ocelot_fdma_inject_frame(ocelot, port, rew_op, skb, dev);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user