mirror of
https://github.com/torvalds/linux.git
synced 2026-06-04 04:23:35 +02:00
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>
This commit is contained in:
commit
4020b7bafb
|
|
@ -311,6 +311,30 @@ mlx5e_tx_reporter_diagnose_common_config(struct devlink_health_reporter *reporte
|
|||
mlx5e_health_fmsg_named_obj_nest_end(fmsg);
|
||||
}
|
||||
|
||||
static void
|
||||
mlx5e_tx_reporter_diagnose_tis_config(struct devlink_health_reporter *reporter,
|
||||
struct devlink_fmsg *fmsg)
|
||||
{
|
||||
struct mlx5e_priv *priv = devlink_health_reporter_priv(reporter);
|
||||
u8 num_tc = mlx5e_get_dcb_num_tc(&priv->channels.params);
|
||||
u32 tc, i, tisn;
|
||||
|
||||
devlink_fmsg_arr_pair_nest_start(fmsg, "TIS Config");
|
||||
for (i = 0; i < mlx5e_get_num_lag_ports(priv->mdev); i++) {
|
||||
for (tc = 0; tc < num_tc; tc++) {
|
||||
tisn = mlx5e_profile_get_tisn(priv->mdev, priv,
|
||||
priv->profile, i, tc);
|
||||
|
||||
devlink_fmsg_obj_nest_start(fmsg);
|
||||
devlink_fmsg_u32_pair_put(fmsg, "lag port", i);
|
||||
devlink_fmsg_u32_pair_put(fmsg, "tc", tc);
|
||||
devlink_fmsg_u32_pair_put(fmsg, "tisn", tisn);
|
||||
devlink_fmsg_obj_nest_end(fmsg);
|
||||
}
|
||||
}
|
||||
devlink_fmsg_arr_pair_nest_end(fmsg);
|
||||
}
|
||||
|
||||
static int mlx5e_tx_reporter_diagnose(struct devlink_health_reporter *reporter,
|
||||
struct devlink_fmsg *fmsg,
|
||||
struct netlink_ext_ack *extack)
|
||||
|
|
@ -326,6 +350,7 @@ static int mlx5e_tx_reporter_diagnose(struct devlink_health_reporter *reporter,
|
|||
goto unlock;
|
||||
|
||||
mlx5e_tx_reporter_diagnose_common_config(reporter, fmsg);
|
||||
mlx5e_tx_reporter_diagnose_tis_config(reporter, fmsg);
|
||||
devlink_fmsg_arr_pair_nest_start(fmsg, "SQs");
|
||||
|
||||
for (i = 0; i < priv->channels.num; i++) {
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@
|
|||
#include <linux/inetdevice.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <net/netevent.h>
|
||||
#include <net/ipv6_stubs.h>
|
||||
|
||||
#include "en.h"
|
||||
#include "eswitch.h"
|
||||
|
|
@ -259,9 +260,15 @@ static void mlx5e_ipsec_init_macs(struct mlx5e_ipsec_sa_entry *sa_entry,
|
|||
struct mlx5_accel_esp_xfrm_attrs *attrs)
|
||||
{
|
||||
struct mlx5_core_dev *mdev = mlx5e_ipsec_sa2dev(sa_entry);
|
||||
struct mlx5e_ipsec_addr *addrs = &attrs->addrs;
|
||||
struct net_device *netdev = sa_entry->dev;
|
||||
struct xfrm_state *x = sa_entry->x;
|
||||
struct dst_entry *rt_dst_entry;
|
||||
struct flowi4 fl4 = {};
|
||||
struct flowi6 fl6 = {};
|
||||
struct neighbour *n;
|
||||
u8 addr[ETH_ALEN];
|
||||
struct rtable *rt;
|
||||
const void *pkey;
|
||||
u8 *dst, *src;
|
||||
|
||||
|
|
@ -274,18 +281,89 @@ static void mlx5e_ipsec_init_macs(struct mlx5e_ipsec_sa_entry *sa_entry,
|
|||
case XFRM_DEV_OFFLOAD_IN:
|
||||
src = attrs->dmac;
|
||||
dst = attrs->smac;
|
||||
pkey = &attrs->addrs.saddr.a4;
|
||||
|
||||
switch (addrs->family) {
|
||||
case AF_INET:
|
||||
fl4.flowi4_proto = x->sel.proto;
|
||||
fl4.daddr = addrs->saddr.a4;
|
||||
fl4.saddr = addrs->daddr.a4;
|
||||
pkey = &addrs->saddr.a4;
|
||||
break;
|
||||
case AF_INET6:
|
||||
fl6.flowi6_proto = x->sel.proto;
|
||||
memcpy(fl6.daddr.s6_addr32, addrs->saddr.a6, 16);
|
||||
memcpy(fl6.saddr.s6_addr32, addrs->daddr.a6, 16);
|
||||
pkey = &addrs->saddr.a6;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case XFRM_DEV_OFFLOAD_OUT:
|
||||
src = attrs->smac;
|
||||
dst = attrs->dmac;
|
||||
pkey = &attrs->addrs.daddr.a4;
|
||||
switch (addrs->family) {
|
||||
case AF_INET:
|
||||
fl4.flowi4_proto = x->sel.proto;
|
||||
fl4.daddr = addrs->daddr.a4;
|
||||
fl4.saddr = addrs->saddr.a4;
|
||||
pkey = &addrs->daddr.a4;
|
||||
break;
|
||||
case AF_INET6:
|
||||
fl6.flowi6_proto = x->sel.proto;
|
||||
memcpy(fl6.daddr.s6_addr32, addrs->daddr.a6, 16);
|
||||
memcpy(fl6.saddr.s6_addr32, addrs->saddr.a6, 16);
|
||||
pkey = &addrs->daddr.a6;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
ether_addr_copy(src, addr);
|
||||
|
||||
/* Destination can refer to a routed network, so perform FIB lookup
|
||||
* to resolve nexthop and get its MAC. Neighbour resolution is used as
|
||||
* fallback.
|
||||
*/
|
||||
switch (addrs->family) {
|
||||
case AF_INET:
|
||||
rt = ip_route_output_key(dev_net(netdev), &fl4);
|
||||
if (IS_ERR(rt))
|
||||
goto neigh;
|
||||
|
||||
if (rt->rt_type != RTN_UNICAST) {
|
||||
ip_rt_put(rt);
|
||||
goto neigh;
|
||||
}
|
||||
rt_dst_entry = &rt->dst;
|
||||
break;
|
||||
case AF_INET6:
|
||||
rt_dst_entry = ipv6_stub->ipv6_dst_lookup_flow(
|
||||
dev_net(netdev), NULL, &fl6, NULL);
|
||||
if (IS_ERR(rt_dst_entry))
|
||||
goto neigh;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
n = dst_neigh_lookup(rt_dst_entry, pkey);
|
||||
if (!n) {
|
||||
dst_release(rt_dst_entry);
|
||||
goto neigh;
|
||||
}
|
||||
|
||||
neigh_ha_snapshot(addr, n, netdev);
|
||||
ether_addr_copy(dst, addr);
|
||||
dst_release(rt_dst_entry);
|
||||
neigh_release(n);
|
||||
return;
|
||||
|
||||
neigh:
|
||||
n = neigh_lookup(&arp_tbl, pkey, netdev);
|
||||
if (!n) {
|
||||
n = neigh_create(&arp_tbl, pkey, netdev);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user