net: dsa: sja1105: Empty the RX timestamping queue on PTP settings change
authorVladimir Oltean <olteanv@gmail.com>
Fri, 27 Dec 2019 13:02:30 +0000 (15:02 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 31 Dec 2019 04:31:40 +0000 (20:31 -0800)
When disabling PTP timestamping, don't reset the switch with the new
static config until all existing PTP frames have been timestamped on the
RX path or dropped. There's nothing we can do with these afterwards.

Signed-off-by: Vladimir Oltean <olteanv@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/sja1105/sja1105_ptp.c

index 387b22a86a53d63f022f2c2ff08431b4342a480d..e6b611470043be69a82cae7ee42f61ed372b9d0b 100644 (file)
@@ -83,6 +83,7 @@ static int sja1105_init_avb_params(struct sja1105_private *priv,
 static int sja1105_change_rxtstamping(struct sja1105_private *priv,
                                      bool on)
 {
+       struct sja1105_ptp_data *ptp_data = &priv->ptp_data;
        struct sja1105_general_params_entry *general_params;
        struct sja1105_table *table;
        int rc;
@@ -101,6 +102,8 @@ static int sja1105_change_rxtstamping(struct sja1105_private *priv,
                kfree_skb(priv->tagger_data.stampable_skb);
                priv->tagger_data.stampable_skb = NULL;
        }
+       ptp_cancel_worker_sync(ptp_data->clock);
+       skb_queue_purge(&ptp_data->skb_rxtstamp_queue);
 
        return sja1105_static_config_reload(priv, SJA1105_RX_HWTSTAMPING);
 }