ice: log message when trusted VF goes in/out of promisc mode

Currently there is no message printed on the host when a VF goes in and
out of promiscuous mode. This is causing confusion because this is the
expected behavior based on i40e. Fix this.

Signed-off-by: Brett Creeley <brett.creeley@intel.com>
Tested-by: Tony Brelinski <tonyx.brelinski@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
This commit is contained in:
Brett Creeley 2020-09-17 13:13:36 -07:00 committed by Tony Nguyen
parent 08cbabb77e
commit 382e0a6880

View file

@ -2312,12 +2312,12 @@ bool ice_is_any_vf_in_promisc(struct ice_pf *pf)
static int ice_vc_cfg_promiscuous_mode_msg(struct ice_vf *vf, u8 *msg) static int ice_vc_cfg_promiscuous_mode_msg(struct ice_vf *vf, u8 *msg)
{ {
enum virtchnl_status_code v_ret = VIRTCHNL_STATUS_SUCCESS; enum virtchnl_status_code v_ret = VIRTCHNL_STATUS_SUCCESS;
bool rm_promisc, alluni = false, allmulti = false;
struct virtchnl_promisc_info *info = struct virtchnl_promisc_info *info =
(struct virtchnl_promisc_info *)msg; (struct virtchnl_promisc_info *)msg;
struct ice_pf *pf = vf->pf; struct ice_pf *pf = vf->pf;
struct ice_vsi *vsi; struct ice_vsi *vsi;
struct device *dev; struct device *dev;
bool rm_promisc;
int ret = 0; int ret = 0;
if (!test_bit(ICE_VF_STATE_ACTIVE, vf->vf_states)) { if (!test_bit(ICE_VF_STATE_ACTIVE, vf->vf_states)) {
@ -2344,8 +2344,13 @@ static int ice_vc_cfg_promiscuous_mode_msg(struct ice_vf *vf, u8 *msg)
goto error_param; goto error_param;
} }
rm_promisc = !(info->flags & FLAG_VF_UNICAST_PROMISC) && if (info->flags & FLAG_VF_UNICAST_PROMISC)
!(info->flags & FLAG_VF_MULTICAST_PROMISC); alluni = true;
if (info->flags & FLAG_VF_MULTICAST_PROMISC)
allmulti = true;
rm_promisc = !allmulti && !alluni;
if (vsi->num_vlan || vf->port_vlan_info) { if (vsi->num_vlan || vf->port_vlan_info) {
struct ice_vsi *pf_vsi = ice_get_main_vsi(pf); struct ice_vsi *pf_vsi = ice_get_main_vsi(pf);
@ -2399,12 +2404,12 @@ static int ice_vc_cfg_promiscuous_mode_msg(struct ice_vf *vf, u8 *msg)
enum ice_status status; enum ice_status status;
u8 promisc_m; u8 promisc_m;
if (info->flags & FLAG_VF_UNICAST_PROMISC) { if (alluni) {
if (vf->port_vlan_info || vsi->num_vlan) if (vf->port_vlan_info || vsi->num_vlan)
promisc_m = ICE_UCAST_VLAN_PROMISC_BITS; promisc_m = ICE_UCAST_VLAN_PROMISC_BITS;
else else
promisc_m = ICE_UCAST_PROMISC_BITS; promisc_m = ICE_UCAST_PROMISC_BITS;
} else if (info->flags & FLAG_VF_MULTICAST_PROMISC) { } else if (allmulti) {
if (vf->port_vlan_info || vsi->num_vlan) if (vf->port_vlan_info || vsi->num_vlan)
promisc_m = ICE_MCAST_VLAN_PROMISC_BITS; promisc_m = ICE_MCAST_VLAN_PROMISC_BITS;
else else
@ -2432,15 +2437,16 @@ static int ice_vc_cfg_promiscuous_mode_msg(struct ice_vf *vf, u8 *msg)
} }
} }
if (info->flags & FLAG_VF_MULTICAST_PROMISC) if (allmulti &&
set_bit(ICE_VF_STATE_MC_PROMISC, vf->vf_states); !test_and_set_bit(ICE_VF_STATE_MC_PROMISC, vf->vf_states))
else dev_info(dev, "VF %u successfully set multicast promiscuous mode\n", vf->vf_id);
clear_bit(ICE_VF_STATE_MC_PROMISC, vf->vf_states); else if (!allmulti && test_and_clear_bit(ICE_VF_STATE_MC_PROMISC, vf->vf_states))
dev_info(dev, "VF %u successfully unset multicast promiscuous mode\n", vf->vf_id);
if (info->flags & FLAG_VF_UNICAST_PROMISC) if (alluni && !test_and_set_bit(ICE_VF_STATE_UC_PROMISC, vf->vf_states))
set_bit(ICE_VF_STATE_UC_PROMISC, vf->vf_states); dev_info(dev, "VF %u successfully set unicast promiscuous mode\n", vf->vf_id);
else else if (!alluni && test_and_clear_bit(ICE_VF_STATE_UC_PROMISC, vf->vf_states))
clear_bit(ICE_VF_STATE_UC_PROMISC, vf->vf_states); dev_info(dev, "VF %u successfully unset unicast promiscuous mode\n", vf->vf_id);
error_param: error_param:
return ice_vc_send_msg_to_vf(vf, VIRTCHNL_OP_CONFIG_PROMISCUOUS_MODE, return ice_vc_send_msg_to_vf(vf, VIRTCHNL_OP_CONFIG_PROMISCUOUS_MODE,