Message ID | 20210213223801.1334216-9-olteanv@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 62bf5fde5e14640a2a732be9f6a661a488025eae |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | PTP for DSA tag_ocelot_8021q | expand |
Context | Check | Description |
---|---|---|
netdev/cover_letter | success | Link |
netdev/fixes_present | success | Link |
netdev/patch_count | success | Link |
netdev/tree_selection | success | Clearly marked for net-next |
netdev/subject_prefix | success | Link |
netdev/cc_maintainers | success | CCed 10 of 10 maintainers |
netdev/source_inline | success | Was 0 now: 0 |
netdev/verify_signedoff | success | Link |
netdev/module_param | success | Was 0 now: 0 |
netdev/build_32bit | success | Errors and warnings before: 0 this patch: 0 |
netdev/kdoc | success | Errors and warnings before: 0 this patch: 0 |
netdev/verify_fixes | success | Link |
netdev/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 44 lines checked |
netdev/build_allmodconfig_warn | success | Errors and warnings before: 0 this patch: 0 |
netdev/header_inline | success | Link |
netdev/stable | success | Stable not CCed |
On 2/13/2021 14:37, Vladimir Oltean wrote: > From: Vladimir Oltean <vladimir.oltean@nxp.com> > > There is one place where we cannot avoid accessing driver data, and that > is 2-step PTP TX timestamping, since the switch wants us to provide a > timestamp request ID through the injection header, which naturally must > come from a sequence number kept by the driver (it is generated by the > .port_txtstamp method prior to the tagger's xmit). > > However, since other drivers like dsa_loop do not claim PTP support > anyway, the DSA_SKB_CB(skb)->clone will always be NULL anyway, so if we > move all PTP-related dereferences of struct ocelot and struct ocelot_port > into a separate function, we can effectively ensure that this is dead > code when the ocelot tagger is attached to non-ocelot switches, and the > stateful portion of the tagger is more self-contained. > > Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
diff --git a/net/dsa/tag_ocelot.c b/net/dsa/tag_ocelot.c index 8ce0b26f3520..fe00519229d7 100644 --- a/net/dsa/tag_ocelot.c +++ b/net/dsa/tag_ocelot.c @@ -5,6 +5,25 @@ #include <soc/mscc/ocelot.h> #include "dsa_priv.h" +static void ocelot_xmit_ptp(struct dsa_port *dp, void *injection, + struct sk_buff *clone) +{ + struct ocelot *ocelot = dp->ds->priv; + struct ocelot_port *ocelot_port; + u64 rew_op; + + ocelot_port = ocelot->ports[dp->index]; + rew_op = ocelot_port->ptp_cmd; + + /* Retrieve timestamp ID populated inside skb->cb[0] of the + * clone by ocelot_port_add_txtstamp_skb + */ + if (ocelot_port->ptp_cmd == IFH_REW_OP_TWO_STEP_PTP) + rew_op |= clone->cb[0] << 3; + + ocelot_ifh_set_rew_op(injection, rew_op); +} + static struct sk_buff *ocelot_xmit(struct sk_buff *skb, struct net_device *netdev) { @@ -29,17 +48,8 @@ static struct sk_buff *ocelot_xmit(struct sk_buff *skb, ocelot_ifh_set_qos_class(injection, skb->priority); /* TX timestamping was requested */ - if (clone) { - u64 rew_op = ocelot_port->ptp_cmd; - - /* Retrieve timestamp ID populated inside skb->cb[0] of the - * clone by ocelot_port_add_txtstamp_skb - */ - if (ocelot_port->ptp_cmd == IFH_REW_OP_TWO_STEP_PTP) - rew_op |= clone->cb[0] << 3; - - ocelot_ifh_set_rew_op(injection, rew_op); - } + if (clone) + ocelot_xmit_ptp(dp, injection, clone); return skb; }