Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'net-mlx5e-misc-changes-2025-07-22'

Tariq Toukan says:

====================
net/mlx5e: misc changes 2025-07-22

This series contains misc enhancements to the mlx5e driver.
====================

Link: https://patch.msgid.link/1753194228-333722-1-git-send-email-tariqt@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+105 -2
+25
drivers/net/ethernet/mellanox/mlx5/core/en/reporter_tx.c
··· 311 311 mlx5e_health_fmsg_named_obj_nest_end(fmsg); 312 312 } 313 313 314 + static void 315 + mlx5e_tx_reporter_diagnose_tis_config(struct devlink_health_reporter *reporter, 316 + struct devlink_fmsg *fmsg) 317 + { 318 + struct mlx5e_priv *priv = devlink_health_reporter_priv(reporter); 319 + u8 num_tc = mlx5e_get_dcb_num_tc(&priv->channels.params); 320 + u32 tc, i, tisn; 321 + 322 + devlink_fmsg_arr_pair_nest_start(fmsg, "TIS Config"); 323 + for (i = 0; i < mlx5e_get_num_lag_ports(priv->mdev); i++) { 324 + for (tc = 0; tc < num_tc; tc++) { 325 + tisn = mlx5e_profile_get_tisn(priv->mdev, priv, 326 + priv->profile, i, tc); 327 + 328 + devlink_fmsg_obj_nest_start(fmsg); 329 + devlink_fmsg_u32_pair_put(fmsg, "lag port", i); 330 + devlink_fmsg_u32_pair_put(fmsg, "tc", tc); 331 + devlink_fmsg_u32_pair_put(fmsg, "tisn", tisn); 332 + devlink_fmsg_obj_nest_end(fmsg); 333 + } 334 + } 335 + devlink_fmsg_arr_pair_nest_end(fmsg); 336 + } 337 + 314 338 static int mlx5e_tx_reporter_diagnose(struct devlink_health_reporter *reporter, 315 339 struct devlink_fmsg *fmsg, 316 340 struct netlink_ext_ack *extack) ··· 350 326 goto unlock; 351 327 352 328 mlx5e_tx_reporter_diagnose_common_config(reporter, fmsg); 329 + mlx5e_tx_reporter_diagnose_tis_config(reporter, fmsg); 353 330 devlink_fmsg_arr_pair_nest_start(fmsg, "SQs"); 354 331 355 332 for (i = 0; i < priv->channels.num; i++) {
+80 -2
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c
··· 36 36 #include <linux/inetdevice.h> 37 37 #include <linux/netdevice.h> 38 38 #include <net/netevent.h> 39 + #include <net/ipv6_stubs.h> 39 40 40 41 #include "en.h" 41 42 #include "eswitch.h" ··· 260 259 struct mlx5_accel_esp_xfrm_attrs *attrs) 261 260 { 262 261 struct mlx5_core_dev *mdev = mlx5e_ipsec_sa2dev(sa_entry); 262 + struct mlx5e_ipsec_addr *addrs = &attrs->addrs; 263 263 struct net_device *netdev = sa_entry->dev; 264 + struct xfrm_state *x = sa_entry->x; 265 + struct dst_entry *rt_dst_entry; 266 + struct flowi4 fl4 = {}; 267 + struct flowi6 fl6 = {}; 264 268 struct neighbour *n; 265 269 u8 addr[ETH_ALEN]; 270 + struct rtable *rt; 266 271 const void *pkey; 267 272 u8 *dst, *src; 268 273 ··· 281 274 case XFRM_DEV_OFFLOAD_IN: 282 275 src = attrs->dmac; 283 276 dst = attrs->smac; 284 - pkey = &attrs->addrs.saddr.a4; 277 + 278 + switch (addrs->family) { 279 + case AF_INET: 280 + fl4.flowi4_proto = x->sel.proto; 281 + fl4.daddr = addrs->saddr.a4; 282 + fl4.saddr = addrs->daddr.a4; 283 + pkey = &addrs->saddr.a4; 284 + break; 285 + case AF_INET6: 286 + fl6.flowi6_proto = x->sel.proto; 287 + memcpy(fl6.daddr.s6_addr32, addrs->saddr.a6, 16); 288 + memcpy(fl6.saddr.s6_addr32, addrs->daddr.a6, 16); 289 + pkey = &addrs->saddr.a6; 290 + break; 291 + default: 292 + return; 293 + } 285 294 break; 286 295 case XFRM_DEV_OFFLOAD_OUT: 287 296 src = attrs->smac; 288 297 dst = attrs->dmac; 289 - pkey = &attrs->addrs.daddr.a4; 298 + switch (addrs->family) { 299 + case AF_INET: 300 + fl4.flowi4_proto = x->sel.proto; 301 + fl4.daddr = addrs->daddr.a4; 302 + fl4.saddr = addrs->saddr.a4; 303 + pkey = &addrs->daddr.a4; 304 + break; 305 + case AF_INET6: 306 + fl6.flowi6_proto = x->sel.proto; 307 + memcpy(fl6.daddr.s6_addr32, addrs->daddr.a6, 16); 308 + memcpy(fl6.saddr.s6_addr32, addrs->saddr.a6, 16); 309 + pkey = &addrs->daddr.a6; 310 + break; 311 + default: 312 + return; 313 + } 290 314 break; 291 315 default: 292 316 return; 293 317 } 294 318 295 319 ether_addr_copy(src, addr); 320 + 321 + /* Destination can refer to a routed network, so perform FIB lookup 322 + * to resolve nexthop and get its MAC. Neighbour resolution is used as 323 + * fallback. 324 + */ 325 + switch (addrs->family) { 326 + case AF_INET: 327 + rt = ip_route_output_key(dev_net(netdev), &fl4); 328 + if (IS_ERR(rt)) 329 + goto neigh; 330 + 331 + if (rt->rt_type != RTN_UNICAST) { 332 + ip_rt_put(rt); 333 + goto neigh; 334 + } 335 + rt_dst_entry = &rt->dst; 336 + break; 337 + case AF_INET6: 338 + rt_dst_entry = ipv6_stub->ipv6_dst_lookup_flow( 339 + dev_net(netdev), NULL, &fl6, NULL); 340 + if (IS_ERR(rt_dst_entry)) 341 + goto neigh; 342 + break; 343 + default: 344 + return; 345 + } 346 + 347 + n = dst_neigh_lookup(rt_dst_entry, pkey); 348 + if (!n) { 349 + dst_release(rt_dst_entry); 350 + goto neigh; 351 + } 352 + 353 + neigh_ha_snapshot(addr, n, netdev); 354 + ether_addr_copy(dst, addr); 355 + dst_release(rt_dst_entry); 356 + neigh_release(n); 357 + return; 358 + 359 + neigh: 296 360 n = neigh_lookup(&arp_tbl, pkey, netdev); 297 361 if (!n) { 298 362 n = neigh_create(&arp_tbl, pkey, netdev);