mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-03 20:34:23 -04:00
Merge branch '100GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue
Tony Nguyen says: ==================== Intel Wired LAN Driver Updates 2025-03-05 (ice) This series contains updates to ice driver. Larysa removes modification of destination override that caused LLDP packets to be blocked. Grzegorz fixes a memory leak in aRFS. Marcin resolves an issue with operation of switchdev and LAG. Przemek adjusts order of calls for registering devlink in relation to health reporters. * '100GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue: ice: register devlink prior to creating health reporters ice: Fix switchdev slow-path in LAG ice: fix memory leak in aRFS after reset ice: do not configure destination override for switchdev ==================== Link: https://patch.msgid.link/20250305213549.1514274-1-anthony.l.nguyen@intel.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -511,7 +511,7 @@ void ice_init_arfs(struct ice_vsi *vsi)
|
||||
struct hlist_head *arfs_fltr_list;
|
||||
unsigned int i;
|
||||
|
||||
if (!vsi || vsi->type != ICE_VSI_PF)
|
||||
if (!vsi || vsi->type != ICE_VSI_PF || ice_is_arfs_active(vsi))
|
||||
return;
|
||||
|
||||
arfs_fltr_list = kcalloc(ICE_MAX_ARFS_LIST, sizeof(*arfs_fltr_list),
|
||||
|
||||
@@ -49,9 +49,6 @@ static int ice_eswitch_setup_env(struct ice_pf *pf)
|
||||
if (vlan_ops->dis_rx_filtering(uplink_vsi))
|
||||
goto err_vlan_filtering;
|
||||
|
||||
if (ice_vsi_update_security(uplink_vsi, ice_vsi_ctx_set_allow_override))
|
||||
goto err_override_uplink;
|
||||
|
||||
if (ice_vsi_update_local_lb(uplink_vsi, true))
|
||||
goto err_override_local_lb;
|
||||
|
||||
@@ -63,8 +60,6 @@ static int ice_eswitch_setup_env(struct ice_pf *pf)
|
||||
err_up:
|
||||
ice_vsi_update_local_lb(uplink_vsi, false);
|
||||
err_override_local_lb:
|
||||
ice_vsi_update_security(uplink_vsi, ice_vsi_ctx_clear_allow_override);
|
||||
err_override_uplink:
|
||||
vlan_ops->ena_rx_filtering(uplink_vsi);
|
||||
err_vlan_filtering:
|
||||
ice_cfg_dflt_vsi(uplink_vsi->port_info, uplink_vsi->idx, false,
|
||||
@@ -275,7 +270,6 @@ static void ice_eswitch_release_env(struct ice_pf *pf)
|
||||
vlan_ops = ice_get_compat_vsi_vlan_ops(uplink_vsi);
|
||||
|
||||
ice_vsi_update_local_lb(uplink_vsi, false);
|
||||
ice_vsi_update_security(uplink_vsi, ice_vsi_ctx_clear_allow_override);
|
||||
vlan_ops->ena_rx_filtering(uplink_vsi);
|
||||
ice_cfg_dflt_vsi(uplink_vsi->port_info, uplink_vsi->idx, false,
|
||||
ICE_FLTR_TX);
|
||||
|
||||
@@ -1000,6 +1000,28 @@ static void ice_lag_link(struct ice_lag *lag)
|
||||
netdev_info(lag->netdev, "Shared SR-IOV resources in bond are active\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_lag_config_eswitch - configure eswitch to work with LAG
|
||||
* @lag: lag info struct
|
||||
* @netdev: active network interface device struct
|
||||
*
|
||||
* Updates all port representors in eswitch to use @netdev for Tx.
|
||||
*
|
||||
* Configures the netdev to keep dst metadata (also used in representor Tx).
|
||||
* This is required for an uplink without switchdev mode configured.
|
||||
*/
|
||||
static void ice_lag_config_eswitch(struct ice_lag *lag,
|
||||
struct net_device *netdev)
|
||||
{
|
||||
struct ice_repr *repr;
|
||||
unsigned long id;
|
||||
|
||||
xa_for_each(&lag->pf->eswitch.reprs, id, repr)
|
||||
repr->dst->u.port_info.lower_dev = netdev;
|
||||
|
||||
netif_keep_dst(netdev);
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_lag_unlink - handle unlink event
|
||||
* @lag: LAG info struct
|
||||
@@ -1021,6 +1043,9 @@ static void ice_lag_unlink(struct ice_lag *lag)
|
||||
ice_lag_move_vf_nodes(lag, act_port, pri_port);
|
||||
lag->primary = false;
|
||||
lag->active_port = ICE_LAG_INVALID_PORT;
|
||||
|
||||
/* Config primary's eswitch back to normal operation. */
|
||||
ice_lag_config_eswitch(lag, lag->netdev);
|
||||
} else {
|
||||
struct ice_lag *primary_lag;
|
||||
|
||||
@@ -1419,6 +1444,7 @@ static void ice_lag_monitor_active(struct ice_lag *lag, void *ptr)
|
||||
ice_lag_move_vf_nodes(lag, prim_port,
|
||||
event_port);
|
||||
lag->active_port = event_port;
|
||||
ice_lag_config_eswitch(lag, event_netdev);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1428,6 +1454,7 @@ static void ice_lag_monitor_active(struct ice_lag *lag, void *ptr)
|
||||
/* new active port */
|
||||
ice_lag_move_vf_nodes(lag, lag->active_port, event_port);
|
||||
lag->active_port = event_port;
|
||||
ice_lag_config_eswitch(lag, event_netdev);
|
||||
} else {
|
||||
/* port not set as currently active (e.g. new active port
|
||||
* has already claimed the nodes and filters
|
||||
|
||||
@@ -3936,24 +3936,6 @@ void ice_vsi_ctx_clear_antispoof(struct ice_vsi_ctx *ctx)
|
||||
ICE_AQ_VSI_SEC_TX_PRUNE_ENA_S);
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_vsi_ctx_set_allow_override - allow destination override on VSI
|
||||
* @ctx: pointer to VSI ctx structure
|
||||
*/
|
||||
void ice_vsi_ctx_set_allow_override(struct ice_vsi_ctx *ctx)
|
||||
{
|
||||
ctx->info.sec_flags |= ICE_AQ_VSI_SEC_FLAG_ALLOW_DEST_OVRD;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_vsi_ctx_clear_allow_override - turn off destination override on VSI
|
||||
* @ctx: pointer to VSI ctx structure
|
||||
*/
|
||||
void ice_vsi_ctx_clear_allow_override(struct ice_vsi_ctx *ctx)
|
||||
{
|
||||
ctx->info.sec_flags &= ~ICE_AQ_VSI_SEC_FLAG_ALLOW_DEST_OVRD;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_vsi_update_local_lb - update sw block in VSI with local loopback bit
|
||||
* @vsi: pointer to VSI structure
|
||||
|
||||
@@ -105,10 +105,6 @@ ice_vsi_update_security(struct ice_vsi *vsi, void (*fill)(struct ice_vsi_ctx *))
|
||||
void ice_vsi_ctx_set_antispoof(struct ice_vsi_ctx *ctx);
|
||||
|
||||
void ice_vsi_ctx_clear_antispoof(struct ice_vsi_ctx *ctx);
|
||||
|
||||
void ice_vsi_ctx_set_allow_override(struct ice_vsi_ctx *ctx);
|
||||
|
||||
void ice_vsi_ctx_clear_allow_override(struct ice_vsi_ctx *ctx);
|
||||
int ice_vsi_update_local_lb(struct ice_vsi *vsi, bool set);
|
||||
int ice_vsi_add_vlan_zero(struct ice_vsi *vsi);
|
||||
int ice_vsi_del_vlan_zero(struct ice_vsi *vsi);
|
||||
|
||||
@@ -5065,16 +5065,16 @@ static int ice_init_devlink(struct ice_pf *pf)
|
||||
return err;
|
||||
|
||||
ice_devlink_init_regions(pf);
|
||||
ice_health_init(pf);
|
||||
ice_devlink_register(pf);
|
||||
ice_health_init(pf);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ice_deinit_devlink(struct ice_pf *pf)
|
||||
{
|
||||
ice_devlink_unregister(pf);
|
||||
ice_health_deinit(pf);
|
||||
ice_devlink_unregister(pf);
|
||||
ice_devlink_destroy_regions(pf);
|
||||
ice_devlink_unregister_params(pf);
|
||||
}
|
||||
|
||||
@@ -2424,7 +2424,9 @@ ice_xmit_frame_ring(struct sk_buff *skb, struct ice_tx_ring *tx_ring)
|
||||
ICE_TXD_CTX_QW1_CMD_S);
|
||||
|
||||
ice_tstamp(tx_ring, skb, first, &offload);
|
||||
if (ice_is_switchdev_running(vsi->back) && vsi->type != ICE_VSI_SF)
|
||||
if ((ice_is_switchdev_running(vsi->back) ||
|
||||
ice_lag_is_switchdev_running(vsi->back)) &&
|
||||
vsi->type != ICE_VSI_SF)
|
||||
ice_eswitch_set_target_vsi(skb, &offload);
|
||||
|
||||
if (offload.cd_qw1 & ICE_TX_DESC_DTYPE_CTX) {
|
||||
|
||||
Reference in New Issue
Block a user