mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-24 20:19:11 -04:00
ice: extract virt/queues.c: cleanup - p2
Remove next piece of the content that stays in virtchnl.c, (separate commits to have nicer git history). Signed-off-by: Przemek Kitszel <przemyslaw.kitszel@intel.com> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
This commit is contained in:
@@ -161,187 +161,6 @@ static int ice_vf_cfg_q_quanta_profile(struct ice_vf *vf, u16 quanta_size,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_vc_cfg_promiscuous_mode_msg
|
||||
* @vf: pointer to the VF info
|
||||
* @msg: pointer to the msg buffer
|
||||
*
|
||||
* called from the VF to configure VF VSIs promiscuous mode
|
||||
*/
|
||||
static int ice_vc_cfg_promiscuous_mode_msg(struct ice_vf *vf, u8 *msg)
|
||||
{
|
||||
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 *)msg;
|
||||
struct ice_vsi_vlan_ops *vlan_ops;
|
||||
int mcast_err = 0, ucast_err = 0;
|
||||
struct ice_pf *pf = vf->pf;
|
||||
struct ice_vsi *vsi;
|
||||
u8 mcast_m, ucast_m;
|
||||
struct device *dev;
|
||||
int ret = 0;
|
||||
|
||||
if (!test_bit(ICE_VF_STATE_ACTIVE, vf->vf_states)) {
|
||||
v_ret = VIRTCHNL_STATUS_ERR_PARAM;
|
||||
goto error_param;
|
||||
}
|
||||
|
||||
if (!ice_vc_isvalid_vsi_id(vf, info->vsi_id)) {
|
||||
v_ret = VIRTCHNL_STATUS_ERR_PARAM;
|
||||
goto error_param;
|
||||
}
|
||||
|
||||
vsi = ice_get_vf_vsi(vf);
|
||||
if (!vsi) {
|
||||
v_ret = VIRTCHNL_STATUS_ERR_PARAM;
|
||||
goto error_param;
|
||||
}
|
||||
|
||||
dev = ice_pf_to_dev(pf);
|
||||
if (!ice_is_vf_trusted(vf)) {
|
||||
dev_err(dev, "Unprivileged VF %d is attempting to configure promiscuous mode\n",
|
||||
vf->vf_id);
|
||||
/* Leave v_ret alone, lie to the VF on purpose. */
|
||||
goto error_param;
|
||||
}
|
||||
|
||||
if (info->flags & FLAG_VF_UNICAST_PROMISC)
|
||||
alluni = true;
|
||||
|
||||
if (info->flags & FLAG_VF_MULTICAST_PROMISC)
|
||||
allmulti = true;
|
||||
|
||||
rm_promisc = !allmulti && !alluni;
|
||||
|
||||
vlan_ops = ice_get_compat_vsi_vlan_ops(vsi);
|
||||
if (rm_promisc)
|
||||
ret = vlan_ops->ena_rx_filtering(vsi);
|
||||
else
|
||||
ret = vlan_ops->dis_rx_filtering(vsi);
|
||||
if (ret) {
|
||||
dev_err(dev, "Failed to configure VLAN pruning in promiscuous mode\n");
|
||||
v_ret = VIRTCHNL_STATUS_ERR_PARAM;
|
||||
goto error_param;
|
||||
}
|
||||
|
||||
ice_vf_get_promisc_masks(vf, vsi, &ucast_m, &mcast_m);
|
||||
|
||||
if (!test_bit(ICE_FLAG_VF_TRUE_PROMISC_ENA, pf->flags)) {
|
||||
if (alluni) {
|
||||
/* in this case we're turning on promiscuous mode */
|
||||
ret = ice_set_dflt_vsi(vsi);
|
||||
} else {
|
||||
/* in this case we're turning off promiscuous mode */
|
||||
if (ice_is_dflt_vsi_in_use(vsi->port_info))
|
||||
ret = ice_clear_dflt_vsi(vsi);
|
||||
}
|
||||
|
||||
/* in this case we're turning on/off only
|
||||
* allmulticast
|
||||
*/
|
||||
if (allmulti)
|
||||
mcast_err = ice_vf_set_vsi_promisc(vf, vsi, mcast_m);
|
||||
else
|
||||
mcast_err = ice_vf_clear_vsi_promisc(vf, vsi, mcast_m);
|
||||
|
||||
if (ret) {
|
||||
dev_err(dev, "Turning on/off promiscuous mode for VF %d failed, error: %d\n",
|
||||
vf->vf_id, ret);
|
||||
v_ret = VIRTCHNL_STATUS_ERR_ADMIN_QUEUE_ERROR;
|
||||
goto error_param;
|
||||
}
|
||||
} else {
|
||||
if (alluni)
|
||||
ucast_err = ice_vf_set_vsi_promisc(vf, vsi, ucast_m);
|
||||
else
|
||||
ucast_err = ice_vf_clear_vsi_promisc(vf, vsi, ucast_m);
|
||||
|
||||
if (allmulti)
|
||||
mcast_err = ice_vf_set_vsi_promisc(vf, vsi, mcast_m);
|
||||
else
|
||||
mcast_err = ice_vf_clear_vsi_promisc(vf, vsi, mcast_m);
|
||||
|
||||
if (ucast_err || mcast_err)
|
||||
v_ret = VIRTCHNL_STATUS_ERR_PARAM;
|
||||
}
|
||||
|
||||
if (!mcast_err) {
|
||||
if (allmulti &&
|
||||
!test_and_set_bit(ICE_VF_STATE_MC_PROMISC, vf->vf_states))
|
||||
dev_info(dev, "VF %u successfully set multicast promiscuous mode\n",
|
||||
vf->vf_id);
|
||||
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);
|
||||
} else {
|
||||
dev_err(dev, "Error while modifying multicast promiscuous mode for VF %u, error: %d\n",
|
||||
vf->vf_id, mcast_err);
|
||||
}
|
||||
|
||||
if (!ucast_err) {
|
||||
if (alluni &&
|
||||
!test_and_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 if (!alluni &&
|
||||
test_and_clear_bit(ICE_VF_STATE_UC_PROMISC,
|
||||
vf->vf_states))
|
||||
dev_info(dev, "VF %u successfully unset unicast promiscuous mode\n",
|
||||
vf->vf_id);
|
||||
} else {
|
||||
dev_err(dev, "Error while modifying unicast promiscuous mode for VF %u, error: %d\n",
|
||||
vf->vf_id, ucast_err);
|
||||
}
|
||||
|
||||
error_param:
|
||||
return ice_vc_send_msg_to_vf(vf, VIRTCHNL_OP_CONFIG_PROMISCUOUS_MODE,
|
||||
v_ret, NULL, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_vc_get_stats_msg
|
||||
* @vf: pointer to the VF info
|
||||
* @msg: pointer to the msg buffer
|
||||
*
|
||||
* called from the VF to get VSI stats
|
||||
*/
|
||||
static int ice_vc_get_stats_msg(struct ice_vf *vf, u8 *msg)
|
||||
{
|
||||
enum virtchnl_status_code v_ret = VIRTCHNL_STATUS_SUCCESS;
|
||||
struct virtchnl_queue_select *vqs =
|
||||
(struct virtchnl_queue_select *)msg;
|
||||
struct ice_eth_stats stats = { 0 };
|
||||
struct ice_vsi *vsi;
|
||||
|
||||
if (!test_bit(ICE_VF_STATE_ACTIVE, vf->vf_states)) {
|
||||
v_ret = VIRTCHNL_STATUS_ERR_PARAM;
|
||||
goto error_param;
|
||||
}
|
||||
|
||||
if (!ice_vc_isvalid_vsi_id(vf, vqs->vsi_id)) {
|
||||
v_ret = VIRTCHNL_STATUS_ERR_PARAM;
|
||||
goto error_param;
|
||||
}
|
||||
|
||||
vsi = ice_get_vf_vsi(vf);
|
||||
if (!vsi) {
|
||||
v_ret = VIRTCHNL_STATUS_ERR_PARAM;
|
||||
goto error_param;
|
||||
}
|
||||
|
||||
ice_update_eth_stats(vsi);
|
||||
|
||||
stats = vsi->eth_stats;
|
||||
|
||||
error_param:
|
||||
/* send the response to the VF */
|
||||
return ice_vc_send_msg_to_vf(vf, VIRTCHNL_OP_GET_STATS, v_ret,
|
||||
(u8 *)&stats, sizeof(stats));
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_vc_validate_vqs_bitmaps - validate Rx/Tx queue bitmaps from VIRTCHNL
|
||||
* @vqs: virtchnl_queue_select structure containing bitmaps to validate
|
||||
|
||||
Reference in New Issue
Block a user