]> git.dujemihanovic.xyz Git - linux.git/commitdiff
net: stmmac: Complete meta data only when enabled
authorKurt Kanzenbach <kurt@linutronix.de>
Sun, 25 Feb 2024 11:38:37 +0000 (12:38 +0100)
committerJakub Kicinski <kuba@kernel.org>
Wed, 28 Feb 2024 02:17:47 +0000 (18:17 -0800)
Currently using plain XDP/ZC sockets on stmmac results in a kernel crash:

|[  255.822584] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000000
|[...]
|[  255.822764] Call trace:
|[  255.822766]  stmmac_tx_clean.constprop.0+0x848/0xc38

The program counter indicates xsk_tx_metadata_complete(). It works on
compl->tx_timestamp, which is not set by xsk_tx_metadata_to_compl() due to
missing meta data. Therefore, call xsk_tx_metadata_complete() only when
meta data is actually used.

Tested on imx93 without XDP, with XDP and with XDP/ZC.

Fixes: 1347b419318d ("net: stmmac: Add Tx HWTS support to XDP ZC")
Suggested-by: Serge Semin <fancer.lancer@gmail.com>
Tested-by: Serge Semin <fancer.lancer@gmail.com>
Link: https://lore.kernel.org/netdev/87r0h7wg8u.fsf@kurt.kurt.home/
Acked-by: Stanislav Fomichev <sdf@google.com>
Signed-off-by: Kurt Kanzenbach <kurt@linutronix.de>
Link: https://lore.kernel.org/r/20240222-stmmac_xdp-v2-1-4beee3a037e4@linutronix.de
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

index e80d77bd9f1f7655922e7d49d3b5b64ce2d81239..8b77c0952071880fe838f94ca0458d6691c4796e 100644 (file)
@@ -2672,7 +2672,8 @@ static int stmmac_tx_clean(struct stmmac_priv *priv, int budget, u32 queue,
                        }
                        if (skb) {
                                stmmac_get_tx_hwtstamp(priv, p, skb);
-                       } else {
+                       } else if (tx_q->xsk_pool &&
+                                  xp_tx_metadata_enabled(tx_q->xsk_pool)) {
                                struct stmmac_xsk_tx_complete tx_compl = {
                                        .priv = priv,
                                        .desc = p,