ACK. Thanks,
Brett > -----Original Message----- > From: Nguyen, Anthony L <[email protected]> > Sent: Wednesday, July 29, 2020 9:24 AM > To: [email protected] > Cc: Creeley, Brett <[email protected]>; [email protected]; > [email protected]; [email protected]; Kirsher, > Jeffrey T <[email protected]>; Nguyen, Anthony L > <[email protected]>; Bowers, AndrewX > <[email protected]> > Subject: [net-next 11/15] ice: Allow all VLANs in safe mode > > From: Brett Creeley <[email protected]> > > Currently the PF VSI's context parameters are left in a bad state when > going into safe mode. This is causing VLAN traffic to not pass. Fix this > by configuring the PF VSI to allow all VLAN tagged traffic. > > Also, remove redundant comment explaining the safe mode flow in > ice_probe(). > > Signed-off-by: Brett Creeley <[email protected]> > Tested-by: Andrew Bowers <[email protected]> > Signed-off-by: Tony Nguyen <[email protected]> > --- > drivers/net/ethernet/intel/ice/ice_main.c | 59 ++++++++++++++++++++++- > 1 file changed, 57 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/ethernet/intel/ice/ice_main.c > b/drivers/net/ethernet/intel/ice/ice_main.c > index 9b9e30a7d690..a68371fc0a75 100644 > --- a/drivers/net/ethernet/intel/ice/ice_main.c > +++ b/drivers/net/ethernet/intel/ice/ice_main.c > @@ -3583,6 +3583,60 @@ int ice_vsi_recfg_qs(struct ice_vsi *vsi, int new_rx, > int new_tx) > return err; > } > > +/** > + * ice_set_safe_mode_vlan_cfg - configure PF VSI to allow all VLANs in safe > mode > + * @pf: PF to configure > + * > + * No VLAN offloads/filtering are advertised in safe mode so make sure the PF > + * VSI can still Tx/Rx VLAN tagged packets. > + */ > +static void ice_set_safe_mode_vlan_cfg(struct ice_pf *pf) > +{ > + struct ice_vsi *vsi = ice_get_main_vsi(pf); > + struct ice_vsi_ctx *ctxt; > + enum ice_status status; > + struct ice_hw *hw; > + > + if (!vsi) > + return; > + > + ctxt = kzalloc(sizeof(*ctxt), GFP_KERNEL); > + if (!ctxt) > + return; > + > + hw = &pf->hw; > + ctxt->info = vsi->info; > + > + ctxt->info.valid_sections = > + cpu_to_le16(ICE_AQ_VSI_PROP_VLAN_VALID | > + ICE_AQ_VSI_PROP_SECURITY_VALID | > + ICE_AQ_VSI_PROP_SW_VALID); > + > + /* disable VLAN anti-spoof */ > + ctxt->info.sec_flags &= ~(ICE_AQ_VSI_SEC_TX_VLAN_PRUNE_ENA << > + ICE_AQ_VSI_SEC_TX_PRUNE_ENA_S); > + > + /* disable VLAN pruning and keep all other settings */ > + ctxt->info.sw_flags2 &= ~ICE_AQ_VSI_SW_FLAG_RX_VLAN_PRUNE_ENA; > + > + /* allow all VLANs on Tx and don't strip on Rx */ > + ctxt->info.vlan_flags = ICE_AQ_VSI_VLAN_MODE_ALL | > + ICE_AQ_VSI_VLAN_EMOD_NOTHING; > + > + status = ice_update_vsi(hw, vsi->idx, ctxt, NULL); > + if (status) { > + dev_err(ice_pf_to_dev(vsi->back), "Failed to update VSI for > safe mode VLANs, err %s aq_err %s\n", > + ice_stat_str(status), > + ice_aq_str(hw->adminq.sq_last_status)); > + } else { > + vsi->info.sec_flags = ctxt->info.sec_flags; > + vsi->info.sw_flags2 = ctxt->info.sw_flags2; > + vsi->info.vlan_flags = ctxt->info.vlan_flags; > + } > + > + kfree(ctxt); > +} > + > /** > * ice_log_pkg_init - log result of DDP package load > * @hw: pointer to hardware info > @@ -4139,9 +4193,10 @@ ice_probe(struct pci_dev *pdev, const struct > pci_device_id __always_unused *ent) > /* Disable WoL at init, wait for user to enable */ > device_set_wakeup_enable(dev, false); > > - /* If no DDP driven features have to be setup, we are done with probe */ > - if (ice_is_safe_mode(pf)) > + if (ice_is_safe_mode(pf)) { > + ice_set_safe_mode_vlan_cfg(pf); > goto probe_done; > + } > > /* initialize DDP driven features */ > > -- > 2.26.2
