net: dsa: check tx timestamp request in core driver
authorYangbo Lu <yangbo.lu@nxp.com>
Tue, 27 Apr 2021 04:21:57 +0000 (12:21 +0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 27 Apr 2021 21:10:15 +0000 (14:10 -0700)
Check tx timestamp request in core driver at very beginning of
dsa_skb_tx_timestamp(), so that most skbs not requiring tx
timestamp just return. And drop such checking in device drivers.

Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
Tested-by: Kurt Kanzenbach <kurt@linutronix.de>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Acked-by: Richard Cochran <richardcochran@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
drivers/net/dsa/mv88e6xxx/hwtstamp.c
drivers/net/dsa/ocelot/felix.c
net/dsa/slave.c

index 69dd9a2..6ba5e23 100644 (file)
@@ -382,10 +382,6 @@ bool hellcreek_port_txtstamp(struct dsa_switch *ds, int port,
 
        ps = &hellcreek->ports[port].port_hwtstamp;
 
-       /* Check if the driver is expected to do HW timestamping */
-       if (!(skb_shinfo(clone)->tx_flags & SKBTX_HW_TSTAMP))
-               return false;
-
        /* Make sure the message is a PTP message that needs to be timestamped
         * and the interaction with the HW timestamping is enabled. If not, stop
         * here
index 094d17a..05ca1d3 100644 (file)
@@ -475,9 +475,6 @@ bool mv88e6xxx_port_txtstamp(struct dsa_switch *ds, int port,
        struct mv88e6xxx_port_hwtstamp *ps = &chip->port_hwtstamp[port];
        struct ptp_header *hdr;
 
-       if (!(skb_shinfo(clone)->tx_flags & SKBTX_HW_TSTAMP))
-               return false;
-
        hdr = mv88e6xxx_should_tstamp(chip, port, clone, type);
        if (!hdr)
                return false;
index 6b5442b..1379f86 100644 (file)
@@ -1401,8 +1401,7 @@ static bool felix_txtstamp(struct dsa_switch *ds, int port,
        struct ocelot *ocelot = ds->priv;
        struct ocelot_port *ocelot_port = ocelot->ports[port];
 
-       if (ocelot->ptp && (skb_shinfo(clone)->tx_flags & SKBTX_HW_TSTAMP) &&
-           ocelot_port->ptp_cmd == IFH_REW_OP_TWO_STEP_PTP) {
+       if (ocelot->ptp && ocelot_port->ptp_cmd == IFH_REW_OP_TWO_STEP_PTP) {
                ocelot_port_add_txtstamp_skb(ocelot, port, clone);
                return true;
        }
index 77b33bd..b2a802e 100644 (file)
@@ -559,6 +559,9 @@ static void dsa_skb_tx_timestamp(struct dsa_slave_priv *p,
        struct sk_buff *clone;
        unsigned int type;
 
+       if (!(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP))
+               return;
+
        type = ptp_classify_raw(skb);
        if (type == PTP_CLASS_NONE)
                return;