Commit 859380694f43 for kernel

commit 859380694f434597407632c29f30fdb5e763e6cc
Author: Jianbo Liu <jianbol@nvidia.com>
Date:   Tue Feb 24 13:46:52 2026 +0200

    net/mlx5e: Fix "scheduling while atomic" in IPsec MAC address query

    Fix a "scheduling while atomic" bug in mlx5e_ipsec_init_macs() by
    replacing mlx5_query_mac_address() with ether_addr_copy() to get the
    local MAC address directly from netdev->dev_addr.

    The issue occurs because mlx5_query_mac_address() queries the hardware
    which involves mlx5_cmd_exec() that can sleep, but it is called from
    the mlx5e_ipsec_handle_event workqueue which runs in atomic context.

    The MAC address is already available in netdev->dev_addr, so no need
    to query hardware. This avoids the sleeping call and resolves the bug.

    Call trace:
      BUG: scheduling while atomic: kworker/u112:2/69344/0x00000200
      __schedule+0x7ab/0xa20
      schedule+0x1c/0xb0
      schedule_timeout+0x6e/0xf0
      __wait_for_common+0x91/0x1b0
      cmd_exec+0xa85/0xff0 [mlx5_core]
      mlx5_cmd_exec+0x1f/0x50 [mlx5_core]
      mlx5_query_nic_vport_mac_address+0x7b/0xd0 [mlx5_core]
      mlx5_query_mac_address+0x19/0x30 [mlx5_core]
      mlx5e_ipsec_init_macs+0xc1/0x720 [mlx5_core]
      mlx5e_ipsec_build_accel_xfrm_attrs+0x422/0x670 [mlx5_core]
      mlx5e_ipsec_handle_event+0x2b9/0x460 [mlx5_core]
      process_one_work+0x178/0x2e0
      worker_thread+0x2ea/0x430

    Fixes: cee137a63431 ("net/mlx5e: Handle ESN update events")
    Signed-off-by: Jianbo Liu <jianbol@nvidia.com>
    Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20260224114652.1787431-6-tariqt@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c
index 9c7064187ed0..f03507a522b4 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c
@@ -259,7 +259,6 @@ static void mlx5e_ipsec_init_limits(struct mlx5e_ipsec_sa_entry *sa_entry,
 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;
@@ -276,7 +275,7 @@ static void mlx5e_ipsec_init_macs(struct mlx5e_ipsec_sa_entry *sa_entry,
 	    attrs->type != XFRM_DEV_OFFLOAD_PACKET)
 		return;

-	mlx5_query_mac_address(mdev, addr);
+	ether_addr_copy(addr, netdev->dev_addr);
 	switch (attrs->dir) {
 	case XFRM_DEV_OFFLOAD_IN:
 		src = attrs->dmac;