]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: mscc: ocelot: improve handling of TX timestamp for unknown skb
authorVladimir Oltean <vladimir.oltean@nxp.com>
Thu, 5 Dec 2024 14:55:16 +0000 (16:55 +0200)
committerJakub Kicinski <kuba@kernel.org>
Sun, 8 Dec 2024 01:56:46 +0000 (17:56 -0800)
This condition, theoretically impossible to trigger, is not really
handled well. By "continuing", we are skipping the write to SYS_PTP_NXT
which advances the timestamp FIFO to the next entry. So we are reading
the same FIFO entry all over again, printing stack traces and eventually
killing the kernel.

No real problem has been observed here. This is part of a larger rework
of the timestamp IRQ procedure, with this logical change split out into
a patch of its own. We will need to "goto next_ts" for other conditions
as well.

Fixes: 9fde506e0c53 ("net: mscc: ocelot: warn when a PTP IRQ is raised for an unknown skb")
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Link: https://patch.msgid.link/20241205145519.1236778-3-vladimir.oltean@nxp.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/mscc/ocelot_ptp.c

index db00a51a7430f41c99e9f6854a7f29e359c1248d..95a5267bc9cebe6b103abe976888dbddca3b2b07 100644 (file)
@@ -786,7 +786,7 @@ try_again:
                spin_unlock_irqrestore(&port->tx_skbs.lock, flags);
 
                if (WARN_ON(!skb_match))
-                       continue;
+                       goto next_ts;
 
                if (!ocelot_validate_ptp_skb(skb_match, seqid)) {
                        dev_err_ratelimited(ocelot->dev,
@@ -804,7 +804,7 @@ try_again:
                shhwtstamps.hwtstamp = ktime_set(ts.tv_sec, ts.tv_nsec);
                skb_complete_tx_timestamp(skb_match, &shhwtstamps);
 
-               /* Next ts */
+next_ts:
                ocelot_write(ocelot, SYS_PTP_NXT_PTP_NXT, SYS_PTP_NXT);
        }
 }