Merge branch '100GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue
Tony Nguyen says: ==================== Intel Wired LAN Driver Updates 2022-11-09 (ice, iavf) This series contains updates to ice and iavf drivers. Norbert stops disabling VF queues that are not enabled for ice driver. Michal stops accounting of VLAN 0 filter to match expectations of PF driver for iavf. * '100GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue: iavf: Fix VF driver counting VLAN 0 filters ice: Fix spurious interrupt during removal of trusted VF ==================== Link: https://lore.kernel.org/r/20221110003744.201414-1-anthony.l.nguyen@intel.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Коммит
b3bbeba094
|
@ -2438,6 +2438,8 @@ void iavf_virtchnl_completion(struct iavf_adapter *adapter,
|
|||
list_for_each_entry(f, &adapter->vlan_filter_list, list) {
|
||||
if (f->is_new_vlan) {
|
||||
f->is_new_vlan = false;
|
||||
if (!f->vlan.vid)
|
||||
continue;
|
||||
if (f->vlan.tpid == ETH_P_8021Q)
|
||||
set_bit(f->vlan.vid,
|
||||
adapter->vsi.active_cvlans);
|
||||
|
|
|
@ -958,7 +958,7 @@ ice_vsi_stop_tx_ring(struct ice_vsi *vsi, enum ice_disq_rst_src rst_src,
|
|||
* associated to the queue to schedule NAPI handler
|
||||
*/
|
||||
q_vector = ring->q_vector;
|
||||
if (q_vector)
|
||||
if (q_vector && !(vsi->vf && ice_is_vf_disabled(vsi->vf)))
|
||||
ice_trigger_sw_intr(hw, q_vector);
|
||||
|
||||
status = ice_dis_vsi_txq(vsi->port_info, txq_meta->vsi_idx,
|
||||
|
|
|
@ -2239,6 +2239,31 @@ int ice_vsi_stop_xdp_tx_rings(struct ice_vsi *vsi)
|
|||
return ice_vsi_stop_tx_rings(vsi, ICE_NO_RESET, 0, vsi->xdp_rings, vsi->num_xdp_txq);
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_vsi_is_rx_queue_active
|
||||
* @vsi: the VSI being configured
|
||||
*
|
||||
* Return true if at least one queue is active.
|
||||
*/
|
||||
bool ice_vsi_is_rx_queue_active(struct ice_vsi *vsi)
|
||||
{
|
||||
struct ice_pf *pf = vsi->back;
|
||||
struct ice_hw *hw = &pf->hw;
|
||||
int i;
|
||||
|
||||
ice_for_each_rxq(vsi, i) {
|
||||
u32 rx_reg;
|
||||
int pf_q;
|
||||
|
||||
pf_q = vsi->rxq_map[i];
|
||||
rx_reg = rd32(hw, QRX_CTRL(pf_q));
|
||||
if (rx_reg & QRX_CTRL_QENA_STAT_M)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_vsi_is_vlan_pruning_ena - check if VLAN pruning is enabled or not
|
||||
* @vsi: VSI to check whether or not VLAN pruning is enabled.
|
||||
|
|
|
@ -129,4 +129,5 @@ u16 ice_vsi_num_non_zero_vlans(struct ice_vsi *vsi);
|
|||
bool ice_is_feature_supported(struct ice_pf *pf, enum ice_feature f);
|
||||
void ice_clear_feature_support(struct ice_pf *pf, enum ice_feature f);
|
||||
void ice_init_feature_support(struct ice_pf *pf);
|
||||
bool ice_vsi_is_rx_queue_active(struct ice_vsi *vsi);
|
||||
#endif /* !_ICE_LIB_H_ */
|
||||
|
|
|
@ -576,7 +576,10 @@ int ice_reset_vf(struct ice_vf *vf, u32 flags)
|
|||
return -EINVAL;
|
||||
}
|
||||
ice_vsi_stop_lan_tx_rings(vsi, ICE_NO_RESET, vf->vf_id);
|
||||
ice_vsi_stop_all_rx_rings(vsi);
|
||||
|
||||
if (ice_vsi_is_rx_queue_active(vsi))
|
||||
ice_vsi_stop_all_rx_rings(vsi);
|
||||
|
||||
dev_dbg(dev, "VF is already disabled, there is no need for resetting it, telling VM, all is fine %d\n",
|
||||
vf->vf_id);
|
||||
return 0;
|
||||
|
|
Загрузка…
Ссылка в новой задаче