mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
ice: Introduce ice_init_mac_fltr and move ice_napi_del
Consolidate adding unicast and broadcast MAC filters in a single new function ice_init_mac_fltr. Move ice_napi_del to ice_lib.c Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com> Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
72ecb896e4
commit
561f437901
3 changed files with 79 additions and 44 deletions
|
@ -2733,6 +2733,21 @@ void ice_vsi_dis_irq(struct ice_vsi *vsi)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ice_napi_del - Remove NAPI handler for the VSI
|
||||||
|
* @vsi: VSI for which NAPI handler is to be removed
|
||||||
|
*/
|
||||||
|
void ice_napi_del(struct ice_vsi *vsi)
|
||||||
|
{
|
||||||
|
int v_idx;
|
||||||
|
|
||||||
|
if (!vsi->netdev)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ice_for_each_q_vector(vsi, v_idx)
|
||||||
|
netif_napi_del(&vsi->q_vectors[v_idx]->napi);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ice_vsi_release - Delete a VSI and free its resources
|
* ice_vsi_release - Delete a VSI and free its resources
|
||||||
* @vsi: the VSI being removed
|
* @vsi: the VSI being removed
|
||||||
|
|
|
@ -49,6 +49,8 @@ struct ice_vsi *
|
||||||
ice_vsi_setup(struct ice_pf *pf, struct ice_port_info *pi,
|
ice_vsi_setup(struct ice_pf *pf, struct ice_port_info *pi,
|
||||||
enum ice_vsi_type type, u16 vf_id);
|
enum ice_vsi_type type, u16 vf_id);
|
||||||
|
|
||||||
|
void ice_napi_del(struct ice_vsi *vsi);
|
||||||
|
|
||||||
int ice_vsi_release(struct ice_vsi *vsi);
|
int ice_vsi_release(struct ice_vsi *vsi);
|
||||||
|
|
||||||
void ice_vsi_close(struct ice_vsi *vsi);
|
void ice_vsi_close(struct ice_vsi *vsi);
|
||||||
|
|
|
@ -108,6 +108,67 @@ static void ice_check_for_hang_subtask(struct ice_pf *pf)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ice_init_mac_fltr - Set initial MAC filters
|
||||||
|
* @pf: board private structure
|
||||||
|
*
|
||||||
|
* Set initial set of mac filters for PF VSI; configure filters for permanent
|
||||||
|
* address and broadcast address. If an error is encountered, netdevice will be
|
||||||
|
* unregistered.
|
||||||
|
*/
|
||||||
|
static int ice_init_mac_fltr(struct ice_pf *pf)
|
||||||
|
{
|
||||||
|
LIST_HEAD(tmp_add_list);
|
||||||
|
u8 broadcast[ETH_ALEN];
|
||||||
|
struct ice_vsi *vsi;
|
||||||
|
int status;
|
||||||
|
|
||||||
|
vsi = ice_find_vsi_by_type(pf, ICE_VSI_PF);
|
||||||
|
if (!vsi)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
/* To add a MAC filter, first add the MAC to a list and then
|
||||||
|
* pass the list to ice_add_mac.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Add a unicast MAC filter so the VSI can get its packets */
|
||||||
|
status = ice_add_mac_to_list(vsi, &tmp_add_list,
|
||||||
|
vsi->port_info->mac.perm_addr);
|
||||||
|
if (status)
|
||||||
|
goto unregister;
|
||||||
|
|
||||||
|
/* VSI needs to receive broadcast traffic, so add the broadcast
|
||||||
|
* MAC address to the list as well.
|
||||||
|
*/
|
||||||
|
eth_broadcast_addr(broadcast);
|
||||||
|
status = ice_add_mac_to_list(vsi, &tmp_add_list, broadcast);
|
||||||
|
if (status)
|
||||||
|
goto free_mac_list;
|
||||||
|
|
||||||
|
/* Program MAC filters for entries in tmp_add_list */
|
||||||
|
status = ice_add_mac(&pf->hw, &tmp_add_list);
|
||||||
|
if (status)
|
||||||
|
status = -ENOMEM;
|
||||||
|
|
||||||
|
free_mac_list:
|
||||||
|
ice_free_fltr_list(&pf->pdev->dev, &tmp_add_list);
|
||||||
|
|
||||||
|
unregister:
|
||||||
|
/* We aren't useful with no MAC filters, so unregister if we
|
||||||
|
* had an error
|
||||||
|
*/
|
||||||
|
if (status && vsi->netdev->reg_state == NETREG_REGISTERED) {
|
||||||
|
dev_err(&pf->pdev->dev,
|
||||||
|
"Could not add MAC filters error %d. Unregistering device\n",
|
||||||
|
status);
|
||||||
|
unregister_netdev(vsi->netdev);
|
||||||
|
free_netdev(vsi->netdev);
|
||||||
|
vsi->netdev = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ice_add_mac_to_sync_list - creates list of MAC addresses to be synced
|
* ice_add_mac_to_sync_list - creates list of MAC addresses to be synced
|
||||||
* @netdev: the net device on which the sync is happening
|
* @netdev: the net device on which the sync is happening
|
||||||
|
@ -1649,21 +1710,6 @@ skip_req_irq:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* ice_napi_del - Remove NAPI handler for the VSI
|
|
||||||
* @vsi: VSI for which NAPI handler is to be removed
|
|
||||||
*/
|
|
||||||
static void ice_napi_del(struct ice_vsi *vsi)
|
|
||||||
{
|
|
||||||
int v_idx;
|
|
||||||
|
|
||||||
if (!vsi->netdev)
|
|
||||||
return;
|
|
||||||
|
|
||||||
ice_for_each_q_vector(vsi, v_idx)
|
|
||||||
netif_napi_del(&vsi->q_vectors[v_idx]->napi);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ice_napi_add - register NAPI handler for the VSI
|
* ice_napi_add - register NAPI handler for the VSI
|
||||||
* @vsi: VSI for which NAPI handler is to be registered
|
* @vsi: VSI for which NAPI handler is to be registered
|
||||||
|
@ -1900,8 +1946,6 @@ ice_vlan_rx_kill_vid(struct net_device *netdev, __always_unused __be16 proto,
|
||||||
*/
|
*/
|
||||||
static int ice_setup_pf_sw(struct ice_pf *pf)
|
static int ice_setup_pf_sw(struct ice_pf *pf)
|
||||||
{
|
{
|
||||||
LIST_HEAD(tmp_add_list);
|
|
||||||
u8 broadcast[ETH_ALEN];
|
|
||||||
struct ice_vsi *vsi;
|
struct ice_vsi *vsi;
|
||||||
int status = 0;
|
int status = 0;
|
||||||
|
|
||||||
|
@ -1926,38 +1970,12 @@ static int ice_setup_pf_sw(struct ice_pf *pf)
|
||||||
*/
|
*/
|
||||||
ice_napi_add(vsi);
|
ice_napi_add(vsi);
|
||||||
|
|
||||||
/* To add a MAC filter, first add the MAC to a list and then
|
status = ice_init_mac_fltr(pf);
|
||||||
* pass the list to ice_add_mac.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Add a unicast MAC filter so the VSI can get its packets */
|
|
||||||
status = ice_add_mac_to_list(vsi, &tmp_add_list,
|
|
||||||
vsi->port_info->mac.perm_addr);
|
|
||||||
if (status)
|
if (status)
|
||||||
goto unroll_napi_add;
|
goto unroll_napi_add;
|
||||||
|
|
||||||
/* VSI needs to receive broadcast traffic, so add the broadcast
|
|
||||||
* MAC address to the list as well.
|
|
||||||
*/
|
|
||||||
eth_broadcast_addr(broadcast);
|
|
||||||
status = ice_add_mac_to_list(vsi, &tmp_add_list, broadcast);
|
|
||||||
if (status)
|
|
||||||
goto free_mac_list;
|
|
||||||
|
|
||||||
/* program MAC filters for entries in tmp_add_list */
|
|
||||||
status = ice_add_mac(&pf->hw, &tmp_add_list);
|
|
||||||
if (status) {
|
|
||||||
dev_err(&pf->pdev->dev, "Could not add MAC filters\n");
|
|
||||||
status = -ENOMEM;
|
|
||||||
goto free_mac_list;
|
|
||||||
}
|
|
||||||
|
|
||||||
ice_free_fltr_list(&pf->pdev->dev, &tmp_add_list);
|
|
||||||
return status;
|
return status;
|
||||||
|
|
||||||
free_mac_list:
|
|
||||||
ice_free_fltr_list(&pf->pdev->dev, &tmp_add_list);
|
|
||||||
|
|
||||||
unroll_napi_add:
|
unroll_napi_add:
|
||||||
if (vsi) {
|
if (vsi) {
|
||||||
ice_napi_del(vsi);
|
ice_napi_del(vsi);
|
||||||
|
|
Loading…
Add table
Reference in a new issue