On Tue, 11 Jul 2023 15:56:57 -0700 Alexei Starovoitov wrote: > I think this proves my point: csum is not generalizable even across veth and mlx5. > Above is a square peg that tries to fit csum_start/offset api (that makes sense from SW pov) > into HW that has different ideas about csum-ing. > > Here is what mlx5 does: > mlx5e_txwqe_build_eseg_csum(struct mlx5e_txqsq *sq, struct sk_buff *skb, > struct mlx5e_accel_tx_state *accel, > struct mlx5_wqe_eth_seg *eseg) > { > if (unlikely(mlx5e_ipsec_txwqe_build_eseg_csum(sq, skb, eseg))) > return; > > if (likely(skb->ip_summed == CHECKSUM_PARTIAL)) { > eseg->cs_flags = MLX5_ETH_WQE_L3_CSUM; > if (skb->encapsulation) { This should be irrelevant today, as LCO exists? > eseg->cs_flags |= MLX5_ETH_WQE_L3_INNER_CSUM | > MLX5_ETH_WQE_L4_INNER_CSUM; > sq->stats->csum_partial_inner++; > } else { > eseg->cs_flags |= MLX5_ETH_WQE_L4_CSUM; > sq->stats->csum_partial++; > } > > How would you generalize that into csum api that will work across NICs ? > > My answer stands: you cannot. > > My proposal again: > add driver specifc kfuncs and hooks for things like csum. > > Kuba, > since you nacked driver specific stuff please suggest a way to unblock this stalemate. I hope I'm not misremembering but I think I suggested at the beginning to create a structure describing packet geometry and requested offloads, and for the prog fill that in. All operating systems I know end up doing that, we'll end up doing that as well. The question is whether we're willing to learn from experience or prefer to go on a wild ride first...