diff options
author | Vladimir Oltean <vladimir.oltean@nxp.com> | 2021-12-10 01:34:43 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2021-12-12 12:51:33 +0000 |
commit | 22ee9f8e4011fb8a6d75dc2f9a43360d4f400235 (patch) | |
tree | 6ac48e901ccbccf6791ca9c78d6ae306f4f2e437 | |
parent | bfcf1425222008e7390c0784b0f3bb7b497fccaa (diff) | |
download | linux-stable-22ee9f8e4011fb8a6d75dc2f9a43360d4f400235.tar.gz linux-stable-22ee9f8e4011fb8a6d75dc2f9a43360d4f400235.tar.bz2 linux-stable-22ee9f8e4011fb8a6d75dc2f9a43360d4f400235.zip |
net: dsa: sja1105: move ts_id from sja1105_tagger_data
The TX timestamp ID is incremented by the SJA1110 PTP timestamping
callback (->port_tx_timestamp) for every packet, when cloning it.
It isn't used by the tagger at all, even though it sits inside the
struct sja1105_tagger_data.
Also, serialization to this structure is currently done through
tagger_data->meta_lock, which is a cheap hack because the meta_lock
isn't used for anything else on SJA1110 (sja1105_rcv_meta_state_machine
isn't called).
This change moves ts_id from sja1105_tagger_data to sja1105_private and
introduces a dedicated spinlock for it, also in sja1105_private.
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/dsa/sja1105/sja1105.h | 3 | ||||
-rw-r--r-- | drivers/net/dsa/sja1105/sja1105_main.c | 1 | ||||
-rw-r--r-- | drivers/net/dsa/sja1105/sja1105_ptp.c | 8 | ||||
-rw-r--r-- | include/linux/dsa/sja1105.h | 1 |
4 files changed, 8 insertions, 5 deletions
diff --git a/drivers/net/dsa/sja1105/sja1105.h b/drivers/net/dsa/sja1105/sja1105.h index 6ef6fb4f30e6..850a7d3e69bb 100644 --- a/drivers/net/dsa/sja1105/sja1105.h +++ b/drivers/net/dsa/sja1105/sja1105.h @@ -261,6 +261,9 @@ struct sja1105_private { * the switch doesn't confuse them with one another. */ struct mutex mgmt_lock; + /* PTP two-step TX timestamp ID, and its serialization lock */ + spinlock_t ts_id_lock; + u8 ts_id; /* Serializes access to the dynamic config interface */ struct mutex dynamic_config_lock; struct devlink_region **regions; diff --git a/drivers/net/dsa/sja1105/sja1105_main.c b/drivers/net/dsa/sja1105/sja1105_main.c index e7a6cc7f681c..880f28ea184f 100644 --- a/drivers/net/dsa/sja1105/sja1105_main.c +++ b/drivers/net/dsa/sja1105/sja1105_main.c @@ -3348,6 +3348,7 @@ static int sja1105_probe(struct spi_device *spi) mutex_init(&priv->ptp_data.lock); mutex_init(&priv->dynamic_config_lock); mutex_init(&priv->mgmt_lock); + spin_lock_init(&priv->ts_id_lock); rc = sja1105_parse_dt(priv); if (rc < 0) { diff --git a/drivers/net/dsa/sja1105/sja1105_ptp.c b/drivers/net/dsa/sja1105/sja1105_ptp.c index 9077067328c2..0904ab10bd2f 100644 --- a/drivers/net/dsa/sja1105/sja1105_ptp.c +++ b/drivers/net/dsa/sja1105/sja1105_ptp.c @@ -468,15 +468,15 @@ void sja1110_txtstamp(struct dsa_switch *ds, int port, struct sk_buff *skb) skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; - spin_lock(&tagger_data->meta_lock); + spin_lock(&priv->ts_id_lock); - ts_id = tagger_data->ts_id; + ts_id = priv->ts_id; /* Deal automatically with 8-bit wraparound */ - tagger_data->ts_id++; + priv->ts_id++; SJA1105_SKB_CB(clone)->ts_id = ts_id; - spin_unlock(&tagger_data->meta_lock); + spin_unlock(&priv->ts_id_lock); skb_queue_tail(&tagger_data->skb_txtstamp_queue, clone); } diff --git a/include/linux/dsa/sja1105.h b/include/linux/dsa/sja1105.h index 1dda9cce85d9..d8ee53085c09 100644 --- a/include/linux/dsa/sja1105.h +++ b/include/linux/dsa/sja1105.h @@ -51,7 +51,6 @@ struct sja1105_tagger_data { */ spinlock_t meta_lock; unsigned long state; - u8 ts_id; /* Used on SJA1110 where meta frames are generated only for * 2-step TX timestamps */ |