Commit fff5cca3 authored by Michal Swiatkowski's avatar Michal Swiatkowski Committed by Tony Nguyen

ice: update representor when VSI is ready

In case of reset of VF VSI can be reallocated. To handle this case it
should be properly updated.

Reload representor as vsi->vsi_num can be different than the one stored
when representor was created.

Instead of only changing antispoof do whole VSI configuration for
eswitch.
Signed-off-by: default avatarMichal Swiatkowski <michal.swiatkowski@linux.intel.com>
Reviewed-by: default avatarSimon Horman <horms@kernel.org>
Tested-by: default avatarSujai Buvaneswaran <sujai.buvaneswaran@intel.com>
Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
parent 4d364df2
...@@ -178,16 +178,16 @@ void ice_eswitch_decfg_vsi(struct ice_vsi *vsi, const u8 *mac) ...@@ -178,16 +178,16 @@ void ice_eswitch_decfg_vsi(struct ice_vsi *vsi, const u8 *mac)
* @repr_id: representor ID * @repr_id: representor ID
* @vsi: VSI for which port representor is configured * @vsi: VSI for which port representor is configured
*/ */
void ice_eswitch_update_repr(unsigned long repr_id, struct ice_vsi *vsi) void ice_eswitch_update_repr(unsigned long *repr_id, struct ice_vsi *vsi)
{ {
struct ice_pf *pf = vsi->back; struct ice_pf *pf = vsi->back;
struct ice_repr *repr; struct ice_repr *repr;
int ret; int err;
if (!ice_is_switchdev_running(pf)) if (!ice_is_switchdev_running(pf))
return; return;
repr = xa_load(&pf->eswitch.reprs, repr_id); repr = xa_load(&pf->eswitch.reprs, *repr_id);
if (!repr) if (!repr)
return; return;
...@@ -197,12 +197,19 @@ void ice_eswitch_update_repr(unsigned long repr_id, struct ice_vsi *vsi) ...@@ -197,12 +197,19 @@ void ice_eswitch_update_repr(unsigned long repr_id, struct ice_vsi *vsi)
if (repr->br_port) if (repr->br_port)
repr->br_port->vsi = vsi; repr->br_port->vsi = vsi;
ret = ice_vsi_update_security(vsi, ice_vsi_ctx_clear_antispoof); err = ice_eswitch_cfg_vsi(vsi, repr->parent_mac);
if (ret) { if (err)
ice_fltr_add_mac_and_broadcast(vsi, repr->parent_mac,
ICE_FWD_TO_VSI);
dev_err(ice_pf_to_dev(pf), "Failed to update VSI of port representor %d", dev_err(ice_pf_to_dev(pf), "Failed to update VSI of port representor %d",
repr->id); repr->id);
/* The VSI number is different, reload the PR with new id */
if (repr->id != vsi->vsi_num) {
xa_erase(&pf->eswitch.reprs, repr->id);
repr->id = vsi->vsi_num;
if (xa_insert(&pf->eswitch.reprs, repr->id, repr, GFP_KERNEL))
dev_err(ice_pf_to_dev(pf), "Failed to reload port representor %d",
repr->id);
*repr_id = repr->id;
} }
} }
......
...@@ -18,7 +18,7 @@ ice_eswitch_mode_set(struct devlink *devlink, u16 mode, ...@@ -18,7 +18,7 @@ ice_eswitch_mode_set(struct devlink *devlink, u16 mode,
struct netlink_ext_ack *extack); struct netlink_ext_ack *extack);
bool ice_is_eswitch_mode_switchdev(struct ice_pf *pf); bool ice_is_eswitch_mode_switchdev(struct ice_pf *pf);
void ice_eswitch_update_repr(unsigned long repr_id, struct ice_vsi *vsi); void ice_eswitch_update_repr(unsigned long *repr_id, struct ice_vsi *vsi);
void ice_eswitch_stop_all_tx_queues(struct ice_pf *pf); void ice_eswitch_stop_all_tx_queues(struct ice_pf *pf);
...@@ -47,7 +47,7 @@ ice_eswitch_set_target_vsi(struct sk_buff *skb, ...@@ -47,7 +47,7 @@ ice_eswitch_set_target_vsi(struct sk_buff *skb,
struct ice_tx_offload_params *off) { } struct ice_tx_offload_params *off) { }
static inline void static inline void
ice_eswitch_update_repr(unsigned long repr_id, struct ice_vsi *vsi) { } ice_eswitch_update_repr(unsigned long *repr_id, struct ice_vsi *vsi) { }
static inline int ice_eswitch_configure(struct ice_pf *pf) static inline int ice_eswitch_configure(struct ice_pf *pf)
{ {
......
...@@ -948,7 +948,7 @@ int ice_reset_vf(struct ice_vf *vf, u32 flags) ...@@ -948,7 +948,7 @@ int ice_reset_vf(struct ice_vf *vf, u32 flags)
goto out_unlock; goto out_unlock;
} }
ice_eswitch_update_repr(vf->repr_id, vsi); ice_eswitch_update_repr(&vf->repr_id, vsi);
/* if the VF has been reset allow it to come up again */ /* if the VF has been reset allow it to come up again */
ice_mbx_clear_malvf(&vf->mbx_info); ice_mbx_clear_malvf(&vf->mbx_info);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment