mlxsw: core: Add support for using SKB control buffer
authorPetr Machata <petrm@mellanox.com>
Sun, 30 Jun 2019 06:04:52 +0000 (09:04 +0300)
committerDavid S. Miller <davem@davemloft.net>
Tue, 2 Jul 2019 01:58:34 +0000 (18:58 -0700)
The SKB control buffer is useful (and used) for bookkeeping of information
related to that SKB. Add helpers so that the mlxsw driver(s) can safely use
the buffer as well. The structure is currently empty, individual users will
add members to it as necessary.

Note that SKB allocation functions already clear the buffer, so the cleanup
is only necessary when ndo_start_xmit is called.

Signed-off-by: Petr Machata <petrm@mellanox.com>
Acked-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/core.h
drivers/net/ethernet/mellanox/mlxsw/spectrum.c
drivers/net/ethernet/mellanox/mlxsw/switchx2.c

index 6dbb0ede502e80b6034b2d6d2da3de329cc8e55e..06babcc58c7ae0558c7e18625503cc4d11ff952e 100644 (file)
@@ -418,4 +418,13 @@ enum mlxsw_devlink_param_id {
        MLXSW_DEVLINK_PARAM_ID_ACL_REGION_REHASH_INTERVAL,
 };
 
+struct mlxsw_skb_cb {
+};
+
+static inline struct mlxsw_skb_cb *mlxsw_skb_cb(struct sk_buff *skb)
+{
+       BUILD_BUG_ON(sizeof(mlxsw_skb_cb) > sizeof(skb->cb));
+       return (struct mlxsw_skb_cb *) skb->cb;
+}
+
 #endif
index 84f4077b4b372c148086012dd1914f08d507ecd8..a0376d4f94a89ae7ac284d5be2676ea62a32039c 100644 (file)
@@ -790,6 +790,8 @@ static netdev_tx_t mlxsw_sp_port_xmit(struct sk_buff *skb,
        u64 len;
        int err;
 
+       memset(skb->cb, 0, sizeof(struct mlxsw_skb_cb));
+
        if (mlxsw_core_skb_transmit_busy(mlxsw_sp->core, &tx_info))
                return NETDEV_TX_BUSY;
 
index fc4f19167262fe5ecce840bc6cb1a97c36da4295..bdab96f5bc7033cf9a77a0c9ba471794e45067c6 100644 (file)
@@ -299,6 +299,8 @@ static netdev_tx_t mlxsw_sx_port_xmit(struct sk_buff *skb,
        u64 len;
        int err;
 
+       memset(skb->cb, 0, sizeof(struct mlxsw_skb_cb));
+
        if (mlxsw_core_skb_transmit_busy(mlxsw_sx->core, &tx_info))
                return NETDEV_TX_BUSY;