Merge branch '100GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue
Tony Nguyen says: ==================== 100GbE Intel Wired LAN Driver Updates 2022-05-05 This series contains updates to ice driver only. Wan Jiabing converts an open coded min selection to min_t(). Maciej commonizes on a single find VSI function and removes the duplicated implementation. Wojciech adjusts the return value when exceeding ICE_MAX_CHAIN_WORDS to, a more appropriate, -ENOSPC and allows for the error to be propagated. Michal adds support for ndo_get_devlink_port(). Jake does some cleanup related to virtualization code. Mainly involving function header comments and wording changes. NULL checks are added to ice_get_vf_vsi() calls in order to prevent static analysis tools from complaining that a NULL value could be dereferenced. --- v2: Dropped patch 1: "ice: Add support for classid based queue selection" ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
76a8426959
|
@ -757,6 +757,21 @@ static inline struct ice_vsi *ice_get_ctrl_vsi(struct ice_pf *pf)
|
|||
return pf->vsi[pf->ctrl_vsi_idx];
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_find_vsi - Find the VSI from VSI ID
|
||||
* @pf: The PF pointer to search in
|
||||
* @vsi_num: The VSI ID to search for
|
||||
*/
|
||||
static inline struct ice_vsi *ice_find_vsi(struct ice_pf *pf, u16 vsi_num)
|
||||
{
|
||||
int i;
|
||||
|
||||
ice_for_each_vsi(pf, i)
|
||||
if (pf->vsi[i] && pf->vsi[i]->vsi_num == vsi_num)
|
||||
return pf->vsi[i];
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_is_switchdev_running - check if switchdev is configured
|
||||
* @pf: pointer to PF structure
|
||||
|
|
|
@ -647,6 +647,23 @@ void ice_devlink_unregister(struct ice_pf *pf)
|
|||
devlink_unregister(priv_to_devlink(pf));
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_devlink_set_switch_id - Set unique switch id based on pci dsn
|
||||
* @pf: the PF to create a devlink port for
|
||||
* @ppid: struct with switch id information
|
||||
*/
|
||||
static void
|
||||
ice_devlink_set_switch_id(struct ice_pf *pf, struct netdev_phys_item_id *ppid)
|
||||
{
|
||||
struct pci_dev *pdev = pf->pdev;
|
||||
u64 id;
|
||||
|
||||
id = pci_get_dsn(pdev);
|
||||
|
||||
ppid->id_len = sizeof(id);
|
||||
put_unaligned_be64(id, &ppid->id);
|
||||
}
|
||||
|
||||
int ice_devlink_register_params(struct ice_pf *pf)
|
||||
{
|
||||
struct devlink *devlink = priv_to_devlink(pf);
|
||||
|
@ -704,6 +721,9 @@ int ice_devlink_create_pf_port(struct ice_pf *pf)
|
|||
|
||||
attrs.flavour = DEVLINK_PORT_FLAVOUR_PHYSICAL;
|
||||
attrs.phys.port_number = pf->hw.bus.func;
|
||||
|
||||
ice_devlink_set_switch_id(pf, &attrs.switch_id);
|
||||
|
||||
devlink_port_attrs_set(devlink_port, &attrs);
|
||||
devlink = priv_to_devlink(pf);
|
||||
|
||||
|
@ -753,13 +773,18 @@ int ice_devlink_create_vf_port(struct ice_vf *vf)
|
|||
|
||||
pf = vf->pf;
|
||||
dev = ice_pf_to_dev(pf);
|
||||
vsi = ice_get_vf_vsi(vf);
|
||||
devlink_port = &vf->devlink_port;
|
||||
|
||||
vsi = ice_get_vf_vsi(vf);
|
||||
if (!vsi)
|
||||
return -EINVAL;
|
||||
|
||||
attrs.flavour = DEVLINK_PORT_FLAVOUR_PCI_VF;
|
||||
attrs.pci_vf.pf = pf->hw.bus.func;
|
||||
attrs.pci_vf.vf = vf->vf_id;
|
||||
|
||||
ice_devlink_set_switch_id(pf, &attrs.switch_id);
|
||||
|
||||
devlink_port_attrs_set(devlink_port, &attrs);
|
||||
devlink = priv_to_devlink(pf);
|
||||
|
||||
|
|
|
@ -76,8 +76,7 @@ static void ice_gnss_read(struct kthread_work *work)
|
|||
for (i = 0; i < data_len; i += bytes_read) {
|
||||
u16 bytes_left = data_len - i;
|
||||
|
||||
bytes_read = bytes_left < ICE_MAX_I2C_DATA_SIZE ? bytes_left :
|
||||
ICE_MAX_I2C_DATA_SIZE;
|
||||
bytes_read = min_t(typeof(bytes_left), bytes_left, ICE_MAX_I2C_DATA_SIZE);
|
||||
|
||||
err = ice_aq_read_i2c(hw, link_topo, ICE_GNSS_UBX_I2C_BUS_ADDR,
|
||||
cpu_to_le16(ICE_GNSS_UBX_EMPTY_DATA),
|
||||
|
|
|
@ -47,21 +47,6 @@ void ice_send_event_to_aux(struct ice_pf *pf, struct iidc_event *event)
|
|||
device_unlock(&pf->adev->dev);
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_find_vsi - Find the VSI from VSI ID
|
||||
* @pf: The PF pointer to search in
|
||||
* @vsi_num: The VSI ID to search for
|
||||
*/
|
||||
static struct ice_vsi *ice_find_vsi(struct ice_pf *pf, u16 vsi_num)
|
||||
{
|
||||
int i;
|
||||
|
||||
ice_for_each_vsi(pf, i)
|
||||
if (pf->vsi[i] && pf->vsi[i]->vsi_num == vsi_num)
|
||||
return pf->vsi[i];
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_add_rdma_qset - Add Leaf Node for RDMA Qset
|
||||
* @pf: PF struct
|
||||
|
|
|
@ -296,6 +296,20 @@ static int ice_clear_promisc(struct ice_vsi *vsi, u8 promisc_m)
|
|||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_get_devlink_port - Get devlink port from netdev
|
||||
* @netdev: the netdevice structure
|
||||
*/
|
||||
static struct devlink_port *ice_get_devlink_port(struct net_device *netdev)
|
||||
{
|
||||
struct ice_pf *pf = ice_netdev_to_pf(netdev);
|
||||
|
||||
if (!ice_is_switchdev_running(pf))
|
||||
return NULL;
|
||||
|
||||
return &pf->devlink_port;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_vsi_sync_fltr - Update the VSI filter list to the HW
|
||||
* @vsi: ptr to the VSI
|
||||
|
@ -8926,4 +8940,5 @@ static const struct net_device_ops ice_netdev_ops = {
|
|||
.ndo_bpf = ice_xdp,
|
||||
.ndo_xdp_xmit = ice_xdp_xmit,
|
||||
.ndo_xsk_wakeup = ice_xsk_wakeup,
|
||||
.ndo_get_devlink_port = ice_get_devlink_port,
|
||||
};
|
||||
|
|
|
@ -293,8 +293,13 @@ static int ice_repr_add(struct ice_vf *vf)
|
|||
struct ice_q_vector *q_vector;
|
||||
struct ice_netdev_priv *np;
|
||||
struct ice_repr *repr;
|
||||
struct ice_vsi *vsi;
|
||||
int err;
|
||||
|
||||
vsi = ice_get_vf_vsi(vf);
|
||||
if (!vsi)
|
||||
return -EINVAL;
|
||||
|
||||
repr = kzalloc(sizeof(*repr), GFP_KERNEL);
|
||||
if (!repr)
|
||||
return -ENOMEM;
|
||||
|
@ -313,7 +318,7 @@ static int ice_repr_add(struct ice_vf *vf)
|
|||
goto err_alloc;
|
||||
}
|
||||
|
||||
repr->src_vsi = ice_get_vf_vsi(vf);
|
||||
repr->src_vsi = vsi;
|
||||
repr->vf = vf;
|
||||
vf->repr = repr;
|
||||
np = netdev_priv(repr->netdev);
|
||||
|
|
|
@ -46,7 +46,12 @@ static void ice_free_vf_entries(struct ice_pf *pf)
|
|||
*/
|
||||
static void ice_vf_vsi_release(struct ice_vf *vf)
|
||||
{
|
||||
ice_vsi_release(ice_get_vf_vsi(vf));
|
||||
struct ice_vsi *vsi = ice_get_vf_vsi(vf);
|
||||
|
||||
if (WARN_ON(!vsi))
|
||||
return;
|
||||
|
||||
ice_vsi_release(vsi);
|
||||
ice_vf_invalidate_vsi(vf);
|
||||
}
|
||||
|
||||
|
@ -104,6 +109,8 @@ static void ice_dis_vf_mappings(struct ice_vf *vf)
|
|||
|
||||
hw = &pf->hw;
|
||||
vsi = ice_get_vf_vsi(vf);
|
||||
if (WARN_ON(!vsi))
|
||||
return;
|
||||
|
||||
dev = ice_pf_to_dev(pf);
|
||||
wr32(hw, VPINT_ALLOC(vf->vf_id), 0);
|
||||
|
@ -341,6 +348,9 @@ static void ice_ena_vf_q_mappings(struct ice_vf *vf, u16 max_txq, u16 max_rxq)
|
|||
struct ice_hw *hw = &vf->pf->hw;
|
||||
u32 reg;
|
||||
|
||||
if (WARN_ON(!vsi))
|
||||
return;
|
||||
|
||||
/* set regardless of mapping mode */
|
||||
wr32(hw, VPLAN_TXQ_MAPENA(vf->vf_id), VPLAN_TXQ_MAPENA_TX_ENA_M);
|
||||
|
||||
|
@ -386,6 +396,9 @@ static void ice_ena_vf_mappings(struct ice_vf *vf)
|
|||
{
|
||||
struct ice_vsi *vsi = ice_get_vf_vsi(vf);
|
||||
|
||||
if (WARN_ON(!vsi))
|
||||
return;
|
||||
|
||||
ice_ena_vf_msix_mappings(vf);
|
||||
ice_ena_vf_q_mappings(vf, vsi->alloc_txq, vsi->alloc_rxq);
|
||||
}
|
||||
|
@ -1128,6 +1141,8 @@ static struct ice_vf *ice_get_vf_from_pfq(struct ice_pf *pf, u16 pfq)
|
|||
u16 rxq_idx;
|
||||
|
||||
vsi = ice_get_vf_vsi(vf);
|
||||
if (!vsi)
|
||||
continue;
|
||||
|
||||
ice_for_each_rxq(vsi, rxq_idx)
|
||||
if (vsi->rxq_map[rxq_idx] == pfq) {
|
||||
|
@ -1521,8 +1536,15 @@ static int ice_calc_all_vfs_min_tx_rate(struct ice_pf *pf)
|
|||
static bool
|
||||
ice_min_tx_rate_oversubscribed(struct ice_vf *vf, int min_tx_rate)
|
||||
{
|
||||
int link_speed_mbps = ice_get_link_speed_mbps(ice_get_vf_vsi(vf));
|
||||
int all_vfs_min_tx_rate = ice_calc_all_vfs_min_tx_rate(vf->pf);
|
||||
struct ice_vsi *vsi = ice_get_vf_vsi(vf);
|
||||
int all_vfs_min_tx_rate;
|
||||
int link_speed_mbps;
|
||||
|
||||
if (WARN_ON(!vsi))
|
||||
return false;
|
||||
|
||||
link_speed_mbps = ice_get_link_speed_mbps(vsi);
|
||||
all_vfs_min_tx_rate = ice_calc_all_vfs_min_tx_rate(vf->pf);
|
||||
|
||||
/* this VF's previous rate is being overwritten */
|
||||
all_vfs_min_tx_rate -= vf->min_tx_rate;
|
||||
|
@ -1566,6 +1588,10 @@ ice_set_vf_bw(struct net_device *netdev, int vf_id, int min_tx_rate,
|
|||
goto out_put_vf;
|
||||
|
||||
vsi = ice_get_vf_vsi(vf);
|
||||
if (!vsi) {
|
||||
ret = -EINVAL;
|
||||
goto out_put_vf;
|
||||
}
|
||||
|
||||
/* when max_tx_rate is zero that means no max Tx rate limiting, so only
|
||||
* check if max_tx_rate is non-zero
|
||||
|
|
|
@ -5992,9 +5992,12 @@ ice_add_adv_rule(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups,
|
|||
word_cnt++;
|
||||
}
|
||||
|
||||
if (!word_cnt || word_cnt > ICE_MAX_CHAIN_WORDS)
|
||||
if (!word_cnt)
|
||||
return -EINVAL;
|
||||
|
||||
if (word_cnt > ICE_MAX_CHAIN_WORDS)
|
||||
return -ENOSPC;
|
||||
|
||||
/* locate a dummy packet */
|
||||
profile = ice_find_dummy_packet(lkups, lkups_cnt, rinfo->tun_type);
|
||||
|
||||
|
|
|
@ -622,7 +622,6 @@ ice_add_tc_flower_adv_fltr(struct ice_vsi *vsi,
|
|||
} else if (ret) {
|
||||
NL_SET_ERR_MSG_MOD(tc_fltr->extack,
|
||||
"Unable to add filter due to error");
|
||||
ret = -EIO;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
|
|
|
@ -220,8 +220,10 @@ static void ice_vf_clear_counters(struct ice_vf *vf)
|
|||
{
|
||||
struct ice_vsi *vsi = ice_get_vf_vsi(vf);
|
||||
|
||||
if (vsi)
|
||||
vsi->num_vlan = 0;
|
||||
|
||||
vf->num_mac = 0;
|
||||
vsi->num_vlan = 0;
|
||||
memset(&vf->mdd_tx_events, 0, sizeof(vf->mdd_tx_events));
|
||||
memset(&vf->mdd_rx_events, 0, sizeof(vf->mdd_rx_events));
|
||||
}
|
||||
|
@ -251,6 +253,9 @@ static int ice_vf_rebuild_vsi(struct ice_vf *vf)
|
|||
struct ice_vsi *vsi = ice_get_vf_vsi(vf);
|
||||
struct ice_pf *pf = vf->pf;
|
||||
|
||||
if (WARN_ON(!vsi))
|
||||
return -EINVAL;
|
||||
|
||||
if (ice_vsi_rebuild(vsi, true)) {
|
||||
dev_err(ice_pf_to_dev(pf), "failed to rebuild VF %d VSI\n",
|
||||
vf->vf_id);
|
||||
|
@ -354,12 +359,12 @@ ice_vf_clear_vsi_promisc(struct ice_vf *vf, struct ice_vsi *vsi, u8 promisc_m)
|
|||
* ice_reset_all_vfs - reset all allocated VFs in one go
|
||||
* @pf: pointer to the PF structure
|
||||
*
|
||||
* Reset all VFs at once, in response to a PF or other device reset.
|
||||
*
|
||||
* First, tell the hardware to reset each VF, then do all the waiting in one
|
||||
* chunk, and finally finish restoring each VF after the wait. This is useful
|
||||
* during PF routines which need to reset all VFs, as otherwise it must perform
|
||||
* these resets in a serialized fashion.
|
||||
*
|
||||
* Returns true if any VFs were reset, and false otherwise.
|
||||
*/
|
||||
void ice_reset_all_vfs(struct ice_pf *pf)
|
||||
{
|
||||
|
@ -472,8 +477,8 @@ static void ice_notify_vf_reset(struct ice_vf *vf)
|
|||
* ICE_VF_RESET_NOTIFY - Send VF a notification prior to reset
|
||||
* ICE_VF_RESET_LOCK - Acquire VF cfg_lock before resetting
|
||||
*
|
||||
* Returns 0 if the VF is currently in reset, if the resets are disabled, or
|
||||
* if the VF resets successfully. Returns an error code if the VF fails to
|
||||
* Returns 0 if the VF is currently in reset, if resets are disabled, or if
|
||||
* the VF resets successfully. Returns an error code if the VF fails to
|
||||
* rebuild.
|
||||
*/
|
||||
int ice_reset_vf(struct ice_vf *vf, u32 flags)
|
||||
|
@ -514,6 +519,10 @@ int ice_reset_vf(struct ice_vf *vf, u32 flags)
|
|||
ice_trigger_vf_reset(vf, flags & ICE_VF_RESET_VFLR, false);
|
||||
|
||||
vsi = ice_get_vf_vsi(vf);
|
||||
if (WARN_ON(!vsi)) {
|
||||
err = -EIO;
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
ice_dis_vf_qs(vf);
|
||||
|
||||
|
@ -572,6 +581,11 @@ int ice_reset_vf(struct ice_vf *vf, u32 flags)
|
|||
|
||||
vf->vf_ops->post_vsi_rebuild(vf);
|
||||
vsi = ice_get_vf_vsi(vf);
|
||||
if (WARN_ON(!vsi)) {
|
||||
err = -EINVAL;
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
ice_eswitch_update_repr(vsi);
|
||||
ice_eswitch_replay_vf_mac_rule(vf);
|
||||
|
||||
|
@ -610,6 +624,9 @@ void ice_dis_vf_qs(struct ice_vf *vf)
|
|||
{
|
||||
struct ice_vsi *vsi = ice_get_vf_vsi(vf);
|
||||
|
||||
if (WARN_ON(!vsi))
|
||||
return;
|
||||
|
||||
ice_vsi_stop_lan_tx_rings(vsi, ICE_NO_RESET, vf->vf_id);
|
||||
ice_vsi_stop_all_rx_rings(vsi);
|
||||
ice_set_vf_state_qs_dis(vf);
|
||||
|
@ -640,6 +657,13 @@ struct ice_port_info *ice_vf_get_port_info(struct ice_vf *vf)
|
|||
return vf->pf->hw.port_info;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_cfg_mac_antispoof - Configure MAC antispoof checking behavior
|
||||
* @vsi: the VSI to configure
|
||||
* @enable: whether to enable or disable the spoof checking
|
||||
*
|
||||
* Configure a VSI to enable (or disable) spoof checking behavior.
|
||||
*/
|
||||
static int ice_cfg_mac_antispoof(struct ice_vsi *vsi, bool enable)
|
||||
{
|
||||
struct ice_vsi_ctx *ctx;
|
||||
|
@ -790,6 +814,9 @@ static int ice_vf_rebuild_host_mac_cfg(struct ice_vf *vf)
|
|||
u8 broadcast[ETH_ALEN];
|
||||
int status;
|
||||
|
||||
if (WARN_ON(!vsi))
|
||||
return -EINVAL;
|
||||
|
||||
if (ice_is_eswitch_mode_switchdev(vf->pf))
|
||||
return 0;
|
||||
|
||||
|
@ -875,6 +902,9 @@ static int ice_vf_rebuild_host_tx_rate_cfg(struct ice_vf *vf)
|
|||
struct ice_vsi *vsi = ice_get_vf_vsi(vf);
|
||||
int err;
|
||||
|
||||
if (WARN_ON(!vsi))
|
||||
return -EINVAL;
|
||||
|
||||
if (vf->min_tx_rate) {
|
||||
err = ice_set_min_bw_limit(vsi, (u64)vf->min_tx_rate * 1000);
|
||||
if (err) {
|
||||
|
@ -938,6 +968,9 @@ void ice_vf_rebuild_host_cfg(struct ice_vf *vf)
|
|||
struct device *dev = ice_pf_to_dev(vf->pf);
|
||||
struct ice_vsi *vsi = ice_get_vf_vsi(vf);
|
||||
|
||||
if (WARN_ON(!vsi))
|
||||
return;
|
||||
|
||||
ice_vf_set_host_trust_cfg(vf);
|
||||
|
||||
if (ice_vf_rebuild_host_mac_cfg(vf))
|
||||
|
|
|
@ -176,7 +176,7 @@ static inline u16 ice_vf_get_port_vlan_tpid(struct ice_vf *vf)
|
|||
* ice_for_each_vf - Iterate over each VF entry
|
||||
* @pf: pointer to the PF private structure
|
||||
* @bkt: bucket index used for iteration
|
||||
* @vf: pointer to the VF entry currently being processed in the loop.
|
||||
* @vf: pointer to the VF entry currently being processed in the loop
|
||||
*
|
||||
* The bkt variable is an unsigned integer iterator used to traverse the VF
|
||||
* entries. It is *not* guaranteed to be the VF's vf_id. Do not assume it is.
|
||||
|
@ -192,7 +192,7 @@ static inline u16 ice_vf_get_port_vlan_tpid(struct ice_vf *vf)
|
|||
* ice_for_each_vf_rcu - Iterate over each VF entry protected by RCU
|
||||
* @pf: pointer to the PF private structure
|
||||
* @bkt: bucket index used for iteration
|
||||
* @vf: pointer to the VF entry currently being processed in the loop.
|
||||
* @vf: pointer to the VF entry currently being processed in the loop
|
||||
*
|
||||
* The bkt variable is an unsigned integer iterator used to traverse the VF
|
||||
* entries. It is *not* guaranteed to be the VF's vf_id. Do not assume it is.
|
||||
|
|
|
@ -514,24 +514,6 @@ static void ice_vc_reset_vf_msg(struct ice_vf *vf)
|
|||
ice_reset_vf(vf, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_find_vsi_from_id
|
||||
* @pf: the PF structure to search for the VSI
|
||||
* @id: ID of the VSI it is searching for
|
||||
*
|
||||
* searches for the VSI with the given ID
|
||||
*/
|
||||
static struct ice_vsi *ice_find_vsi_from_id(struct ice_pf *pf, u16 id)
|
||||
{
|
||||
int i;
|
||||
|
||||
ice_for_each_vsi(pf, i)
|
||||
if (pf->vsi[i] && pf->vsi[i]->vsi_num == id)
|
||||
return pf->vsi[i];
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_vc_isvalid_vsi_id
|
||||
* @vf: pointer to the VF info
|
||||
|
@ -544,7 +526,7 @@ bool ice_vc_isvalid_vsi_id(struct ice_vf *vf, u16 vsi_id)
|
|||
struct ice_pf *pf = vf->pf;
|
||||
struct ice_vsi *vsi;
|
||||
|
||||
vsi = ice_find_vsi_from_id(pf, vsi_id);
|
||||
vsi = ice_find_vsi(pf, vsi_id);
|
||||
|
||||
return (vsi && (vsi->vf == vf));
|
||||
}
|
||||
|
@ -559,7 +541,7 @@ bool ice_vc_isvalid_vsi_id(struct ice_vf *vf, u16 vsi_id)
|
|||
*/
|
||||
static bool ice_vc_isvalid_q_id(struct ice_vf *vf, u16 vsi_id, u8 qid)
|
||||
{
|
||||
struct ice_vsi *vsi = ice_find_vsi_from_id(vf->pf, vsi_id);
|
||||
struct ice_vsi *vsi = ice_find_vsi(vf->pf, vsi_id);
|
||||
/* allocated Tx and Rx queues should be always equal for VF VSI */
|
||||
return (vsi && (qid < vsi->alloc_txq));
|
||||
}
|
||||
|
@ -2360,6 +2342,11 @@ static int ice_vc_ena_vlan_stripping(struct ice_vf *vf)
|
|||
}
|
||||
|
||||
vsi = ice_get_vf_vsi(vf);
|
||||
if (!vsi) {
|
||||
v_ret = VIRTCHNL_STATUS_ERR_PARAM;
|
||||
goto error_param;
|
||||
}
|
||||
|
||||
if (vsi->inner_vlan_ops.ena_stripping(vsi, ETH_P_8021Q))
|
||||
v_ret = VIRTCHNL_STATUS_ERR_PARAM;
|
||||
|
||||
|
|
|
@ -1344,12 +1344,17 @@ static void ice_vf_fdir_dump_info(struct ice_vf *vf)
|
|||
pf = vf->pf;
|
||||
hw = &pf->hw;
|
||||
dev = ice_pf_to_dev(pf);
|
||||
vf_vsi = pf->vsi[vf->lan_vsi_idx];
|
||||
vf_vsi = ice_get_vf_vsi(vf);
|
||||
if (!vf_vsi) {
|
||||
dev_dbg(dev, "VF %d: invalid VSI pointer\n", vf->vf_id);
|
||||
return;
|
||||
}
|
||||
|
||||
vsi_num = ice_get_hw_vsi_num(hw, vf_vsi->idx);
|
||||
|
||||
fd_size = rd32(hw, VSIQF_FD_SIZE(vsi_num));
|
||||
fd_cnt = rd32(hw, VSIQF_FD_CNT(vsi_num));
|
||||
dev_dbg(dev, "VF %d: space allocated: guar:0x%x, be:0x%x, space consumed: guar:0x%x, be:0x%x",
|
||||
dev_dbg(dev, "VF %d: space allocated: guar:0x%x, be:0x%x, space consumed: guar:0x%x, be:0x%x\n",
|
||||
vf->vf_id,
|
||||
(fd_size & VSIQF_FD_CNT_FD_GCNT_M) >> VSIQF_FD_CNT_FD_GCNT_S,
|
||||
(fd_size & VSIQF_FD_CNT_FD_BCNT_M) >> VSIQF_FD_CNT_FD_BCNT_S,
|
||||
|
|
Loading…
Reference in New Issue