Lines Matching refs:vsi

34 static void i40e_vsi_reinit_locked(struct i40e_vsi *vsi);
36 static int i40e_add_vsi(struct i40e_vsi *vsi);
37 static int i40e_add_veb(struct i40e_veb *veb, struct i40e_vsi *vsi);
238 if (pile == pf->qp_pile && pf->vsi[id]->type == I40E_VSI_FDIR) {
307 * i40e_find_vsi_from_id - searches for the vsi with the given id
308 * @pf: the pf structure to search for the vsi
309 * @id: id of the vsi it is searching for
313 struct i40e_vsi *vsi;
316 i40e_pf_for_each_vsi(pf, i, vsi)
317 if (vsi->id == id)
318 return vsi;
349 struct i40e_vsi *vsi = np->vsi;
350 struct i40e_pf *pf = vsi->back;
358 for (i = 0; i < vsi->num_queue_pairs; i++) {
359 if (vsi->tx_rings[i] && vsi->tx_rings[i]->desc) {
361 vsi->tx_rings[i]->queue_index) {
362 tx_ring = vsi->tx_rings[i];
384 tx_ring->vsi->base_vector - 1));
389 vsi->seid, txqueue, tx_ring->next_to_clean,
411 set_bit(__I40E_VSI_DOWN_REQUESTED, vsi->state);
421 * @vsi: the VSI we care about
426 struct rtnl_link_stats64 *i40e_get_vsi_stats_struct(struct i40e_vsi *vsi)
428 return &vsi->net_stats;
464 struct i40e_vsi *vsi = np->vsi;
465 struct rtnl_link_stats64 *vsi_stats = i40e_get_vsi_stats_struct(vsi);
469 if (test_bit(__I40E_VSI_DOWN, vsi->state))
472 if (!vsi->tx_rings)
476 for (i = 0; i < vsi->num_queue_pairs; i++) {
480 ring = READ_ONCE(vsi->tx_rings[i]);
485 if (i40e_enabled_xdp_vsi(vsi)) {
486 ring = READ_ONCE(vsi->xdp_rings[i]);
492 ring = READ_ONCE(vsi->rx_rings[i]);
519 * i40e_vsi_reset_stats - Resets all stats of the given vsi
520 * @vsi: the VSI to have its stats reset
522 void i40e_vsi_reset_stats(struct i40e_vsi *vsi)
527 if (!vsi)
530 ns = i40e_get_vsi_stats_struct(vsi);
532 memset(&vsi->net_stats_offsets, 0, sizeof(vsi->net_stats_offsets));
533 memset(&vsi->eth_stats, 0, sizeof(vsi->eth_stats));
534 memset(&vsi->eth_stats_offsets, 0, sizeof(vsi->eth_stats_offsets));
535 if (vsi->rx_rings && vsi->rx_rings[0]) {
536 for (i = 0; i < vsi->num_queue_pairs; i++) {
537 memset(&vsi->rx_rings[i]->stats, 0,
538 sizeof(vsi->rx_rings[i]->stats));
539 memset(&vsi->rx_rings[i]->rx_stats, 0,
540 sizeof(vsi->rx_rings[i]->rx_stats));
541 memset(&vsi->tx_rings[i]->stats, 0,
542 sizeof(vsi->tx_rings[i]->stats));
543 memset(&vsi->tx_rings[i]->tx_stats, 0,
544 sizeof(vsi->tx_rings[i]->tx_stats));
547 vsi->stat_offsets_loaded = false;
575 * @vsi: ptr to the VSI to read from.
578 static u32 i40e_compute_pci_to_hw_id(struct i40e_vsi *vsi, struct i40e_hw *hw)
582 if (vsi->type == I40E_VSI_SRIOV)
583 return (hw->port * BIT(7)) / pf_count + vsi->vf_id;
687 * @vsi: ptr to the VSI to be updated.
695 i40e_stats_update_rx_discards(struct i40e_vsi *vsi, struct i40e_hw *hw,
703 I40E_GL_RXERR1H(i40e_compute_pci_to_hw_id(vsi, hw)),
704 I40E_GL_RXERR1L(i40e_compute_pci_to_hw_id(vsi, hw)),
711 * @vsi: the VSI to be updated
713 void i40e_update_eth_stats(struct i40e_vsi *vsi)
715 int stat_idx = le16_to_cpu(vsi->info.stat_counter_idx);
716 struct i40e_pf *pf = vsi->back;
721 es = &vsi->eth_stats;
722 oes = &vsi->eth_stats_offsets;
726 vsi->stat_offsets_loaded,
729 vsi->stat_offsets_loaded,
734 vsi->stat_offsets_loaded,
738 vsi->stat_offsets_loaded,
742 vsi->stat_offsets_loaded,
746 vsi->stat_offsets_loaded,
751 vsi->stat_offsets_loaded,
755 vsi->stat_offsets_loaded,
759 vsi->stat_offsets_loaded,
763 vsi->stat_offsets_loaded,
766 i40e_stats_update_rx_discards(vsi, hw, stat_idx,
767 vsi->stat_offsets_loaded, oes, es);
769 vsi->stat_offsets_loaded = true;
852 * i40e_update_vsi_stats - Update the vsi statistics counters.
853 * @vsi: the VSI to be updated
861 static void i40e_update_vsi_stats(struct i40e_vsi *vsi)
864 struct i40e_pf *pf = vsi->back;
880 if (test_bit(__I40E_VSI_DOWN, vsi->state) ||
884 ns = i40e_get_vsi_stats_struct(vsi);
885 ons = &vsi->net_stats_offsets;
886 es = &vsi->eth_stats;
887 oes = &vsi->eth_stats_offsets;
889 /* Gather up the netdev and vsi stats that the driver collects
903 for (q = 0; q < vsi->num_queue_pairs; q++) {
905 p = READ_ONCE(vsi->tx_rings[q]);
923 p = READ_ONCE(vsi->rx_rings[q]);
941 if (i40e_enabled_xdp_vsi(vsi)) {
943 p = READ_ONCE(vsi->xdp_rings[q]);
961 vsi->tx_restart = tx_restart;
962 vsi->tx_busy = tx_busy;
963 vsi->tx_linearize = tx_linearize;
964 vsi->tx_force_wb = tx_force_wb;
965 vsi->tx_stopped = tx_stopped;
966 vsi->rx_page_failed = rx_page;
967 vsi->rx_buf_failed = rx_buf;
968 vsi->rx_page_reuse = rx_reuse;
969 vsi->rx_page_alloc = rx_alloc;
970 vsi->rx_page_waive = rx_waive;
971 vsi->rx_page_busy = rx_busy;
979 i40e_update_eth_stats(vsi);
991 /* pull in a couple PF stats if this is the main vsi */
992 if (vsi == pf->vsi[pf->lan_vsi]) {
1229 * @vsi: the VSI to be updated
1233 void i40e_update_stats(struct i40e_vsi *vsi)
1235 struct i40e_pf *pf = vsi->back;
1237 if (vsi == pf->vsi[pf->lan_vsi])
1240 i40e_update_vsi_stats(vsi);
1245 * @vsi: the VSI to be searched
1249 int i40e_count_filters(struct i40e_vsi *vsi)
1256 hash_for_each_safe(vsi->mac_filter_hash, bkt, h, f, hlist) {
1267 * @vsi: the VSI to be searched
1273 static struct i40e_mac_filter *i40e_find_filter(struct i40e_vsi *vsi,
1279 if (!vsi || !macaddr)
1283 hash_for_each_possible(vsi->mac_filter_hash, f, hlist, key) {
1293 * @vsi: the VSI to be searched
1299 struct i40e_mac_filter *i40e_find_mac(struct i40e_vsi *vsi, const u8 *macaddr)
1304 if (!vsi || !macaddr)
1308 hash_for_each_possible(vsi->mac_filter_hash, f, hlist, key) {
1317 * @vsi: the VSI to be searched
1321 bool i40e_is_vsi_in_vlan(struct i40e_vsi *vsi)
1324 if (vsi->info.pvid)
1347 return vsi->has_vlan_filter;
1352 * @vsi: the VSI to configure
1379 static int i40e_correct_mac_vlan_filters(struct i40e_vsi *vsi,
1384 s16 pvid = le16_to_cpu(vsi->info.pvid);
1415 hash_for_each_safe(vsi->mac_filter_hash, bkt, h, f, hlist) {
1433 add_head = i40e_add_filter(vsi, f->macaddr, new_vlan);
1455 vsi->has_vlan_filter = !!vlan_filters;
1462 * @vsi: the vsi to configure
1474 static s16 i40e_get_vf_new_vlan(struct i40e_vsi *vsi,
1480 s16 pvid = le16_to_cpu(vsi->info.pvid);
1481 struct i40e_pf *pf = vsi->back;
1507 * @vsi: the vsi to configure
1524 static int i40e_correct_vf_mac_vlan_filters(struct i40e_vsi *vsi,
1536 new_mac->f->vlan = i40e_get_vf_new_vlan(vsi, new_mac, NULL,
1540 hash_for_each_safe(vsi->mac_filter_hash, bkt, h, f, hlist) {
1541 new_vlan = i40e_get_vf_new_vlan(vsi, NULL, f, vlan_filters,
1544 add_head = i40e_add_filter(vsi, f->macaddr, new_vlan);
1564 vsi->has_vlan_filter = !!vlan_filters;
1570 * @vsi: the PF Main VSI - inappropriate for any other VSI
1576 static void i40e_rm_default_mac_filter(struct i40e_vsi *vsi, u8 *macaddr)
1579 struct i40e_pf *pf = vsi->back;
1582 if (vsi->type != I40E_VSI_MAIN)
1590 i40e_aq_remove_macvlan(&pf->hw, vsi->seid, &element, 1, NULL);
1598 i40e_aq_remove_macvlan(&pf->hw, vsi->seid, &element, 1, NULL);
1603 * @vsi: the VSI to be searched
1612 struct i40e_mac_filter *i40e_add_filter(struct i40e_vsi *vsi,
1618 if (!vsi || !macaddr)
1621 f = i40e_find_filter(vsi, macaddr, vlan);
1631 vsi->has_vlan_filter = true;
1639 hash_add(vsi->mac_filter_hash, &f->hlist, key);
1641 vsi->flags |= I40E_VSI_FLAG_FILTER_CHANGED;
1642 set_bit(__I40E_MACVLAN_SYNC_PENDING, vsi->back->state);
1661 * @vsi: VSI to remove from
1674 void __i40e_del_filter(struct i40e_vsi *vsi, struct i40e_mac_filter *f)
1691 vsi->flags |= I40E_VSI_FLAG_FILTER_CHANGED;
1692 set_bit(__I40E_MACVLAN_SYNC_PENDING, vsi->back->state);
1697 * @vsi: the VSI to be searched
1707 void i40e_del_filter(struct i40e_vsi *vsi, const u8 *macaddr, s16 vlan)
1711 if (!vsi || !macaddr)
1714 f = i40e_find_filter(vsi, macaddr, vlan);
1715 __i40e_del_filter(vsi, f);
1720 * @vsi: the VSI to be searched
1730 struct i40e_mac_filter *i40e_add_mac_filter(struct i40e_vsi *vsi,
1737 if (vsi->info.pvid)
1738 return i40e_add_filter(vsi, macaddr,
1739 le16_to_cpu(vsi->info.pvid));
1741 if (!i40e_is_vsi_in_vlan(vsi))
1742 return i40e_add_filter(vsi, macaddr, I40E_VLAN_ANY);
1744 hash_for_each_safe(vsi->mac_filter_hash, bkt, h, f, hlist) {
1747 add = i40e_add_filter(vsi, macaddr, f->vlan);
1757 * @vsi: the VSI to be searched
1765 int i40e_del_mac_filter(struct i40e_vsi *vsi, const u8 *macaddr)
1772 lockdep_assert_held(&vsi->mac_filter_hash_lock);
1773 hash_for_each_safe(vsi->mac_filter_hash, bkt, h, f, hlist) {
1775 __i40e_del_filter(vsi, f);
1796 struct i40e_vsi *vsi = np->vsi;
1797 struct i40e_pf *pf = vsi->back;
1820 spin_lock_bh(&vsi->mac_filter_hash_lock);
1821 i40e_del_mac_filter(vsi, netdev->dev_addr);
1823 i40e_add_mac_filter(vsi, netdev->dev_addr);
1824 spin_unlock_bh(&vsi->mac_filter_hash_lock);
1826 if (vsi->type == I40E_VSI_MAIN) {
1846 * @vsi: vsi structure
1851 static int i40e_config_rss_aq(struct i40e_vsi *vsi, const u8 *seed,
1854 struct i40e_pf *pf = vsi->back;
1861 ret = i40e_aq_set_rss_key(hw, vsi->id, seed_dw);
1871 bool pf_lut = vsi->type == I40E_VSI_MAIN;
1873 ret = i40e_aq_set_rss_lut(hw, vsi->id, pf_lut, lut, lut_size);
1887 * @vsi: VSI structure
1889 static int i40e_vsi_config_rss(struct i40e_vsi *vsi)
1891 struct i40e_pf *pf = vsi->back;
1898 if (!vsi->rss_size)
1899 vsi->rss_size = min_t(int, pf->alloc_rss_size,
1900 vsi->num_queue_pairs);
1901 if (!vsi->rss_size)
1903 lut = kzalloc(vsi->rss_table_size, GFP_KERNEL);
1910 if (vsi->rss_lut_user)
1911 memcpy(lut, vsi->rss_lut_user, vsi->rss_table_size);
1913 i40e_fill_rss_lut(pf, lut, vsi->rss_table_size, vsi->rss_size);
1914 if (vsi->rss_hkey_user)
1915 memcpy(seed, vsi->rss_hkey_user, I40E_HKEY_ARRAY_SIZE);
1918 ret = i40e_config_rss_aq(vsi, seed, lut, vsi->rss_table_size);
1925 * @vsi: the VSI being configured,
1931 static int i40e_vsi_setup_queue_map_mqprio(struct i40e_vsi *vsi,
1939 if (vsi->type != I40E_VSI_MAIN)
1943 vsi->tc_config.numtc = vsi->mqprio_qopt.qopt.num_tc;
1944 vsi->tc_config.enabled_tc = enabled_tc ? enabled_tc : 1;
1945 num_qps = vsi->mqprio_qopt.qopt.count[0];
1955 max_qcount = vsi->mqprio_qopt.qopt.count[0];
1958 if (vsi->tc_config.enabled_tc & BIT(i)) {
1959 offset = vsi->mqprio_qopt.qopt.offset[i];
1960 qcount = vsi->mqprio_qopt.qopt.count[i];
1963 vsi->tc_config.tc_info[i].qoffset = offset;
1964 vsi->tc_config.tc_info[i].qcount = qcount;
1965 vsi->tc_config.tc_info[i].netdev_tc = netdev_tc++;
1971 vsi->tc_config.tc_info[i].qoffset = 0;
1972 vsi->tc_config.tc_info[i].qcount = 1;
1973 vsi->tc_config.tc_info[i].netdev_tc = 0;
1978 vsi->num_queue_pairs = offset + qcount;
1983 ctxt->info.queue_mapping[0] = cpu_to_le16(vsi->base_queue);
1987 vsi->rss_size = max_qcount;
1988 ret = i40e_vsi_config_rss(vsi);
1990 dev_info(&vsi->back->pdev->dev,
1995 vsi->reconfig_rss = true;
1996 dev_dbg(&vsi->back->pdev->dev,
2002 override_q = vsi->mqprio_qopt.qopt.count[0];
2003 if (override_q && override_q < vsi->num_queue_pairs) {
2004 vsi->cnt_q_avail = vsi->num_queue_pairs - override_q;
2005 vsi->next_base_queue = override_q;
2012 * @vsi: the VSI being setup
2019 static void i40e_vsi_setup_queue_map(struct i40e_vsi *vsi,
2024 struct i40e_pf *pf = vsi->back;
2039 if (vsi->type == I40E_VSI_MAIN) {
2049 if (vsi->req_queue_pairs > 0)
2050 vsi->num_queue_pairs = vsi->req_queue_pairs;
2052 vsi->num_queue_pairs = pf->num_lan_msix;
2054 vsi->num_queue_pairs = 1;
2058 if (vsi->type == I40E_VSI_MAIN ||
2059 (vsi->type == I40E_VSI_SRIOV && vsi->num_queue_pairs != 0))
2060 num_tc_qps = vsi->num_queue_pairs;
2062 num_tc_qps = vsi->alloc_queue_pairs;
2064 if (enabled_tc && test_bit(I40E_FLAG_DCB_ENA, vsi->back->flags)) {
2079 vsi->tc_config.numtc = numtc;
2080 vsi->tc_config.enabled_tc = enabled_tc ? enabled_tc : 1;
2089 if (vsi->tc_config.enabled_tc & BIT(i)) {
2093 switch (vsi->type) {
2099 vsi->tc_config.enabled_tc != 1) {
2113 vsi->tc_config.tc_info[i].qoffset = offset;
2114 vsi->tc_config.tc_info[i].qcount = qcount;
2124 vsi->tc_config.tc_info[i].netdev_tc = netdev_tc++;
2135 vsi->tc_config.tc_info[i].qoffset = 0;
2136 vsi->tc_config.tc_info[i].qcount = 1;
2137 vsi->tc_config.tc_info[i].netdev_tc = 0;
2144 if ((vsi->type == I40E_VSI_MAIN && numtc != 1) ||
2145 (vsi->type == I40E_VSI_SRIOV && vsi->num_queue_pairs == 0) ||
2146 (vsi->type != I40E_VSI_MAIN && vsi->type != I40E_VSI_SRIOV))
2147 vsi->num_queue_pairs = offset;
2155 if (vsi->type == I40E_VSI_SRIOV) {
2158 for (i = 0; i < vsi->num_queue_pairs; i++)
2160 cpu_to_le16(vsi->base_queue + i);
2164 ctxt->info.queue_mapping[0] = cpu_to_le16(vsi->base_queue);
2180 struct i40e_vsi *vsi = np->vsi;
2182 if (i40e_add_mac_filter(vsi, addr))
2199 struct i40e_vsi *vsi = np->vsi;
2209 i40e_del_mac_filter(vsi, addr);
2221 struct i40e_vsi *vsi = np->vsi;
2223 spin_lock_bh(&vsi->mac_filter_hash_lock);
2228 spin_unlock_bh(&vsi->mac_filter_hash_lock);
2231 if (vsi->current_netdev_flags != vsi->netdev->flags) {
2232 vsi->flags |= I40E_VSI_FLAG_FILTER_CHANGED;
2233 set_bit(__I40E_MACVLAN_SYNC_PENDING, vsi->back->state);
2239 * @vsi: Pointer to VSI struct
2245 static void i40e_undo_del_filter_entries(struct i40e_vsi *vsi,
2256 hash_add(vsi->mac_filter_hash, &f->hlist, key);
2262 * @vsi: Pointer to vsi struct
2268 static void i40e_undo_add_filter_entries(struct i40e_vsi *vsi,
2277 netdev_hw_addr_refcnt(new->f, vsi->netdev, -1);
2343 * @vsi: ptr to the VSI
2355 void i40e_aqc_del_filters(struct i40e_vsi *vsi, const char *vsi_name,
2359 struct i40e_hw *hw = &vsi->back->hw;
2363 aq_ret = i40e_aq_remove_macvlan_v2(hw, vsi->seid, list, num_del, NULL,
2369 dev_info(&vsi->back->pdev->dev,
2378 * @vsi: ptr to the VSI
2385 * __I40E_VSI_OVERFLOW_PROMISC bit in vsi->state if the firmware has run out of
2389 void i40e_aqc_add_filters(struct i40e_vsi *vsi, const char *vsi_name,
2394 struct i40e_hw *hw = &vsi->back->hw;
2398 i40e_aq_add_macvlan_v2(hw, vsi->seid, list, num_add, NULL, &aq_status);
2402 if (vsi->type == I40E_VSI_MAIN) {
2403 set_bit(__I40E_VSI_OVERFLOW_PROMISC, vsi->state);
2404 dev_warn(&vsi->back->pdev->dev,
2407 } else if (vsi->type == I40E_VSI_SRIOV ||
2408 vsi->type == I40E_VSI_VMDQ1 ||
2409 vsi->type == I40E_VSI_VMDQ2) {
2410 dev_warn(&vsi->back->pdev->dev,
2415 dev_warn(&vsi->back->pdev->dev,
2418 vsi->type);
2425 * @vsi: pointer to the VSI
2436 i40e_aqc_broadcast_filter(struct i40e_vsi *vsi, const char *vsi_name,
2440 struct i40e_hw *hw = &vsi->back->hw;
2445 vsi->seid,
2450 vsi->seid,
2457 set_bit(__I40E_VSI_OVERFLOW_PROMISC, vsi->state);
2458 dev_warn(&vsi->back->pdev->dev,
2478 struct i40e_vsi *vsi = pf->vsi[pf->lan_vsi];
2482 if (vsi->type == I40E_VSI_MAIN &&
2492 vsi->seid,
2496 vsi->seid,
2507 vsi->seid,
2518 vsi->seid,
2536 * @vsi: ptr to the VSI
2542 int i40e_sync_vsi_filters(struct i40e_vsi *vsi)
2547 struct i40e_hw *hw = &vsi->back->hw;
2568 while (test_and_set_bit(__I40E_VSI_SYNCING_FILTERS, vsi->state))
2570 pf = vsi->back;
2572 old_overflow = test_bit(__I40E_VSI_OVERFLOW_PROMISC, vsi->state);
2574 if (vsi->netdev) {
2575 changed_flags = vsi->current_netdev_flags ^ vsi->netdev->flags;
2576 vsi->current_netdev_flags = vsi->netdev->flags;
2582 if (vsi->type == I40E_VSI_SRIOV)
2583 snprintf(vsi_name, sizeof(vsi_name) - 1, "VF %d", vsi->vf_id);
2584 else if (vsi->type != I40E_VSI_MAIN)
2585 snprintf(vsi_name, sizeof(vsi_name) - 1, "vsi %d", vsi->seid);
2587 if (vsi->flags & I40E_VSI_FLAG_FILTER_CHANGED) {
2588 vsi->flags &= ~I40E_VSI_FLAG_FILTER_CHANGED;
2590 spin_lock_bh(&vsi->mac_filter_hash_lock);
2592 hash_for_each_safe(vsi->mac_filter_hash, bkt, h, f, hlist) {
2623 if (vsi->type != I40E_VSI_SRIOV)
2625 (vsi, &tmp_add_list, &tmp_del_list,
2629 (vsi, &tmp_add_list, &tmp_del_list,
2630 vlan_filters, pf->vf[vsi->vf_id].trusted);
2633 netdev_hw_addr_refcnt(new->f, vsi->netdev, 1);
2638 spin_unlock_bh(&vsi->mac_filter_hash_lock);
2658 i40e_aqc_broadcast_filter(vsi, vsi_name, f);
2681 i40e_aqc_del_filters(vsi, vsi_name, del_list,
2694 i40e_aqc_del_filters(vsi, vsi_name, del_list,
2718 if (i40e_aqc_broadcast_filter(vsi, vsi_name,
2748 i40e_aqc_add_filters(vsi, vsi_name, add_list,
2755 i40e_aqc_add_filters(vsi, vsi_name, add_list, add_head,
2761 spin_lock_bh(&vsi->mac_filter_hash_lock);
2767 netdev_hw_addr_refcnt(new->f, vsi->netdev, -1);
2770 spin_unlock_bh(&vsi->mac_filter_hash_lock);
2776 spin_lock_bh(&vsi->mac_filter_hash_lock);
2777 vsi->active_filters = 0;
2778 hash_for_each(vsi->mac_filter_hash, bkt, f, hlist) {
2780 vsi->active_filters++;
2784 spin_unlock_bh(&vsi->mac_filter_hash_lock);
2791 vsi->active_filters < vsi->promisc_threshold) {
2795 clear_bit(__I40E_VSI_OVERFLOW_PROMISC, vsi->state);
2796 vsi->promisc_threshold = 0;
2800 if (vsi->type == I40E_VSI_SRIOV && pf->vf &&
2801 !pf->vf[vsi->vf_id].trusted) {
2802 clear_bit(__I40E_VSI_OVERFLOW_PROMISC, vsi->state);
2806 new_overflow = test_bit(__I40E_VSI_OVERFLOW_PROMISC, vsi->state);
2812 vsi->promisc_threshold = (vsi->active_filters * 3) / 4;
2818 cur_multipromisc = !!(vsi->current_netdev_flags & IFF_ALLMULTI);
2819 aq_ret = i40e_aq_set_vsi_multicast_promiscuous(&vsi->back->hw,
2820 vsi->seid,
2840 cur_promisc = (!!(vsi->current_netdev_flags & IFF_PROMISC) ||
2857 vsi->flags |= I40E_VSI_FLAG_FILTER_CHANGED;
2859 clear_bit(__I40E_VSI_SYNCING_FILTERS, vsi->state);
2864 spin_lock_bh(&vsi->mac_filter_hash_lock);
2866 i40e_undo_del_filter_entries(vsi, &tmp_del_list);
2867 i40e_undo_add_filter_entries(vsi, &tmp_add_list);
2868 spin_unlock_bh(&vsi->mac_filter_hash_lock);
2870 vsi->flags |= I40E_VSI_FLAG_FILTER_CHANGED;
2871 clear_bit(__I40E_VSI_SYNCING_FILTERS, vsi->state);
2881 struct i40e_vsi *vsi;
2893 i40e_pf_for_each_vsi(pf, v, vsi) {
2894 if ((vsi->flags & I40E_VSI_FLAG_FILTER_CHANGED) &&
2895 !test_bit(__I40E_VSI_RELEASING, vsi->state)) {
2896 int ret = i40e_sync_vsi_filters(vsi);
2911 * @vsi: VSI to calculate rx_buf_len from
2913 static u16 i40e_calculate_vsi_rx_buf_len(struct i40e_vsi *vsi)
2915 if (!vsi->netdev || test_bit(I40E_FLAG_LEGACY_RX_ENA, vsi->back->flags))
2923 * @vsi: the vsi
2926 static int i40e_max_vsi_frame_size(struct i40e_vsi *vsi,
2929 u16 rx_buf_len = i40e_calculate_vsi_rx_buf_len(vsi);
2950 struct i40e_vsi *vsi = np->vsi;
2951 struct i40e_pf *pf = vsi->back;
2954 frame_size = i40e_max_vsi_frame_size(vsi, vsi->xdp_prog);
2965 i40e_vsi_reinit_locked(vsi);
2980 struct i40e_pf *pf = np->vsi->back;
2994 * @vsi: the vsi being adjusted
2996 void i40e_vlan_stripping_enable(struct i40e_vsi *vsi)
3002 if (vsi->info.pvid)
3005 if ((vsi->info.valid_sections &
3007 ((vsi->info.port_vlan_flags & I40E_AQ_VSI_PVLAN_MODE_MASK) == 0))
3010 vsi->info.valid_sections = cpu_to_le16(I40E_AQ_VSI_PROP_VLAN_VALID);
3011 vsi->info.port_vlan_flags = I40E_AQ_VSI_PVLAN_MODE_ALL |
3014 ctxt.seid = vsi->seid;
3015 ctxt.info = vsi->info;
3016 ret = i40e_aq_update_vsi_params(&vsi->back->hw, &ctxt, NULL);
3018 dev_info(&vsi->back->pdev->dev,
3021 i40e_aq_str(&vsi->back->hw,
3022 vsi->back->hw.aq.asq_last_status));
3028 * @vsi: the vsi being adjusted
3030 void i40e_vlan_stripping_disable(struct i40e_vsi *vsi)
3036 if (vsi->info.pvid)
3039 if ((vsi->info.valid_sections &
3041 ((vsi->info.port_vlan_flags & I40E_AQ_VSI_PVLAN_EMOD_MASK) ==
3045 vsi->info.valid_sections = cpu_to_le16(I40E_AQ_VSI_PROP_VLAN_VALID);
3046 vsi->info.port_vlan_flags = I40E_AQ_VSI_PVLAN_MODE_ALL |
3049 ctxt.seid = vsi->seid;
3050 ctxt.info = vsi->info;
3051 ret = i40e_aq_update_vsi_params(&vsi->back->hw, &ctxt, NULL);
3053 dev_info(&vsi->back->pdev->dev,
3056 i40e_aq_str(&vsi->back->hw,
3057 vsi->back->hw.aq.asq_last_status));
3063 * @vsi: the vsi being configured
3074 int i40e_add_vlan_all_mac(struct i40e_vsi *vsi, s16 vid)
3080 hash_for_each_safe(vsi->mac_filter_hash, bkt, h, f, hlist) {
3096 add_f = i40e_add_filter(vsi, f->macaddr, vid);
3098 dev_info(&vsi->back->pdev->dev,
3110 * @vsi: the VSI being configured
3113 int i40e_vsi_add_vlan(struct i40e_vsi *vsi, u16 vid)
3117 if (vsi->info.pvid)
3132 spin_lock_bh(&vsi->mac_filter_hash_lock);
3133 err = i40e_add_vlan_all_mac(vsi, vid);
3134 spin_unlock_bh(&vsi->mac_filter_hash_lock);
3141 i40e_service_event_schedule(vsi->back);
3147 * @vsi: the vsi being configured
3158 void i40e_rm_vlan_all_mac(struct i40e_vsi *vsi, s16 vid)
3164 hash_for_each_safe(vsi->mac_filter_hash, bkt, h, f, hlist) {
3166 __i40e_del_filter(vsi, f);
3172 * @vsi: the VSI being configured
3175 void i40e_vsi_kill_vlan(struct i40e_vsi *vsi, u16 vid)
3177 if (!vid || vsi->info.pvid)
3180 spin_lock_bh(&vsi->mac_filter_hash_lock);
3181 i40e_rm_vlan_all_mac(vsi, vid);
3182 spin_unlock_bh(&vsi->mac_filter_hash_lock);
3187 i40e_service_event_schedule(vsi->back);
3202 struct i40e_vsi *vsi = np->vsi;
3208 ret = i40e_vsi_add_vlan(vsi, vid);
3210 set_bit(vid, vsi->active_vlans);
3225 struct i40e_vsi *vsi = np->vsi;
3229 set_bit(vid, vsi->active_vlans);
3244 struct i40e_vsi *vsi = np->vsi;
3250 i40e_vsi_kill_vlan(vsi, vid);
3252 clear_bit(vid, vsi->active_vlans);
3258 * i40e_restore_vlan - Reinstate vlans when vsi/netdev comes back up
3259 * @vsi: the vsi being brought back up
3261 static void i40e_restore_vlan(struct i40e_vsi *vsi)
3265 if (!vsi->netdev)
3268 if (vsi->netdev->features & NETIF_F_HW_VLAN_CTAG_RX)
3269 i40e_vlan_stripping_enable(vsi);
3271 i40e_vlan_stripping_disable(vsi);
3273 for_each_set_bit(vid, vsi->active_vlans, VLAN_N_VID)
3274 i40e_vlan_rx_add_vid_up(vsi->netdev, htons(ETH_P_8021Q),
3280 * @vsi: the vsi being adjusted
3283 int i40e_vsi_add_pvid(struct i40e_vsi *vsi, u16 vid)
3288 vsi->info.valid_sections = cpu_to_le16(I40E_AQ_VSI_PROP_VLAN_VALID);
3289 vsi->info.pvid = cpu_to_le16(vid);
3290 vsi->info.port_vlan_flags = I40E_AQ_VSI_PVLAN_MODE_TAGGED |
3294 ctxt.seid = vsi->seid;
3295 ctxt.info = vsi->info;
3296 ret = i40e_aq_update_vsi_params(&vsi->back->hw, &ctxt, NULL);
3298 dev_info(&vsi->back->pdev->dev,
3301 i40e_aq_str(&vsi->back->hw,
3302 vsi->back->hw.aq.asq_last_status));
3311 * @vsi: the vsi being adjusted
3315 void i40e_vsi_remove_pvid(struct i40e_vsi *vsi)
3317 vsi->info.pvid = 0;
3319 i40e_vlan_stripping_disable(vsi);
3324 * @vsi: ptr to the VSI
3332 static int i40e_vsi_setup_tx_resources(struct i40e_vsi *vsi)
3336 for (i = 0; i < vsi->num_queue_pairs && !err; i++)
3337 err = i40e_setup_tx_descriptors(vsi->tx_rings[i]);
3339 if (!i40e_enabled_xdp_vsi(vsi))
3342 for (i = 0; i < vsi->num_queue_pairs && !err; i++)
3343 err = i40e_setup_tx_descriptors(vsi->xdp_rings[i]);
3350 * @vsi: ptr to the VSI
3354 static void i40e_vsi_free_tx_resources(struct i40e_vsi *vsi)
3358 if (vsi->tx_rings) {
3359 for (i = 0; i < vsi->num_queue_pairs; i++)
3360 if (vsi->tx_rings[i] && vsi->tx_rings[i]->desc)
3361 i40e_free_tx_resources(vsi->tx_rings[i]);
3364 if (vsi->xdp_rings) {
3365 for (i = 0; i < vsi->num_queue_pairs; i++)
3366 if (vsi->xdp_rings[i] && vsi->xdp_rings[i]->desc)
3367 i40e_free_tx_resources(vsi->xdp_rings[i]);
3373 * @vsi: ptr to the VSI
3381 static int i40e_vsi_setup_rx_resources(struct i40e_vsi *vsi)
3385 for (i = 0; i < vsi->num_queue_pairs && !err; i++)
3386 err = i40e_setup_rx_descriptors(vsi->rx_rings[i]);
3392 * @vsi: ptr to the VSI
3396 static void i40e_vsi_free_rx_resources(struct i40e_vsi *vsi)
3400 if (!vsi->rx_rings)
3403 for (i = 0; i < vsi->num_queue_pairs; i++)
3404 if (vsi->rx_rings[i] && vsi->rx_rings[i]->desc)
3405 i40e_free_rx_resources(vsi->rx_rings[i]);
3439 bool xdp_on = i40e_enabled_xdp_vsi(ring->vsi);
3443 qid -= ring->vsi->alloc_queue_pairs;
3445 if (!xdp_on || !test_bit(qid, ring->vsi->af_xdp_zc_qps))
3448 return xsk_get_pool_from_qid(ring->vsi->netdev, qid);
3459 struct i40e_vsi *vsi = ring->vsi;
3460 u16 pf_q = vsi->base_queue + ring->queue_index;
3461 struct i40e_hw *hw = &vsi->back->hw;
3470 if (test_bit(I40E_FLAG_FD_ATR_ENA, vsi->back->flags)) {
3486 if (test_bit(I40E_FLAG_FD_SB_ENA, vsi->back->flags) ||
3487 test_bit(I40E_FLAG_FD_ATR_ENA, vsi->back->flags))
3489 if (test_bit(I40E_FLAG_PTP_ENA, vsi->back->flags))
3492 if (vsi->type != I40E_VSI_FDIR)
3513 tx_ctx.rdylist = le16_to_cpu(vsi->info.qs_handle[ring->dcb_tc]);
3520 dev_info(&vsi->back->pdev->dev,
3529 dev_info(&vsi->back->pdev->dev,
3545 if (vsi->type == I40E_VSI_VMDQ2) {
3548 vsi->id);
3583 struct i40e_vsi *vsi = ring->vsi;
3584 u32 chain_len = vsi->back->hw.func_caps.rx_buf_chain_len;
3585 u16 pf_q = vsi->base_queue + ring->queue_index;
3586 struct i40e_hw *hw = &vsi->back->hw;
3596 ring->rx_buf_len = vsi->rx_buf_len;
3599 if (ring->vsi->type != I40E_VSI_MAIN)
3626 dev_info(&vsi->back->pdev->dev,
3655 rx_ctx.rxmax = min_t(u16, vsi->max_frame, chain_len * ring->rx_buf_len);
3670 dev_info(&vsi->back->pdev->dev,
3679 dev_info(&vsi->back->pdev->dev,
3686 if (!vsi->netdev || test_bit(I40E_FLAG_LEGACY_RX_ENA, vsi->back->flags)) {
3688 dev_info(&vsi->back->pdev->dev,
3713 dev_info(&vsi->back->pdev->dev,
3724 * @vsi: VSI structure describing this set of rings and resources
3728 static int i40e_vsi_configure_tx(struct i40e_vsi *vsi)
3733 for (i = 0; (i < vsi->num_queue_pairs) && !err; i++)
3734 err = i40e_configure_tx_ring(vsi->tx_rings[i]);
3736 if (err || !i40e_enabled_xdp_vsi(vsi))
3739 for (i = 0; (i < vsi->num_queue_pairs) && !err; i++)
3740 err = i40e_configure_tx_ring(vsi->xdp_rings[i]);
3747 * @vsi: the VSI being configured
3751 static int i40e_vsi_configure_rx(struct i40e_vsi *vsi)
3756 vsi->max_frame = i40e_max_vsi_frame_size(vsi, vsi->xdp_prog);
3757 vsi->rx_buf_len = i40e_calculate_vsi_rx_buf_len(vsi);
3760 if (vsi->netdev && !I40E_2K_TOO_SMALL_WITH_PADDING &&
3761 vsi->netdev->mtu <= ETH_DATA_LEN) {
3762 vsi->rx_buf_len = I40E_RXBUFFER_1536 - NET_IP_ALIGN;
3763 vsi->max_frame = vsi->rx_buf_len;
3768 for (i = 0; i < vsi->num_queue_pairs && !err; i++)
3769 err = i40e_configure_rx_ring(vsi->rx_rings[i]);
3776 * @vsi: ptr to the VSI
3778 static void i40e_vsi_config_dcb_rings(struct i40e_vsi *vsi)
3784 if (!test_bit(I40E_FLAG_DCB_ENA, vsi->back->flags)) {
3786 for (i = 0; i < vsi->num_queue_pairs; i++) {
3787 rx_ring = vsi->rx_rings[i];
3788 tx_ring = vsi->tx_rings[i];
3796 if (!(vsi->tc_config.enabled_tc & BIT_ULL(n)))
3799 qoffset = vsi->tc_config.tc_info[n].qoffset;
3800 qcount = vsi->tc_config.tc_info[n].qcount;
3802 rx_ring = vsi->rx_rings[i];
3803 tx_ring = vsi->tx_rings[i];
3812 * @vsi: ptr to the VSI
3814 static void i40e_set_vsi_rx_mode(struct i40e_vsi *vsi)
3816 if (vsi->netdev)
3817 i40e_set_rx_mode(vsi->netdev);
3840 * @vsi: Pointer to the targeted VSI
3845 static void i40e_fdir_filter_restore(struct i40e_vsi *vsi)
3848 struct i40e_pf *pf = vsi->back;
3859 i40e_add_del_fdir(vsi, filter, true);
3865 * @vsi: the VSI being configured
3867 static int i40e_vsi_configure(struct i40e_vsi *vsi)
3871 i40e_set_vsi_rx_mode(vsi);
3872 i40e_restore_vlan(vsi);
3873 i40e_vsi_config_dcb_rings(vsi);
3874 err = i40e_vsi_configure_tx(vsi);
3876 err = i40e_vsi_configure_rx(vsi);
3883 * @vsi: the VSI being configured
3885 static void i40e_vsi_configure_msix(struct i40e_vsi *vsi)
3887 bool has_xdp = i40e_enabled_xdp_vsi(vsi);
3888 struct i40e_pf *pf = vsi->back;
3898 qp = vsi->base_queue;
3899 vector = vsi->base_vector;
3900 for (i = 0; i < vsi->num_q_vectors; i++, vector++) {
3901 struct i40e_q_vector *q_vector = vsi->q_vectors[i];
3905 ITR_TO_REG(vsi->rx_rings[i]->itr_setting);
3912 ITR_TO_REG(vsi->tx_rings[i]->itr_setting);
3924 i40e_intrl_usec_to_reg(vsi->int_rate_limit));
3929 u32 nextqp = has_xdp ? qp + vsi->alloc_queue_pairs : qp;
4013 * @vsi: the VSI being configured
4015 static void i40e_configure_msi_and_legacy(struct i40e_vsi *vsi)
4017 u32 nextqp = i40e_enabled_xdp_vsi(vsi) ? vsi->alloc_queue_pairs : 0;
4018 struct i40e_q_vector *q_vector = vsi->q_vectors[0];
4019 struct i40e_pf *pf = vsi->back;
4024 q_vector->rx.target_itr = ITR_TO_REG(vsi->rx_rings[0]->itr_setting);
4028 q_vector->tx.target_itr = ITR_TO_REG(vsi->tx_rings[0]->itr_setting);
4042 if (i40e_enabled_xdp_vsi(vsi)) {
4130 * @vsi: the VSI being configured
4135 static int i40e_vsi_request_irq_msix(struct i40e_vsi *vsi, char *basename)
4137 int q_vectors = vsi->num_q_vectors;
4138 struct i40e_pf *pf = vsi->back;
4139 int base = vsi->base_vector;
4147 struct i40e_q_vector *q_vector = vsi->q_vectors[vector];
4166 vsi->irq_handler,
4191 vsi->irqs_ready = true;
4200 free_irq(irq_num, &vsi->q_vectors[vector]);
4207 * @vsi: the VSI being un-configured
4209 static void i40e_vsi_disable_irq(struct i40e_vsi *vsi)
4211 struct i40e_pf *pf = vsi->back;
4213 int base = vsi->base_vector;
4217 for (i = 0; i < vsi->num_queue_pairs; i++) {
4220 val = rd32(hw, I40E_QINT_TQCTL(vsi->tx_rings[i]->reg_idx));
4222 wr32(hw, I40E_QINT_TQCTL(vsi->tx_rings[i]->reg_idx), val);
4224 val = rd32(hw, I40E_QINT_RQCTL(vsi->rx_rings[i]->reg_idx));
4226 wr32(hw, I40E_QINT_RQCTL(vsi->rx_rings[i]->reg_idx), val);
4228 if (!i40e_enabled_xdp_vsi(vsi))
4230 wr32(hw, I40E_QINT_TQCTL(vsi->xdp_rings[i]->reg_idx), 0);
4235 for (i = vsi->base_vector;
4236 i < (vsi->num_q_vectors + vsi->base_vector); i++)
4240 for (i = 0; i < vsi->num_q_vectors; i++)
4253 * @vsi: the VSI being configured
4255 static int i40e_vsi_enable_irq(struct i40e_vsi *vsi)
4257 struct i40e_pf *pf = vsi->back;
4261 for (i = 0; i < vsi->num_q_vectors; i++)
4262 i40e_irq_dynamic_enable(vsi, i);
4325 struct i40e_vsi *vsi = pf->vsi[pf->lan_vsi];
4326 struct i40e_q_vector *q_vector = vsi->q_vectors[0];
4438 struct i40e_vsi *vsi = tx_ring->vsi;
4508 if (test_bit(I40E_FLAG_MSIX_ENA, vsi->back->flags))
4509 i40e_irq_dynamic_enable(vsi, tx_ring->q_vector->v_idx);
4522 struct i40e_vsi *vsi;
4527 vsi = q_vector->tx.ring->vsi;
4528 i40e_clean_fdir_tx_irq(q_vector->tx.ring, vsi->work_limit);
4535 * @vsi: the VSI being configured
4539 static void i40e_map_vector_to_qp(struct i40e_vsi *vsi, int v_idx, int qp_idx)
4541 struct i40e_q_vector *q_vector = vsi->q_vectors[v_idx];
4542 struct i40e_ring *tx_ring = vsi->tx_rings[qp_idx];
4543 struct i40e_ring *rx_ring = vsi->rx_rings[qp_idx];
4551 if (i40e_enabled_xdp_vsi(vsi)) {
4552 struct i40e_ring *xdp_ring = vsi->xdp_rings[qp_idx];
4568 * @vsi: the VSI being configured
4575 static void i40e_vsi_map_rings_to_vectors(struct i40e_vsi *vsi)
4577 int qp_remaining = vsi->num_queue_pairs;
4578 int q_vectors = vsi->num_q_vectors;
4591 struct i40e_q_vector *q_vector = vsi->q_vectors[v_start];
4596 q_vector->reg_idx = q_vector->v_idx + vsi->base_vector - 1;
4604 i40e_map_vector_to_qp(vsi, v_start, qp_idx);
4613 * @vsi: the VSI being configured
4616 static int i40e_vsi_request_irq(struct i40e_vsi *vsi, char *basename)
4618 struct i40e_pf *pf = vsi->back;
4622 err = i40e_vsi_request_irq_msix(vsi, basename);
4647 struct i40e_vsi *vsi = np->vsi;
4648 struct i40e_pf *pf = vsi->back;
4652 if (test_bit(__I40E_VSI_DOWN, vsi->state))
4656 for (i = 0; i < vsi->num_q_vectors; i++)
4657 i40e_msix_clean_rings(0, vsi->q_vectors[i]);
4768 * @vsi: the VSI being configured
4770 static int i40e_vsi_enable_tx(struct i40e_vsi *vsi)
4772 struct i40e_pf *pf = vsi->back;
4775 pf_q = vsi->base_queue;
4776 for (i = 0; i < vsi->num_queue_pairs; i++, pf_q++) {
4777 ret = i40e_control_wait_tx_q(vsi->seid, pf,
4783 if (!i40e_enabled_xdp_vsi(vsi))
4786 ret = i40e_control_wait_tx_q(vsi->seid, pf,
4787 pf_q + vsi->alloc_queue_pairs,
4887 * @vsi: the VSI being configured
4889 static int i40e_vsi_enable_rx(struct i40e_vsi *vsi)
4891 struct i40e_pf *pf = vsi->back;
4894 pf_q = vsi->base_queue;
4895 for (i = 0; i < vsi->num_queue_pairs; i++, pf_q++) {
4900 vsi->seid, pf_q);
4910 * @vsi: the VSI being configured
4912 int i40e_vsi_start_rings(struct i40e_vsi *vsi)
4917 ret = i40e_vsi_enable_rx(vsi);
4920 ret = i40e_vsi_enable_tx(vsi);
4929 * @vsi: the VSI being configured
4931 void i40e_vsi_stop_rings(struct i40e_vsi *vsi)
4933 struct i40e_pf *pf = vsi->back;
4937 if (test_bit(__I40E_PORT_SUSPENDED, vsi->back->state))
4938 return i40e_vsi_stop_rings_no_wait(vsi);
4940 tx_q_end = vsi->base_queue +
4941 vsi->alloc_queue_pairs * (i40e_enabled_xdp_vsi(vsi) ? 2 : 1);
4942 for (pf_q = vsi->base_queue; pf_q < tx_q_end; pf_q++)
4945 rx_q_end = vsi->base_queue + vsi->num_queue_pairs;
4946 for (pf_q = vsi->base_queue; pf_q < rx_q_end; pf_q++)
4950 for (pf_q = vsi->base_queue; pf_q < tx_q_end; pf_q++)
4953 i40e_vsi_wait_queues_disabled(vsi);
4958 * @vsi: the VSI being shutdown
4967 void i40e_vsi_stop_rings_no_wait(struct i40e_vsi *vsi)
4969 struct i40e_pf *pf = vsi->back;
4972 pf_q = vsi->base_queue;
4973 for (i = 0; i < vsi->num_queue_pairs; i++, pf_q++) {
4981 * @vsi: the VSI being configured
4983 static void i40e_vsi_free_irq(struct i40e_vsi *vsi)
4985 struct i40e_pf *pf = vsi->back;
4987 int base = vsi->base_vector;
4992 if (!vsi->q_vectors)
4995 if (!vsi->irqs_ready)
4998 vsi->irqs_ready = false;
4999 for (i = 0; i < vsi->num_q_vectors; i++) {
5007 if (!vsi->q_vectors[i] ||
5008 !vsi->q_vectors[i]->num_ringpairs)
5015 free_irq(irq_num, vsi->q_vectors[i]);
5099 * @vsi: the VSI being configured
5106 static void i40e_free_q_vector(struct i40e_vsi *vsi, int v_idx)
5108 struct i40e_q_vector *q_vector = vsi->q_vectors[v_idx];
5122 if (vsi->netdev)
5125 vsi->q_vectors[v_idx] = NULL;
5132 * @vsi: the VSI being un-configured
5137 static void i40e_vsi_free_q_vectors(struct i40e_vsi *vsi)
5141 for (v_idx = 0; v_idx < vsi->num_q_vectors; v_idx++)
5142 i40e_free_q_vector(vsi, v_idx);
5174 struct i40e_vsi *vsi;
5185 i40e_pf_for_each_vsi(pf, i, vsi)
5186 i40e_vsi_free_q_vectors(vsi);
5193 * @vsi: the VSI being configured
5195 static void i40e_napi_enable_all(struct i40e_vsi *vsi)
5199 if (!vsi->netdev)
5202 for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++) {
5203 struct i40e_q_vector *q_vector = vsi->q_vectors[q_idx];
5212 * @vsi: the VSI being configured
5214 static void i40e_napi_disable_all(struct i40e_vsi *vsi)
5218 if (!vsi->netdev)
5221 for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++) {
5222 struct i40e_q_vector *q_vector = vsi->q_vectors[q_idx];
5231 * @vsi: the vsi to be quelled
5233 static void i40e_vsi_close(struct i40e_vsi *vsi)
5235 struct i40e_pf *pf = vsi->back;
5236 if (!test_and_set_bit(__I40E_VSI_DOWN, vsi->state))
5237 i40e_down(vsi);
5238 i40e_vsi_free_irq(vsi);
5239 i40e_vsi_free_tx_resources(vsi);
5240 i40e_vsi_free_rx_resources(vsi);
5241 vsi->current_netdev_flags = 0;
5249 * @vsi: the VSI being paused
5251 static void i40e_quiesce_vsi(struct i40e_vsi *vsi)
5253 if (test_bit(__I40E_VSI_DOWN, vsi->state))
5256 set_bit(__I40E_VSI_NEEDS_RESTART, vsi->state);
5257 if (vsi->netdev && netif_running(vsi->netdev))
5258 vsi->netdev->netdev_ops->ndo_stop(vsi->netdev);
5260 i40e_vsi_close(vsi);
5265 * @vsi: the VSI being resumed
5267 static void i40e_unquiesce_vsi(struct i40e_vsi *vsi)
5269 if (!test_and_clear_bit(__I40E_VSI_NEEDS_RESTART, vsi->state))
5272 if (vsi->netdev && netif_running(vsi->netdev))
5273 vsi->netdev->netdev_ops->ndo_open(vsi->netdev);
5275 i40e_vsi_open(vsi); /* this clears the DOWN bit */
5284 struct i40e_vsi *vsi;
5287 i40e_pf_for_each_vsi(pf, v, vsi)
5288 i40e_quiesce_vsi(vsi);
5297 struct i40e_vsi *vsi;
5300 i40e_pf_for_each_vsi(pf, v, vsi)
5301 i40e_unquiesce_vsi(vsi);
5306 * @vsi: the VSI being configured
5310 int i40e_vsi_wait_queues_disabled(struct i40e_vsi *vsi)
5312 struct i40e_pf *pf = vsi->back;
5315 pf_q = vsi->base_queue;
5316 for (i = 0; i < vsi->num_queue_pairs; i++, pf_q++) {
5322 vsi->seid, pf_q);
5326 if (!i40e_enabled_xdp_vsi(vsi))
5330 ret = i40e_pf_txq_wait(pf, pf_q + vsi->alloc_queue_pairs,
5335 vsi->seid, pf_q);
5344 vsi->seid, pf_q);
5362 struct i40e_vsi *vsi;
5365 i40e_pf_for_each_vsi(pf, v, vsi) {
5366 ret = i40e_vsi_wait_queues_disabled(vsi);
5475 struct i40e_vsi *vsi = pf->vsi[pf->lan_vsi];
5476 u8 num_tc = vsi->mqprio_qopt.qopt.num_tc;
5498 return pf->vsi[pf->lan_vsi]->mqprio_qopt.qopt.num_tc;
5551 * @vsi: the VSI being queried
5555 static int i40e_vsi_get_bw_info(struct i40e_vsi *vsi)
5559 struct i40e_pf *pf = vsi->back;
5566 ret = i40e_aq_query_vsi_bw_config(hw, vsi->seid, &bw_config, NULL);
5569 "couldn't get PF vsi bw config, err %pe aq_err %s\n",
5576 ret = i40e_aq_query_vsi_ets_sla_config(hw, vsi->seid, &bw_ets_config,
5580 "couldn't get PF vsi ets bw config, err %pe aq_err %s\n",
5594 vsi->bw_limit = le16_to_cpu(bw_config.port_bw_limit);
5595 vsi->bw_max_quanta = bw_config.max_bw;
5599 vsi->bw_ets_share_credits[i] = bw_ets_config.share_credits[i];
5600 vsi->bw_ets_limit_credits[i] =
5603 vsi->bw_ets_max_quanta[i] = (u8)((tc_bw_max >> (i*4)) & 0x7);
5611 * @vsi: the VSI being configured
5617 static int i40e_vsi_configure_bw_alloc(struct i40e_vsi *vsi, u8 enabled_tc,
5621 struct i40e_pf *pf = vsi->back;
5628 if (!vsi->mqprio_qopt.qopt.hw && !test_bit(I40E_FLAG_DCB_ENA, pf->flags)) {
5629 ret = i40e_set_bw_limit(vsi, vsi->seid, 0);
5632 "Failed to reset tx rate for vsi->seid %u\n",
5633 vsi->seid);
5641 ret = i40e_aq_config_vsi_tc_bw(&pf->hw, vsi->seid, &bw_data, NULL);
5650 vsi->info.qs_handle[i] = bw_data.qs_handles[i];
5657 * @vsi: the VSI being configured
5661 static void i40e_vsi_config_netdev_tc(struct i40e_vsi *vsi, u8 enabled_tc)
5663 struct net_device *netdev = vsi->netdev;
5664 struct i40e_pf *pf = vsi->back;
5679 if (netdev_set_num_tc(netdev, vsi->tc_config.numtc))
5691 if (vsi->tc_config.enabled_tc & BIT(i))
5693 vsi->tc_config.tc_info[i].netdev_tc,
5694 vsi->tc_config.tc_info[i].qcount,
5695 vsi->tc_config.tc_info[i].qoffset);
5706 netdev_tc = vsi->tc_config.tc_info[ets_tc].netdev_tc;
5713 * @vsi: the VSI being configured
5716 static void i40e_vsi_update_queue_map(struct i40e_vsi *vsi,
5721 * update vsi params
5723 vsi->info.mapping_flags = ctxt->info.mapping_flags;
5724 memcpy(&vsi->info.queue_mapping,
5725 &ctxt->info.queue_mapping, sizeof(vsi->info.queue_mapping));
5726 memcpy(&vsi->info.tc_mapping, ctxt->info.tc_mapping,
5727 sizeof(vsi->info.tc_mapping));
5732 * @vsi: the VSI being reconfigured
5735 int i40e_update_adq_vsi_queues(struct i40e_vsi *vsi, int vsi_offset)
5742 if (!vsi)
5744 pf = vsi->back;
5747 ctxt.seid = vsi->seid;
5749 ctxt.vf_num = vsi->vf_id + hw->func_caps.vf_base_id + vsi_offset;
5750 ctxt.uplink_seid = vsi->uplink_seid;
5753 ctxt.info = vsi->info;
5755 i40e_vsi_setup_queue_map(vsi, &ctxt, vsi->tc_config.enabled_tc,
5757 if (vsi->reconfig_rss) {
5758 vsi->rss_size = min_t(int, pf->alloc_rss_size,
5759 vsi->num_queue_pairs);
5760 ret = i40e_vsi_config_rss(vsi);
5765 vsi->reconfig_rss = false;
5770 dev_info(&pf->pdev->dev, "Update vsi config failed, err %pe aq_err %s\n",
5776 i40e_vsi_update_queue_map(vsi, &ctxt);
5777 vsi->info.valid_sections = 0;
5784 * @vsi: VSI to be configured
5795 static int i40e_vsi_config_tc(struct i40e_vsi *vsi, u8 enabled_tc)
5798 struct i40e_pf *pf = vsi->back;
5805 if (vsi->tc_config.enabled_tc == enabled_tc &&
5806 vsi->mqprio_qopt.mode != TC_MQPRIO_MODE_CHANNEL)
5815 ret = i40e_vsi_configure_bw_alloc(vsi, enabled_tc, bw_share);
5821 enabled_tc, vsi->seid);
5822 ret = i40e_aq_query_vsi_bw_config(hw, vsi->seid,
5826 "Failed querying vsi bw info, err %pe aq_err %s\n",
5844 ret = i40e_vsi_configure_bw_alloc(vsi, enabled_tc, bw_share);
5848 enabled_tc, vsi->seid);
5854 ctxt.seid = vsi->seid;
5855 ctxt.pf_num = vsi->back->hw.pf_id;
5857 ctxt.uplink_seid = vsi->uplink_seid;
5858 ctxt.info = vsi->info;
5860 ret = i40e_vsi_setup_queue_map_mqprio(vsi, &ctxt, enabled_tc);
5864 i40e_vsi_setup_queue_map(vsi, &ctxt, enabled_tc, false);
5867 /* On destroying the qdisc, reset vsi->rss_size, as number of enabled
5870 if (!vsi->mqprio_qopt.qopt.hw && vsi->reconfig_rss) {
5871 vsi->rss_size = min_t(int, vsi->back->alloc_rss_size,
5872 vsi->num_queue_pairs);
5873 ret = i40e_vsi_config_rss(vsi);
5875 dev_info(&vsi->back->pdev->dev,
5879 vsi->reconfig_rss = false;
5881 if (test_bit(I40E_FLAG_IWARP_ENA, vsi->back->flags)) {
5893 "Update vsi tc config failed, err %pe aq_err %s\n",
5899 i40e_vsi_update_queue_map(vsi, &ctxt);
5900 vsi->info.valid_sections = 0;
5903 ret = i40e_vsi_get_bw_info(vsi);
5906 "Failed updating vsi bw info, err %pe aq_err %s\n",
5913 i40e_vsi_config_netdev_tc(vsi, enabled_tc);
5920 * @vsi: VSI to be configured
5923 static int i40e_get_link_speed(struct i40e_vsi *vsi)
5925 struct i40e_pf *pf = vsi->back;
5945 * @vsi: Pointer to vsi structure
5950 static u64 i40e_bw_bytes_to_mbits(struct i40e_vsi *vsi, u64 max_tx_rate)
5953 dev_warn(&vsi->back->pdev->dev,
5965 * @vsi: VSI to be configured
5971 int i40e_set_bw_limit(struct i40e_vsi *vsi, u16 seid, u64 max_tx_rate)
5973 struct i40e_pf *pf = vsi->back;
5978 speed = i40e_get_link_speed(vsi);
5998 "Failed set tx rate (%llu Mbps) for vsi->seid %u, err %pe aq_err %s\n",
6006 * @vsi: VSI to be configured
6010 static void i40e_remove_queue_channels(struct i40e_vsi *vsi)
6015 struct i40e_pf *pf = vsi->back;
6022 vsi->current_rss_size = 0;
6025 if (list_empty(&vsi->ch_list))
6028 list_for_each_entry_safe(ch, ch_tmp, &vsi->ch_list, list) {
6043 tx_ring = vsi->tx_rings[pf_q];
6046 rx_ring = vsi->rx_rings[pf_q];
6051 ret = i40e_set_bw_limit(vsi, ch->seid, 0);
6053 dev_info(&vsi->back->pdev->dev,
6065 ret = i40e_add_del_cloud_filter_big_buf(vsi,
6069 ret = i40e_add_del_cloud_filter(vsi, cfilter,
6081 ret = i40e_aq_delete_element(&vsi->back->hw, ch->seid,
6084 dev_err(&vsi->back->pdev->dev,
6089 INIT_LIST_HEAD(&vsi->ch_list);
6094 * @vsi: ptr to VSI to which channels are associated with
6099 static int i40e_get_max_queues_for_channel(struct i40e_vsi *vsi)
6104 list_for_each_entry_safe(ch, ch_tmp, &vsi->ch_list, list) {
6118 * @vsi: the parent VSI
6126 struct i40e_vsi *vsi, bool *reconfig_rss)
6134 if (vsi->current_rss_size) {
6135 if (num_queues > vsi->current_rss_size) {
6137 "Error: num_queues (%d) > vsi's current_size(%d)\n",
6138 num_queues, vsi->current_rss_size);
6140 } else if ((num_queues < vsi->current_rss_size) &&
6143 "Error: num_queues (%d) < vsi's current_size(%d), but not power of 2\n",
6144 num_queues, vsi->current_rss_size);
6155 max_ch_queues = i40e_get_max_queues_for_channel(vsi);
6170 * @vsi: the VSI being setup
6175 static int i40e_vsi_reconfig_rss(struct i40e_vsi *vsi, u16 rss_size)
6177 struct i40e_pf *pf = vsi->back;
6184 if (!vsi->rss_size)
6187 if (rss_size > vsi->rss_size)
6190 local_rss_size = min_t(int, vsi->rss_size, rss_size);
6191 lut = kzalloc(vsi->rss_table_size, GFP_KERNEL);
6196 i40e_fill_rss_lut(pf, lut, vsi->rss_table_size, local_rss_size);
6201 if (vsi->rss_hkey_user)
6202 memcpy(seed, vsi->rss_hkey_user, I40E_HKEY_ARRAY_SIZE);
6206 ret = i40e_config_rss(vsi, seed, lut, vsi->rss_table_size);
6218 if (!vsi->orig_rss_size)
6219 vsi->orig_rss_size = vsi->rss_size;
6220 vsi->current_rss_size = local_rss_size;
6282 "add new vsi failed, ch->type %d\n", ch->type);
6308 "add new vsi failed, err %pe aq_err %s\n",
6325 * update vsi params
6336 static int i40e_channel_config_bw(struct i40e_vsi *vsi, struct i40e_channel *ch,
6348 ret = i40e_aq_config_vsi_tc_bw(&vsi->back->hw, ch->seid,
6351 dev_info(&vsi->back->pdev->dev,
6353 vsi->back->hw.aq.asq_last_status, ch->seid);
6366 * @vsi: the VSI being setup
6373 struct i40e_vsi *vsi,
6387 ret = i40e_channel_config_bw(vsi, ch, bw_share);
6389 dev_info(&vsi->back->pdev->dev,
6404 tx_ring = vsi->tx_rings[pf_q];
6408 rx_ring = vsi->rx_rings[pf_q];
6418 * @vsi: the VSI being setup
6427 struct i40e_vsi *vsi,
6434 ch->base_queue = vsi->next_base_queue;
6450 ret = i40e_channel_config_tx_ring(pf, vsi, ch);
6459 vsi->next_base_queue = vsi->next_base_queue + ch->num_queue_pairs;
6464 vsi->next_base_queue);
6471 * @vsi: pointer to the VSI to set up the channel within
6477 static bool i40e_setup_channel(struct i40e_pf *pf, struct i40e_vsi *vsi,
6484 if (vsi->type == I40E_VSI_MAIN) {
6487 dev_err(&pf->pdev->dev, "unsupported parent vsi type(%d)\n",
6488 vsi->type);
6493 seid = pf->vsi[pf->lan_vsi]->uplink_seid;
6496 ret = i40e_setup_hw_channel(pf, vsi, ch, seid, vsi_type);
6507 * @vsi: ptr to VSI which has PF backing
6512 static int i40e_validate_and_set_switch_mode(struct i40e_vsi *vsi)
6515 struct i40e_pf *pf = vsi->back;
6564 * @vsi: VSI to be configured
6570 int i40e_create_queue_channel(struct i40e_vsi *vsi,
6573 struct i40e_pf *pf = vsi->back;
6587 err = i40e_validate_num_queues(pf, ch->num_queue_pairs, vsi,
6602 if (vsi->type == I40E_VSI_MAIN) {
6613 /* By this time, vsi->cnt_q_avail shall be set to non-zero and
6616 if (!vsi->cnt_q_avail || vsi->cnt_q_avail < ch->num_queue_pairs) {
6619 vsi->cnt_q_avail, ch->num_queue_pairs);
6623 /* reconfig_rss only if vsi type is MAIN_VSI */
6624 if (reconfig_rss && (vsi->type == I40E_VSI_MAIN)) {
6625 err = i40e_vsi_reconfig_rss(vsi, ch->num_queue_pairs);
6634 if (!i40e_setup_channel(pf, vsi, ch)) {
6647 if (i40e_set_bw_limit(vsi, ch->seid, ch->max_tx_rate))
6652 "Set tx rate of %llu Mbps (count of 50Mbps %llu) for vsi->seid %u\n",
6659 ch->parent_vsi = vsi;
6662 vsi->cnt_q_avail -= ch->num_queue_pairs;
6669 * @vsi: VSI to be configured
6673 static int i40e_configure_queue_channels(struct i40e_vsi *vsi)
6679 /* Create app vsi with the TCs. Main VSI with TC0 is already set up */
6680 vsi->tc_seid_map[0] = vsi->seid;
6682 if (vsi->tc_config.enabled_tc & BIT(i)) {
6691 vsi->tc_config.tc_info[i].qcount;
6693 vsi->tc_config.tc_info[i].qoffset;
6698 max_rate = vsi->mqprio_qopt.max_rate[i];
6702 list_add_tail(&ch->list, &vsi->ch_list);
6704 ret = i40e_create_queue_channel(vsi, ch);
6706 dev_err(&vsi->back->pdev->dev,
6711 vsi->tc_seid_map[i] = ch->seid;
6716 i40e_do_reset(vsi->back, I40E_PF_RESET_FLAG, true);
6720 i40e_remove_queue_channels(vsi);
6785 struct i40e_vsi *vsi;
6807 i40e_pf_for_each_vsi(pf, v, vsi) {
6816 ret = i40e_vsi_config_tc(vsi, tc_map);
6820 vsi->seid);
6824 i40e_vsi_map_rings_to_vectors(vsi);
6825 if (vsi->netdev)
6826 i40e_dcbnl_set_all(vsi);
7050 mfs_tc[i] = pf->vsi[pf->lan_vsi]->netdev->mtu;
7242 * @vsi: the VSI for which link needs a message
7245 void i40e_print_link_message(struct i40e_vsi *vsi, bool isup)
7248 struct i40e_pf *pf = vsi->back;
7260 if ((vsi->current_isup == isup) && (vsi->current_speed == new_speed))
7262 vsi->current_isup = isup;
7263 vsi->current_speed = new_speed;
7265 netdev_info(vsi->netdev, "NIC Link is Down\n");
7275 netdev_warn(vsi->netdev,
7340 if (vsi->back->hw.phy.link_info.req_fec_info &
7342 if (vsi->back->hw.phy.link_info.req_fec_info &
7348 netdev_info(vsi->netdev,
7367 netdev_info(vsi->netdev,
7371 netdev_info(vsi->netdev,
7380 * @vsi: the VSI being configured
7382 static int i40e_up_complete(struct i40e_vsi *vsi)
7384 struct i40e_pf *pf = vsi->back;
7388 i40e_vsi_configure_msix(vsi);
7390 i40e_configure_msi_and_legacy(vsi);
7393 err = i40e_vsi_start_rings(vsi);
7397 clear_bit(__I40E_VSI_DOWN, vsi->state);
7398 i40e_napi_enable_all(vsi);
7399 i40e_vsi_enable_irq(vsi);
7402 (vsi->netdev)) {
7403 i40e_print_link_message(vsi, true);
7404 netif_tx_start_all_queues(vsi->netdev);
7405 netif_carrier_on(vsi->netdev);
7409 if (vsi->type == I40E_VSI_FDIR) {
7413 i40e_fdir_filter_restore(vsi);
7427 * @vsi: the VSI being configured
7432 static void i40e_vsi_reinit_locked(struct i40e_vsi *vsi)
7434 struct i40e_pf *pf = vsi->back;
7438 i40e_down(vsi);
7440 i40e_up(vsi);
7550 * @vsi: the VSI being configured
7552 int i40e_up(struct i40e_vsi *vsi)
7556 if (vsi->type == I40E_VSI_MAIN &&
7557 (test_bit(I40E_FLAG_LINK_DOWN_ON_CLOSE_ENA, vsi->back->flags) ||
7558 test_bit(I40E_FLAG_TOTAL_PORT_SHUTDOWN_ENA, vsi->back->flags)))
7559 i40e_force_link_state(vsi->back, true);
7561 err = i40e_vsi_configure(vsi);
7563 err = i40e_up_complete(vsi);
7570 * @vsi: the VSI being stopped
7572 void i40e_down(struct i40e_vsi *vsi)
7577 * sets the vsi->state __I40E_VSI_DOWN bit.
7579 if (vsi->netdev) {
7580 netif_carrier_off(vsi->netdev);
7581 netif_tx_disable(vsi->netdev);
7583 i40e_vsi_disable_irq(vsi);
7584 i40e_vsi_stop_rings(vsi);
7585 if (vsi->type == I40E_VSI_MAIN &&
7586 (test_bit(I40E_FLAG_LINK_DOWN_ON_CLOSE_ENA, vsi->back->flags) ||
7587 test_bit(I40E_FLAG_TOTAL_PORT_SHUTDOWN_ENA, vsi->back->flags)))
7588 i40e_force_link_state(vsi->back, false);
7589 i40e_napi_disable_all(vsi);
7591 for (i = 0; i < vsi->num_queue_pairs; i++) {
7592 i40e_clean_tx_ring(vsi->tx_rings[i]);
7593 if (i40e_enabled_xdp_vsi(vsi)) {
7598 i40e_clean_tx_ring(vsi->xdp_rings[i]);
7600 i40e_clean_rx_ring(vsi->rx_rings[i]);
7607 * @vsi: the VSI being configured
7610 static int i40e_validate_mqprio_qopt(struct i40e_vsi *vsi,
7625 dev_err(&vsi->back->pdev->dev,
7639 if (vsi->num_queue_pairs <
7641 dev_err(&vsi->back->pdev->dev,
7645 if (sum_max_rate > i40e_get_link_speed(vsi)) {
7646 dev_err(&vsi->back->pdev->dev,
7655 * @vsi: the VSI being configured
7657 static void i40e_vsi_set_default_tc_config(struct i40e_vsi *vsi)
7663 vsi->tc_config.numtc = 1;
7664 vsi->tc_config.enabled_tc = 1;
7665 qcount = min_t(int, vsi->alloc_queue_pairs,
7666 i40e_pf_get_max_q_per_tc(vsi->back));
7671 vsi->tc_config.tc_info[i].qoffset = 0;
7673 vsi->tc_config.tc_info[i].qcount = qcount;
7675 vsi->tc_config.tc_info[i].qcount = 1;
7676 vsi->tc_config.tc_info[i].netdev_tc = 0;
7737 * @vsi: the VSI we want to access
7740 static void i40e_reset_ch_rings(struct i40e_vsi *vsi, struct i40e_channel *ch)
7748 tx_ring = vsi->tx_rings[pf_q];
7750 rx_ring = vsi->rx_rings[pf_q];
7757 * @vsi: the VSI we want to access
7763 static void i40e_free_macvlan_channels(struct i40e_vsi *vsi)
7768 if (list_empty(&vsi->macvlan_list))
7771 list_for_each_entry_safe(ch, ch_tmp, &vsi->macvlan_list, list) {
7775 i40e_reset_ch_rings(vsi, ch);
7776 clear_bit(ch->fwd->bit_no, vsi->fwd_bitmask);
7777 netdev_unbind_sb_channel(vsi->netdev, ch->fwd->netdev);
7791 ret = i40e_aq_delete_element(&vsi->back->hw, ch->seid,
7794 dev_err(&vsi->back->pdev->dev,
7799 vsi->macvlan_cnt = 0;
7804 * @vsi: the VSI we want to access
7808 static int i40e_fwd_ring_up(struct i40e_vsi *vsi, struct net_device *vdev,
7813 struct i40e_pf *pf = vsi->back;
7817 list_for_each_entry_safe(iter, ch_tmp, &vsi->macvlan_list, list) {
7822 netdev_bind_sb_channel_queue(vsi->netdev, vdev,
7833 tx_ring = vsi->tx_rings[pf_q];
7837 rx_ring = vsi->rx_rings[pf_q];
7863 rx_ring = vsi->rx_rings[pf_q];
7878 * @vsi: the VSI we want to access
7883 static int i40e_setup_macvlans(struct i40e_vsi *vsi, u16 macvlan_cnt, u16 qcnt,
7886 struct i40e_pf *pf = vsi->back;
7894 if (vsi->type != I40E_VSI_MAIN || !macvlan_cnt)
7897 num_qps = vsi->num_queue_pairs - (macvlan_cnt * qcnt);
7909 ctxt.seid = vsi->seid;
7910 ctxt.pf_num = vsi->back->hw.pf_id;
7912 ctxt.uplink_seid = vsi->uplink_seid;
7913 ctxt.info = vsi->info;
7916 ctxt.info.queue_mapping[0] = cpu_to_le16(vsi->base_queue);
7920 vsi->rss_size = max_t(u16, num_qps, qcnt);
7921 ret = i40e_vsi_config_rss(vsi);
7925 vsi->rss_size);
7928 vsi->reconfig_rss = true;
7929 dev_dbg(&vsi->back->pdev->dev,
7930 "Reconfigured RSS with num_queues (%u)\n", vsi->rss_size);
7931 vsi->next_base_queue = num_qps;
7932 vsi->cnt_q_avail = vsi->num_queue_pairs - num_qps;
7940 "Update vsi tc config failed, err %pe aq_err %s\n",
7946 i40e_vsi_update_queue_map(vsi, &ctxt);
7947 vsi->info.valid_sections = 0;
7950 INIT_LIST_HEAD(&vsi->macvlan_list);
7959 if (!i40e_setup_channel(pf, vsi, ch)) {
7964 ch->parent_vsi = vsi;
7965 vsi->cnt_q_avail -= ch->num_queue_pairs;
7966 vsi->macvlan_cnt++;
7967 list_add_tail(&ch->list, &vsi->macvlan_list);
7974 i40e_free_macvlan_channels(vsi);
7988 struct i40e_vsi *vsi = np->vsi;
7989 struct i40e_pf *pf = vsi->back;
8012 if (!vsi->macvlan_cnt) {
8014 set_bit(0, vsi->fwd_bitmask);
8047 i40e_quiesce_vsi(vsi);
8050 ret = i40e_setup_macvlans(vsi, macvlan_cnt, q_per_macvlan,
8056 i40e_unquiesce_vsi(vsi);
8058 avail_macvlan = find_first_zero_bit(vsi->fwd_bitmask,
8059 vsi->macvlan_cnt);
8068 set_bit(avail_macvlan, vsi->fwd_bitmask);
8077 ret = i40e_fwd_ring_up(vsi, vdev, fwd);
8092 * @vsi: the VSI we want to access
8094 static void i40e_del_all_macvlans(struct i40e_vsi *vsi)
8097 struct i40e_pf *pf = vsi->back;
8101 if (list_empty(&vsi->macvlan_list))
8104 list_for_each_entry_safe(ch, ch_tmp, &vsi->macvlan_list, list) {
8111 i40e_reset_ch_rings(vsi, ch);
8112 clear_bit(ch->fwd->bit_no, vsi->fwd_bitmask);
8113 netdev_unbind_sb_channel(vsi->netdev,
8133 struct i40e_vsi *vsi = np->vsi;
8134 struct i40e_pf *pf = vsi->back;
8139 list_for_each_entry_safe(ch, ch_tmp, &vsi->macvlan_list, list) {
8148 i40e_reset_ch_rings(vsi, ch);
8149 clear_bit(ch->fwd->bit_no, vsi->fwd_bitmask);
8174 struct i40e_vsi *vsi = np->vsi;
8175 struct i40e_pf *pf = vsi->back;
8183 old_queue_pairs = vsi->num_queue_pairs;
8189 memcpy(&vsi->mqprio_qopt, mqprio_qopt, sizeof(*mqprio_qopt));
8225 ret = i40e_validate_mqprio_qopt(vsi, mqprio_qopt);
8228 memcpy(&vsi->mqprio_qopt, mqprio_qopt,
8243 if (enabled_tc == vsi->tc_config.enabled_tc &&
8248 i40e_quiesce_vsi(vsi);
8251 i40e_remove_queue_channels(vsi);
8254 ret = i40e_vsi_config_tc(vsi, enabled_tc);
8257 vsi->seid);
8261 (!is_power_of_2(vsi->tc_config.tc_info[0].qcount))) {
8264 vsi->tc_config.tc_info[0].qcount);
8270 dev_info(&vsi->back->pdev->dev,
8272 vsi->seid, vsi->tc_config.tc_info[0].qcount);
8275 if (vsi->mqprio_qopt.max_rate[0]) {
8276 u64 max_tx_rate = i40e_bw_bytes_to_mbits(vsi,
8277 vsi->mqprio_qopt.max_rate[0]);
8279 ret = i40e_set_bw_limit(vsi, vsi->seid, max_tx_rate);
8284 dev_dbg(&vsi->back->pdev->dev,
8285 "Set tx rate of %llu Mbps (count of 50Mbps %llu) for vsi->seid %u\n",
8288 vsi->seid);
8294 ret = i40e_configure_queue_channels(vsi);
8296 vsi->num_queue_pairs = old_queue_pairs;
8307 i40e_vsi_set_default_tc_config(vsi);
8312 i40e_unquiesce_vsi(vsi);
8361 * @vsi: pointer to VSI
8368 int i40e_add_del_cloud_filter(struct i40e_vsi *vsi,
8372 struct i40e_pf *pf = vsi->back;
8430 * @vsi: pointer to VSI
8437 int i40e_add_del_cloud_filter_big_buf(struct i40e_vsi *vsi,
8442 struct i40e_pf *pf = vsi->back;
8511 ret = i40e_validate_and_set_switch_mode(vsi);
8540 * @vsi: Pointer to VSI
8545 static int i40e_parse_cls_flower(struct i40e_vsi *vsi,
8552 struct i40e_pf *pf = vsi->back;
8747 * @vsi: Pointer to VSI
8752 static int i40e_handle_tclass(struct i40e_vsi *vsi, u32 tc,
8759 filter->seid = vsi->seid;
8761 } else if (vsi->tc_config.enabled_tc & BIT(tc)) {
8763 dev_err(&vsi->back->pdev->dev,
8767 if (list_empty(&vsi->ch_list))
8769 list_for_each_entry_safe(ch, ch_tmp, &vsi->ch_list,
8771 if (ch->seid == vsi->tc_seid_map[tc])
8776 dev_err(&vsi->back->pdev->dev, "TC is not enabled\n");
8782 * @vsi: Pointer to VSI
8786 static int i40e_configure_clsflower(struct i40e_vsi *vsi,
8789 int tc = tc_classid_to_hwtc(vsi->netdev, cls_flower->classid);
8791 struct i40e_pf *pf = vsi->back;
8795 dev_err(&vsi->back->pdev->dev, "Invalid traffic class\n");
8810 dev_err(&vsi->back->pdev->dev,
8815 if (test_bit(I40E_FLAG_FD_SB_ENA, vsi->back->flags)) {
8816 dev_err(&vsi->back->pdev->dev,
8818 clear_bit(I40E_FLAG_FD_SB_ENA, vsi->back->flags);
8819 clear_bit(I40E_FLAG_FD_SB_TO_CLOUD_FILTER, vsi->back->flags);
8828 err = i40e_parse_cls_flower(vsi, cls_flower, filter);
8832 err = i40e_handle_tclass(vsi, tc, filter);
8838 err = i40e_add_del_cloud_filter_big_buf(vsi, filter, true);
8840 err = i40e_add_del_cloud_filter(vsi, filter, true);
8863 * @vsi: Pointer to VSI
8867 static struct i40e_cloud_filter *i40e_find_cloud_filter(struct i40e_vsi *vsi,
8874 &vsi->back->cloud_filter_list, cloud_node)
8882 * @vsi: Pointer to VSI
8886 static int i40e_delete_clsflower(struct i40e_vsi *vsi,
8890 struct i40e_pf *pf = vsi->back;
8893 filter = i40e_find_cloud_filter(vsi, &cls_flower->cookie);
8901 err = i40e_add_del_cloud_filter_big_buf(vsi, filter, false);
8903 err = i40e_add_del_cloud_filter(vsi, filter, false);
8932 struct i40e_vsi *vsi = np->vsi;
8936 return i40e_configure_clsflower(vsi, cls_flower);
8938 return i40e_delete_clsflower(vsi, cls_flower);
8951 if (!tc_cls_can_offload_and_chain0(np->vsi->netdev, type_data))
8998 struct i40e_vsi *vsi = np->vsi;
8999 struct i40e_pf *pf = vsi->back;
9012 err = i40e_vsi_open(vsi);
9030 * @vsi: vsi structure
9036 static int i40e_netif_set_realnum_tx_rx_queues(struct i40e_vsi *vsi)
9040 ret = netif_set_real_num_rx_queues(vsi->netdev,
9041 vsi->num_queue_pairs);
9045 return netif_set_real_num_tx_queues(vsi->netdev,
9046 vsi->num_queue_pairs);
9051 * @vsi: the VSI to open
9059 int i40e_vsi_open(struct i40e_vsi *vsi)
9061 struct i40e_pf *pf = vsi->back;
9066 err = i40e_vsi_setup_tx_resources(vsi);
9069 err = i40e_vsi_setup_rx_resources(vsi);
9073 err = i40e_vsi_configure(vsi);
9077 if (vsi->netdev) {
9079 dev_driver_string(&pf->pdev->dev), vsi->netdev->name);
9080 err = i40e_vsi_request_irq(vsi, int_name);
9085 err = i40e_netif_set_realnum_tx_rx_queues(vsi);
9089 } else if (vsi->type == I40E_VSI_FDIR) {
9093 err = i40e_vsi_request_irq(vsi, int_name);
9102 err = i40e_up_complete(vsi);
9109 i40e_down(vsi);
9111 i40e_vsi_free_irq(vsi);
9113 i40e_vsi_free_rx_resources(vsi);
9115 i40e_vsi_free_tx_resources(vsi);
9116 if (vsi == pf->vsi[pf->lan_vsi])
9241 struct i40e_vsi *vsi = np->vsi;
9243 i40e_vsi_close(vsi);
9261 struct i40e_vsi *vsi;
9322 i40e_pf_for_each_vsi(pf, i, vsi) {
9324 vsi->state))
9325 i40e_vsi_reinit_locked(vsi);
9331 i40e_pf_for_each_vsi(pf, i, vsi) {
9333 vsi->state)) {
9334 set_bit(__I40E_VSI_DOWN, vsi->state);
9335 i40e_down(vsi);
9807 i40e_fdir_filter_restore(pf->vsi[pf->lan_vsi]);
9845 * @vsi: vsi to be notified
9848 static void i40e_vsi_link_event(struct i40e_vsi *vsi, bool link_up)
9850 if (!vsi || test_bit(__I40E_VSI_DOWN, vsi->state))
9853 switch (vsi->type) {
9855 if (!vsi->netdev || !vsi->netdev_registered)
9859 netif_carrier_on(vsi->netdev);
9860 netif_tx_wake_all_queues(vsi->netdev);
9862 netif_carrier_off(vsi->netdev);
9863 netif_tx_stop_all_queues(vsi->netdev);
9885 struct i40e_vsi *vsi;
9894 i40e_pf_for_each_vsi(pf, i, vsi)
9895 if (vsi->uplink_seid == veb->seid)
9896 i40e_vsi_link_event(vsi, link_up);
9905 struct i40e_vsi *vsi = pf->vsi[pf->lan_vsi];
9936 (test_bit(__I40E_VSI_DOWN, vsi->state) ||
9937 new_link == netif_carrier_ok(vsi->netdev)))
9940 i40e_print_link_message(vsi, new_link);
9948 i40e_vsi_link_event(vsi, new_link);
9988 struct i40e_vsi *vsi;
10010 i40e_pf_for_each_vsi(pf, i, vsi)
10011 if (vsi->netdev)
10012 i40e_update_stats(vsi);
10276 struct i40e_vsi *vsi = pf->vsi[pf->lan_vsi];
10286 "couldn't get PF vsi config, err %pe aq_err %s\n",
10295 ret = i40e_aq_update_vsi_params(&vsi->back->hw, &ctxt, NULL);
10298 "update vsi switch failed, err %pe aq_err %s\n",
10312 struct i40e_vsi *vsi = pf->vsi[pf->lan_vsi];
10322 "couldn't get PF vsi config, err %pe aq_err %s\n",
10331 ret = i40e_aq_update_vsi_params(&vsi->back->hw, &ctxt, NULL);
10334 "update vsi switch failed, err %pe aq_err %s\n",
10373 struct i40e_vsi *vsi;
10388 ctl_vsi = pf->vsi[pf->lan_vsi];
10423 i40e_pf_for_each_vsi(pf, v, vsi) {
10424 if (vsi == ctl_vsi)
10427 if (vsi->veb_idx == veb->idx) {
10428 vsi->uplink_seid = veb->seid;
10429 ret = i40e_add_vsi(vsi);
10436 i40e_vsi_reset_stats(vsi);
10523 static int i40e_vsi_clear(struct i40e_vsi *vsi);
10531 struct i40e_vsi *vsi;
10552 vsi = i40e_find_vsi_by_type(pf, I40E_VSI_FDIR);
10555 if (!vsi) {
10556 vsi = i40e_vsi_setup(pf, I40E_VSI_FDIR,
10557 pf->vsi[pf->lan_vsi]->seid, 0);
10558 if (!vsi) {
10566 i40e_vsi_setup_irqhandler(vsi, i40e_fdir_clean_ring);
10575 struct i40e_vsi *vsi;
10578 vsi = i40e_find_vsi_by_type(pf, I40E_VSI_FDIR);
10579 if (vsi)
10580 i40e_vsi_release(vsi);
10585 * @vsi: PF main vsi
10591 static int i40e_rebuild_cloud_filters(struct i40e_vsi *vsi, u16 seid)
10594 struct i40e_pf *pf = vsi->back;
10605 ret = i40e_add_del_cloud_filter_big_buf(vsi, cfilter,
10608 ret = i40e_add_del_cloud_filter(vsi, cfilter, true);
10624 * @vsi: PF main vsi
10628 static int i40e_rebuild_channels(struct i40e_vsi *vsi)
10633 if (list_empty(&vsi->ch_list))
10636 list_for_each_entry_safe(ch, ch_tmp, &vsi->ch_list, list) {
10640 ret = i40e_add_channel(vsi->back, vsi->uplink_seid, ch);
10642 dev_info(&vsi->back->pdev->dev,
10644 vsi->uplink_seid);
10648 ret = i40e_channel_config_tx_ring(vsi->back, vsi, ch);
10650 dev_info(&vsi->back->pdev->dev,
10656 vsi->next_base_queue = vsi->next_base_queue +
10661 if (i40e_set_bw_limit(vsi, ch->seid,
10666 dev_dbg(&vsi->back->pdev->dev,
10667 "Set tx rate of %llu Mbps (count of 50Mbps %llu) for vsi->seid %u\n",
10672 ret = i40e_rebuild_cloud_filters(vsi, ch->seid);
10674 dev_dbg(&vsi->back->pdev->dev,
10685 * @vsi: ptr to the VSI
10687 static void i40e_clean_xps_state(struct i40e_vsi *vsi)
10691 if (vsi->tx_rings)
10692 for (i = 0; i < vsi->num_queue_pairs; i++)
10693 if (vsi->tx_rings[i])
10695 vsi->tx_rings[i]->state);
10707 struct i40e_vsi *vsi;
10722 i40e_pf_for_each_vsi(pf, v, vsi) {
10723 i40e_clean_xps_state(vsi);
10724 vsi->seid = 0;
10836 struct i40e_vsi *vsi = pf->vsi[pf->lan_vsi];
10845 i40e_set_ethtool_ops(pf->vsi[pf->lan_vsi]->netdev);
10978 if (vsi->uplink_seid != pf->mac_seid) {
10997 vsi->uplink_seid = pf->mac_seid;
11007 if (vsi->uplink_seid == pf->mac_seid) {
11010 ret = i40e_add_vsi(vsi);
11018 if (vsi->mqprio_qopt.max_rate[0]) {
11019 u64 max_tx_rate = i40e_bw_bytes_to_mbits(vsi,
11020 vsi->mqprio_qopt.max_rate[0]);
11023 ret = i40e_set_bw_limit(vsi, vsi->seid, max_tx_rate);
11029 dev_dbg(&vsi->back->pdev->dev,
11030 "Set tx rate of %llu Mbps (count of 50Mbps %llu) for vsi->seid %u\n",
11033 vsi->seid);
11036 ret = i40e_rebuild_cloud_filters(vsi, vsi->seid);
11043 ret = i40e_rebuild_channels(vsi);
11269 i40e_detect_recover_hung(pf->vsi[pf->lan_vsi]);
11278 i40e_notify_client_of_netdev_close(pf->vsi[pf->lan_vsi],
11285 pf->vsi[pf->lan_vsi]);
11324 * @vsi: the VSI being configured
11326 static int i40e_set_num_rings_in_vsi(struct i40e_vsi *vsi)
11328 struct i40e_pf *pf = vsi->back;
11330 switch (vsi->type) {
11332 vsi->alloc_queue_pairs = pf->num_lan_qps;
11333 if (!vsi->num_tx_desc)
11334 vsi->num_tx_desc = ALIGN(I40E_DEFAULT_NUM_DESCRIPTORS,
11336 if (!vsi->num_rx_desc)
11337 vsi->num_rx_desc = ALIGN(I40E_DEFAULT_NUM_DESCRIPTORS,
11340 vsi->num_q_vectors = pf->num_lan_msix;
11342 vsi->num_q_vectors = 1;
11347 vsi->alloc_queue_pairs = 1;
11348 vsi->num_tx_desc = ALIGN(I40E_FDIR_RING_COUNT,
11350 vsi->num_rx_desc = ALIGN(I40E_FDIR_RING_COUNT,
11352 vsi->num_q_vectors = pf->num_fdsb_msix;
11356 vsi->alloc_queue_pairs = pf->num_vmdq_qps;
11357 if (!vsi->num_tx_desc)
11358 vsi->num_tx_desc = ALIGN(I40E_DEFAULT_NUM_DESCRIPTORS,
11360 if (!vsi->num_rx_desc)
11361 vsi->num_rx_desc = ALIGN(I40E_DEFAULT_NUM_DESCRIPTORS,
11363 vsi->num_q_vectors = pf->num_vmdq_msix;
11367 vsi->alloc_queue_pairs = pf->num_vf_qps;
11368 if (!vsi->num_tx_desc)
11369 vsi->num_tx_desc = ALIGN(I40E_DEFAULT_NUM_DESCRIPTORS,
11371 if (!vsi->num_rx_desc)
11372 vsi->num_rx_desc = ALIGN(I40E_DEFAULT_NUM_DESCRIPTORS,
11382 vsi->num_tx_desc = I40E_MIN_NUM_DESCRIPTORS;
11383 vsi->num_rx_desc = I40E_MIN_NUM_DESCRIPTORS;
11390 * i40e_vsi_alloc_arrays - Allocate queue and vector pointer arrays for the vsi
11391 * @vsi: VSI pointer
11397 static int i40e_vsi_alloc_arrays(struct i40e_vsi *vsi, bool alloc_qvectors)
11404 size = sizeof(struct i40e_ring *) * vsi->alloc_queue_pairs *
11405 (i40e_enabled_xdp_vsi(vsi) ? 3 : 2);
11406 vsi->tx_rings = kzalloc(size, GFP_KERNEL);
11407 if (!vsi->tx_rings)
11409 next_rings = vsi->tx_rings + vsi->alloc_queue_pairs;
11410 if (i40e_enabled_xdp_vsi(vsi)) {
11411 vsi->xdp_rings = next_rings;
11412 next_rings += vsi->alloc_queue_pairs;
11414 vsi->rx_rings = next_rings;
11418 size = sizeof(struct i40e_q_vector *) * vsi->num_q_vectors;
11419 vsi->q_vectors = kzalloc(size, GFP_KERNEL);
11420 if (!vsi->q_vectors) {
11428 kfree(vsi->tx_rings);
11433 * i40e_vsi_mem_alloc - Allocates the next available struct vsi in the PF
11438 * On success: returns vsi index in PF (positive)
11443 struct i40e_vsi *vsi;
11454 * find next empty vsi slot, looping back around if necessary
11457 while (i < pf->num_alloc_vsi && pf->vsi[i])
11461 while (i < pf->next_vsi && pf->vsi[i])
11465 if (i < pf->num_alloc_vsi && !pf->vsi[i]) {
11473 vsi = kzalloc(sizeof(*vsi), GFP_KERNEL);
11474 if (!vsi) {
11478 vsi->type = type;
11479 vsi->back = pf;
11480 set_bit(__I40E_VSI_DOWN, vsi->state);
11481 vsi->flags = 0;
11482 vsi->idx = vsi_idx;
11483 vsi->int_rate_limit = 0;
11484 vsi->rss_table_size = (vsi->type == I40E_VSI_MAIN) ?
11486 vsi->netdev_registered = false;
11487 vsi->work_limit = I40E_DEFAULT_IRQ_WORK;
11488 hash_init(vsi->mac_filter_hash);
11489 vsi->irqs_ready = false;
11492 vsi->af_xdp_zc_qps = bitmap_zalloc(pf->num_lan_qps, GFP_KERNEL);
11493 if (!vsi->af_xdp_zc_qps)
11497 ret = i40e_set_num_rings_in_vsi(vsi);
11501 ret = i40e_vsi_alloc_arrays(vsi, true);
11506 i40e_vsi_setup_irqhandler(vsi, i40e_msix_clean_rings);
11509 spin_lock_init(&vsi->mac_filter_hash_lock);
11510 pf->vsi[vsi_idx] = vsi;
11515 bitmap_free(vsi->af_xdp_zc_qps);
11517 kfree(vsi);
11525 * @vsi: VSI pointer
11531 static void i40e_vsi_free_arrays(struct i40e_vsi *vsi, bool free_qvectors)
11535 kfree(vsi->q_vectors);
11536 vsi->q_vectors = NULL;
11538 kfree(vsi->tx_rings);
11539 vsi->tx_rings = NULL;
11540 vsi->rx_rings = NULL;
11541 vsi->xdp_rings = NULL;
11547 * @vsi: Pointer to VSI structure
11549 static void i40e_clear_rss_config_user(struct i40e_vsi *vsi)
11551 if (!vsi)
11554 kfree(vsi->rss_hkey_user);
11555 vsi->rss_hkey_user = NULL;
11557 kfree(vsi->rss_lut_user);
11558 vsi->rss_lut_user = NULL;
11563 * @vsi: the VSI being un-configured
11565 static int i40e_vsi_clear(struct i40e_vsi *vsi)
11569 if (!vsi)
11572 if (!vsi->back)
11574 pf = vsi->back;
11577 if (!pf->vsi[vsi->idx]) {
11578 dev_err(&pf->pdev->dev, "pf->vsi[%d] is NULL, just free vsi[%d](type %d)\n",
11579 vsi->idx, vsi->idx, vsi->type);
11583 if (pf->vsi[vsi->idx] != vsi) {
11585 "pf->vsi[%d](type %d) != vsi[%d](type %d): no free!\n",
11586 pf->vsi[vsi->idx]->idx,
11587 pf->vsi[vsi->idx]->type,
11588 vsi->idx, vsi->type);
11592 /* updates the PF for this cleared vsi */
11593 i40e_put_lump(pf->qp_pile, vsi->base_queue, vsi->idx);
11594 i40e_put_lump(pf->irq_pile, vsi->base_vector, vsi->idx);
11596 bitmap_free(vsi->af_xdp_zc_qps);
11597 i40e_vsi_free_arrays(vsi, true);
11598 i40e_clear_rss_config_user(vsi);
11600 pf->vsi[vsi->idx] = NULL;
11601 if (vsi->idx < pf->next_vsi)
11602 pf->next_vsi = vsi->idx;
11607 kfree(vsi);
11614 * @vsi: the VSI being cleaned
11616 static void i40e_vsi_clear_rings(struct i40e_vsi *vsi)
11620 if (vsi->tx_rings && vsi->tx_rings[0]) {
11621 for (i = 0; i < vsi->alloc_queue_pairs; i++) {
11622 kfree_rcu(vsi->tx_rings[i], rcu);
11623 WRITE_ONCE(vsi->tx_rings[i], NULL);
11624 WRITE_ONCE(vsi->rx_rings[i], NULL);
11625 if (vsi->xdp_rings)
11626 WRITE_ONCE(vsi->xdp_rings[i], NULL);
11633 * @vsi: the VSI being configured
11635 static int i40e_alloc_rings(struct i40e_vsi *vsi)
11637 int i, qpv = i40e_enabled_xdp_vsi(vsi) ? 3 : 2;
11638 struct i40e_pf *pf = vsi->back;
11642 for (i = 0; i < vsi->alloc_queue_pairs; i++) {
11649 ring->reg_idx = vsi->base_queue + i;
11651 ring->vsi = vsi;
11652 ring->netdev = vsi->netdev;
11654 ring->count = vsi->num_tx_desc;
11657 if (test_bit(I40E_HW_CAP_WB_ON_ITR, vsi->back->hw.caps))
11660 WRITE_ONCE(vsi->tx_rings[i], ring++);
11662 if (!i40e_enabled_xdp_vsi(vsi))
11665 ring->queue_index = vsi->alloc_queue_pairs + i;
11666 ring->reg_idx = vsi->base_queue + ring->queue_index;
11668 ring->vsi = vsi;
11671 ring->count = vsi->num_tx_desc;
11674 if (test_bit(I40E_HW_CAP_WB_ON_ITR, vsi->back->hw.caps))
11678 WRITE_ONCE(vsi->xdp_rings[i], ring++);
11682 ring->reg_idx = vsi->base_queue + i;
11684 ring->vsi = vsi;
11685 ring->netdev = vsi->netdev;
11687 ring->count = vsi->num_rx_desc;
11691 WRITE_ONCE(vsi->rx_rings[i], ring);
11697 i40e_vsi_clear_rings(vsi);
11951 * @vsi: the VSI being configured
11952 * @v_idx: index of the vector in the vsi struct
11956 static int i40e_vsi_alloc_q_vector(struct i40e_vsi *vsi, int v_idx)
11965 q_vector->vsi = vsi;
11969 if (vsi->netdev)
11970 netif_napi_add(vsi->netdev, &q_vector->napi, i40e_napi_poll);
11972 /* tie q_vector and vsi together */
11973 vsi->q_vectors[v_idx] = q_vector;
11980 * @vsi: the VSI being configured
11985 static int i40e_vsi_alloc_q_vectors(struct i40e_vsi *vsi)
11987 struct i40e_pf *pf = vsi->back;
11992 num_q_vectors = vsi->num_q_vectors;
11993 else if (vsi == pf->vsi[pf->lan_vsi])
11999 err = i40e_vsi_alloc_q_vector(vsi, v_idx);
12008 i40e_free_q_vector(vsi, v_idx);
12081 struct i40e_vsi *vsi;
12098 i40e_pf_for_each_vsi(pf, i, vsi) {
12099 err = i40e_vsi_alloc_q_vectors(vsi);
12103 i40e_vsi_map_rings_to_vectors(vsi);
12117 if (pf->vsi[i])
12118 i40e_vsi_free_q_vectors(pf->vsi[i]);
12207 * @vsi: Pointer to vsi structure
12214 static int i40e_get_rss_aq(struct i40e_vsi *vsi, const u8 *seed,
12217 struct i40e_pf *pf = vsi->back;
12222 ret = i40e_aq_get_rss_key(hw, vsi->id,
12235 bool pf_lut = vsi->type == I40E_VSI_MAIN;
12237 ret = i40e_aq_get_rss_lut(hw, vsi->id, pf_lut, lut, lut_size);
12253 * @vsi: Pointer to vsi structure
12260 static int i40e_config_rss_reg(struct i40e_vsi *vsi, const u8 *seed,
12263 struct i40e_pf *pf = vsi->back;
12265 u16 vf_id = vsi->vf_id;
12272 if (vsi->type == I40E_VSI_MAIN) {
12275 } else if (vsi->type == I40E_VSI_SRIOV) {
12286 if (vsi->type == I40E_VSI_MAIN) {
12291 } else if (vsi->type == I40E_VSI_SRIOV) {
12307 * @vsi: Pointer to VSI structure
12314 static int i40e_get_rss_reg(struct i40e_vsi *vsi, u8 *seed,
12317 struct i40e_pf *pf = vsi->back;
12341 * @vsi: Pointer to VSI structure
12348 int i40e_config_rss(struct i40e_vsi *vsi, u8 *seed, u8 *lut, u16 lut_size)
12350 struct i40e_pf *pf = vsi->back;
12353 return i40e_config_rss_aq(vsi, seed, lut, lut_size);
12355 return i40e_config_rss_reg(vsi, seed, lut, lut_size);
12360 * @vsi: Pointer to VSI structure
12367 int i40e_get_rss(struct i40e_vsi *vsi, u8 *seed, u8 *lut, u16 lut_size)
12369 struct i40e_pf *pf = vsi->back;
12372 return i40e_get_rss_aq(vsi, seed, lut, lut_size);
12374 return i40e_get_rss_reg(vsi, seed, lut, lut_size);
12399 struct i40e_vsi *vsi = pf->vsi[pf->lan_vsi];
12423 if (!vsi->rss_size) {
12430 qcount = vsi->num_queue_pairs /
12431 (vsi->tc_config.numtc ? vsi->tc_config.numtc : 1);
12432 vsi->rss_size = min_t(int, pf->alloc_rss_size, qcount);
12434 if (!vsi->rss_size)
12437 lut = kzalloc(vsi->rss_table_size, GFP_KERNEL);
12442 if (vsi->rss_lut_user)
12443 memcpy(lut, vsi->rss_lut_user, vsi->rss_table_size);
12445 i40e_fill_rss_lut(pf, lut, vsi->rss_table_size, vsi->rss_size);
12450 if (vsi->rss_hkey_user)
12451 memcpy(seed, vsi->rss_hkey_user, I40E_HKEY_ARRAY_SIZE);
12454 ret = i40e_config_rss(vsi, seed, lut, vsi->rss_table_size);
12471 struct i40e_vsi *vsi = pf->vsi[pf->lan_vsi];
12480 if (queue_count != vsi->num_queue_pairs) {
12483 vsi->req_queue_pairs = queue_count;
12495 if (queue_count < vsi->rss_size) {
12496 i40e_clear_rss_config_user(vsi);
12501 /* Reset vsi->rss_size, as number of enabled queues changed */
12502 qcount = vsi->num_queue_pairs / vsi->tc_config.numtc;
12503 vsi->rss_size = min_t(int, pf->alloc_rss_size, qcount);
12508 vsi->req_queue_pairs, pf->rss_size_max);
12882 * @vsi: the VSI being configured
12884 static void i40e_clear_rss_lut(struct i40e_vsi *vsi)
12886 struct i40e_pf *pf = vsi->back;
12888 u16 vf_id = vsi->vf_id;
12891 if (vsi->type == I40E_VSI_MAIN) {
12894 } else if (vsi->type == I40E_VSI_SRIOV) {
12904 * @vsi: ptr to VSI
12907 static int i40e_set_loopback(struct i40e_vsi *vsi, bool ena)
12909 bool if_running = netif_running(vsi->netdev) &&
12910 !test_and_set_bit(__I40E_VSI_DOWN, vsi->state);
12914 i40e_down(vsi);
12916 ret = i40e_aq_set_mac_loopback(&vsi->back->hw, ena, NULL);
12918 netdev_err(vsi->netdev, "Failed to toggle loopback state\n");
12920 i40e_up(vsi);
12935 struct i40e_vsi *vsi = np->vsi;
12936 struct i40e_pf *pf = vsi->back;
12943 i40e_clear_rss_lut(vsi);
12946 i40e_vlan_stripping_enable(vsi);
12948 i40e_vlan_stripping_disable(vsi);
12957 if (!(features & NETIF_F_HW_L2FW_DOFFLOAD) && vsi->macvlan_cnt)
12958 i40e_del_all_macvlans(vsi);
12966 return i40e_set_loopback(vsi, !!(features & NETIF_F_LOOPBACK));
12976 struct i40e_hw *hw = &np->vsi->back->hw;
13001 struct i40e_hw *hw = &np->vsi->back->hw;
13019 struct i40e_pf *pf = np->vsi->back;
13048 struct i40e_pf *pf = np->vsi->back;
13103 struct i40e_vsi *vsi = np->vsi;
13104 struct i40e_pf *pf = vsi->back;
13110 if (vsi->seid != pf->vsi[pf->lan_vsi]->seid)
13114 veb = i40e_pf_get_veb_by_seid(pf, vsi->uplink_seid);
13133 veb = i40e_veb_setup(pf, 0, vsi->uplink_seid, vsi->seid,
13134 vsi->tc_config.enabled_tc);
13177 struct i40e_vsi *vsi = np->vsi;
13178 struct i40e_pf *pf = vsi->back;
13182 if (vsi->seid != pf->vsi[pf->lan_vsi]->seid)
13186 veb = i40e_pf_get_veb_by_seid(pf, vsi->uplink_seid);
13254 * @vsi: VSI to changed
13258 static int i40e_xdp_setup(struct i40e_vsi *vsi, struct bpf_prog *prog,
13261 int frame_size = i40e_max_vsi_frame_size(vsi, prog);
13262 struct i40e_pf *pf = vsi->back;
13268 if (vsi->netdev->mtu > frame_size - I40E_PACKET_HDR_PAD) {
13274 need_reset = (i40e_enabled_xdp_vsi(vsi) != !!prog);
13283 old_prog = xchg(&vsi->xdp_prog, prog);
13287 xdp_features_clear_redirect_target(vsi->netdev);
13294 if (!i40e_enabled_xdp_vsi(vsi) && prog) {
13295 if (i40e_realloc_rx_bi_zc(vsi, true))
13297 } else if (i40e_enabled_xdp_vsi(vsi) && !prog) {
13298 if (i40e_realloc_rx_bi_zc(vsi, false))
13302 for (i = 0; i < vsi->num_queue_pairs; i++)
13303 WRITE_ONCE(vsi->rx_rings[i]->xdp_prog, vsi->xdp_prog);
13312 for (i = 0; i < vsi->num_queue_pairs; i++)
13313 if (vsi->xdp_rings[i]->xsk_pool)
13314 (void)i40e_xsk_wakeup(vsi->netdev, i,
13316 xdp_features_set_redirect_target(vsi->netdev, true);
13324 * @vsi: vsi
13328 static int i40e_enter_busy_conf(struct i40e_vsi *vsi)
13330 struct i40e_pf *pf = vsi->back;
13345 * @vsi: vsi
13347 static void i40e_exit_busy_conf(struct i40e_vsi *vsi)
13349 struct i40e_pf *pf = vsi->back;
13356 * @vsi: vsi
13359 static void i40e_queue_pair_reset_stats(struct i40e_vsi *vsi, int queue_pair)
13361 memset(&vsi->rx_rings[queue_pair]->rx_stats, 0,
13362 sizeof(vsi->rx_rings[queue_pair]->rx_stats));
13363 memset(&vsi->tx_rings[queue_pair]->stats, 0,
13364 sizeof(vsi->tx_rings[queue_pair]->stats));
13365 if (i40e_enabled_xdp_vsi(vsi)) {
13366 memset(&vsi->xdp_rings[queue_pair]->stats, 0,
13367 sizeof(vsi->xdp_rings[queue_pair]->stats));
13373 * @vsi: vsi
13376 static void i40e_queue_pair_clean_rings(struct i40e_vsi *vsi, int queue_pair)
13378 i40e_clean_tx_ring(vsi->tx_rings[queue_pair]);
13379 if (i40e_enabled_xdp_vsi(vsi)) {
13384 i40e_clean_tx_ring(vsi->xdp_rings[queue_pair]);
13386 i40e_clean_rx_ring(vsi->rx_rings[queue_pair]);
13391 * @vsi: vsi
13395 static void i40e_queue_pair_toggle_napi(struct i40e_vsi *vsi, int queue_pair,
13398 struct i40e_ring *rxr = vsi->rx_rings[queue_pair];
13401 if (!vsi->netdev)
13415 * @vsi: vsi
13421 static int i40e_queue_pair_toggle_rings(struct i40e_vsi *vsi, int queue_pair,
13424 struct i40e_pf *pf = vsi->back;
13427 pf_q = vsi->base_queue + queue_pair;
13428 ret = i40e_control_wait_tx_q(vsi->seid, pf, pf_q,
13433 vsi->seid, pf_q, (enable ? "en" : "dis"));
13442 vsi->seid, pf_q, (enable ? "en" : "dis"));
13452 if (!i40e_enabled_xdp_vsi(vsi))
13455 ret = i40e_control_wait_tx_q(vsi->seid, pf,
13456 pf_q + vsi->alloc_queue_pairs,
13461 vsi->seid, pf_q, (enable ? "en" : "dis"));
13469 * @vsi: vsi
13472 static void i40e_queue_pair_enable_irq(struct i40e_vsi *vsi, int queue_pair)
13474 struct i40e_ring *rxr = vsi->rx_rings[queue_pair];
13475 struct i40e_pf *pf = vsi->back;
13480 i40e_irq_dynamic_enable(vsi, rxr->q_vector->v_idx);
13489 * @vsi: vsi
13492 static void i40e_queue_pair_disable_irq(struct i40e_vsi *vsi, int queue_pair)
13494 struct i40e_ring *rxr = vsi->rx_rings[queue_pair];
13495 struct i40e_pf *pf = vsi->back;
13505 u32 intpf = vsi->base_vector + rxr->q_vector->v_idx;
13521 * @vsi: vsi
13526 int i40e_queue_pair_disable(struct i40e_vsi *vsi, int queue_pair)
13530 err = i40e_enter_busy_conf(vsi);
13534 i40e_queue_pair_disable_irq(vsi, queue_pair);
13535 i40e_queue_pair_toggle_napi(vsi, queue_pair, false /* off */);
13536 err = i40e_queue_pair_toggle_rings(vsi, queue_pair, false /* off */);
13537 i40e_clean_rx_ring(vsi->rx_rings[queue_pair]);
13538 i40e_queue_pair_clean_rings(vsi, queue_pair);
13539 i40e_queue_pair_reset_stats(vsi, queue_pair);
13546 * @vsi: vsi
13551 int i40e_queue_pair_enable(struct i40e_vsi *vsi, int queue_pair)
13555 err = i40e_configure_tx_ring(vsi->tx_rings[queue_pair]);
13559 if (i40e_enabled_xdp_vsi(vsi)) {
13560 err = i40e_configure_tx_ring(vsi->xdp_rings[queue_pair]);
13565 err = i40e_configure_rx_ring(vsi->rx_rings[queue_pair]);
13569 err = i40e_queue_pair_toggle_rings(vsi, queue_pair, true /* on */);
13570 i40e_queue_pair_toggle_napi(vsi, queue_pair, true /* on */);
13571 i40e_queue_pair_enable_irq(vsi, queue_pair);
13573 i40e_exit_busy_conf(vsi);
13587 struct i40e_vsi *vsi = np->vsi;
13589 if (vsi->type != I40E_VSI_MAIN)
13594 return i40e_xdp_setup(vsi, xdp->prog, xdp->extack);
13596 return i40e_xsk_pool_setup(vsi, xdp->xsk.pool,
13644 * @vsi: the VSI being configured
13648 static int i40e_config_netdev(struct i40e_vsi *vsi)
13650 struct i40e_pf *pf = vsi->back;
13661 netdev = alloc_etherdev_mq(etherdev_size, vsi->alloc_queue_pairs);
13665 vsi->netdev = netdev;
13667 np->vsi = vsi;
13735 if (vsi->type == I40E_VSI_MAIN) {
13748 i40e_rm_default_mac_filter(vsi, mac_addr);
13749 spin_lock_bh(&vsi->mac_filter_hash_lock);
13750 i40e_add_mac_filter(vsi, mac_addr);
13751 spin_unlock_bh(&vsi->mac_filter_hash_lock);
13766 pf->vsi[pf->lan_vsi]->netdev->name);
13769 spin_lock_bh(&vsi->mac_filter_hash_lock);
13770 i40e_add_mac_filter(vsi, mac_addr);
13771 spin_unlock_bh(&vsi->mac_filter_hash_lock);
13788 spin_lock_bh(&vsi->mac_filter_hash_lock);
13789 i40e_add_mac_filter(vsi, broadcast);
13790 spin_unlock_bh(&vsi->mac_filter_hash_lock);
13801 i40e_vsi_config_netdev_tc(vsi, vsi->tc_config.enabled_tc);
13816 * @vsi: the VSI being removed
13820 static void i40e_vsi_delete(struct i40e_vsi *vsi)
13823 if (vsi == vsi->back->vsi[vsi->back->lan_vsi])
13826 i40e_aq_delete_element(&vsi->back->hw, vsi->seid, NULL);
13831 * @vsi: the VSI being queried
13835 int i40e_is_vsi_uplink_mode_veb(struct i40e_vsi *vsi)
13838 struct i40e_pf *pf = vsi->back;
13841 if (vsi->veb_idx >= I40E_MAX_VEB)
13844 veb = pf->veb[vsi->veb_idx];
13865 * @vsi: the VSI being configured
13870 static int i40e_add_vsi(struct i40e_vsi *vsi)
13873 struct i40e_pf *pf = vsi->back;
13884 switch (vsi->type) {
13898 "couldn't get PF vsi config, err %pe aq_err %s\n",
13904 vsi->info = ctxt.info;
13905 vsi->info.valid_sections = 0;
13907 vsi->seid = ctxt.seid;
13908 vsi->id = ctxt.vsi_number;
13928 "update vsi failed, err %d aq_err %s\n",
13944 i40e_vsi_setup_queue_map(vsi, &ctxt, enabled_tc, false);
13948 "update vsi failed, err %pe aq_err %s\n",
13956 i40e_vsi_update_queue_map(vsi, &ctxt);
13957 vsi->info.valid_sections = 0;
13965 ret = i40e_vsi_config_tc(vsi, enabled_tc);
13983 ctxt.uplink_seid = vsi->uplink_seid;
13987 (i40e_is_vsi_uplink_mode_veb(vsi))) {
13993 i40e_vsi_setup_queue_map(vsi, &ctxt, enabled_tc, true);
13999 ctxt.uplink_seid = vsi->uplink_seid;
14006 if (i40e_is_vsi_uplink_mode_veb(vsi)) {
14014 i40e_vsi_setup_queue_map(vsi, &ctxt, enabled_tc, true);
14019 ctxt.vf_num = vsi->vf_id + hw->func_caps.vf_base_id;
14020 ctxt.uplink_seid = vsi->uplink_seid;
14027 if (i40e_is_vsi_uplink_mode_veb(vsi)) {
14034 if (test_bit(I40E_FLAG_IWARP_ENA, vsi->back->flags)) {
14044 if (pf->vf[vsi->vf_id].spoofchk) {
14052 i40e_vsi_setup_queue_map(vsi, &ctxt, enabled_tc, true);
14063 if (vsi->type != I40E_VSI_MAIN) {
14066 dev_info(&vsi->back->pdev->dev,
14067 "add vsi failed, err %pe aq_err %s\n",
14074 vsi->info = ctxt.info;
14075 vsi->info.valid_sections = 0;
14076 vsi->seid = ctxt.seid;
14077 vsi->id = ctxt.vsi_number;
14080 spin_lock_bh(&vsi->mac_filter_hash_lock);
14081 vsi->active_filters = 0;
14083 hash_for_each_safe(vsi->mac_filter_hash, bkt, h, f, hlist) {
14087 spin_unlock_bh(&vsi->mac_filter_hash_lock);
14088 clear_bit(__I40E_VSI_OVERFLOW_PROMISC, vsi->state);
14091 vsi->flags |= I40E_VSI_FLAG_FILTER_CHANGED;
14096 ret = i40e_vsi_get_bw_info(vsi);
14099 "couldn't get vsi bw info, err %pe aq_err %s\n",
14112 * @vsi: the VSI being removed
14116 int i40e_vsi_release(struct i40e_vsi *vsi)
14125 pf = vsi->back;
14128 if (vsi->flags & I40E_VSI_FLAG_VEB_OWNER) {
14130 vsi->seid, vsi->uplink_seid);
14133 if (vsi == pf->vsi[pf->lan_vsi] &&
14138 set_bit(__I40E_VSI_RELEASING, vsi->state);
14139 uplink_seid = vsi->uplink_seid;
14141 if (vsi->type != I40E_VSI_SRIOV) {
14142 if (vsi->netdev_registered) {
14143 vsi->netdev_registered = false;
14144 if (vsi->netdev) {
14146 unregister_netdev(vsi->netdev);
14149 i40e_vsi_close(vsi);
14151 i40e_vsi_disable_irq(vsi);
14154 if (vsi->type == I40E_VSI_MAIN)
14157 spin_lock_bh(&vsi->mac_filter_hash_lock);
14160 if (vsi->netdev) {
14161 __dev_uc_unsync(vsi->netdev, NULL);
14162 __dev_mc_unsync(vsi->netdev, NULL);
14166 hash_for_each_safe(vsi->mac_filter_hash, bkt, h, f, hlist)
14167 __i40e_del_filter(vsi, f);
14169 spin_unlock_bh(&vsi->mac_filter_hash_lock);
14171 i40e_sync_vsi_filters(vsi);
14173 i40e_vsi_delete(vsi);
14174 i40e_vsi_free_q_vectors(vsi);
14175 if (vsi->netdev) {
14176 free_netdev(vsi->netdev);
14177 vsi->netdev = NULL;
14179 i40e_vsi_clear_rings(vsi);
14180 i40e_vsi_clear(vsi);
14195 i40e_pf_for_each_vsi(pf, i, vsi)
14196 if (vsi->uplink_seid == uplink_seid &&
14197 (vsi->flags & I40E_VSI_FLAG_VEB_OWNER) == 0)
14212 * @vsi: ptr to the VSI
14220 static int i40e_vsi_setup_vectors(struct i40e_vsi *vsi)
14223 struct i40e_pf *pf = vsi->back;
14225 if (vsi->q_vectors[0]) {
14227 vsi->seid);
14231 if (vsi->base_vector) {
14233 vsi->seid, vsi->base_vector);
14237 ret = i40e_vsi_alloc_q_vectors(vsi);
14241 vsi->num_q_vectors, vsi->seid, ret);
14242 vsi->num_q_vectors = 0;
14251 if (vsi->num_q_vectors)
14252 vsi->base_vector = i40e_get_lump(pf, pf->irq_pile,
14253 vsi->num_q_vectors, vsi->idx);
14254 if (vsi->base_vector < 0) {
14257 vsi->num_q_vectors, vsi->seid, vsi->base_vector);
14258 i40e_vsi_free_q_vectors(vsi);
14269 * @vsi: pointer to the vsi.
14271 * This re-allocates a vsi's queue resources.
14276 static struct i40e_vsi *i40e_vsi_reinit_setup(struct i40e_vsi *vsi)
14283 if (!vsi)
14286 pf = vsi->back;
14288 i40e_put_lump(pf->qp_pile, vsi->base_queue, vsi->idx);
14289 i40e_vsi_clear_rings(vsi);
14291 i40e_vsi_free_arrays(vsi, false);
14292 i40e_set_num_rings_in_vsi(vsi);
14293 ret = i40e_vsi_alloc_arrays(vsi, false);
14297 alloc_queue_pairs = vsi->alloc_queue_pairs *
14298 (i40e_enabled_xdp_vsi(vsi) ? 2 : 1);
14300 ret = i40e_get_lump(pf, pf->qp_pile, alloc_queue_pairs, vsi->idx);
14304 alloc_queue_pairs, vsi->seid, ret);
14307 vsi->base_queue = ret;
14312 enabled_tc = pf->vsi[pf->lan_vsi]->tc_config.enabled_tc;
14313 pf->vsi[pf->lan_vsi]->tc_config.enabled_tc = 0;
14314 pf->vsi[pf->lan_vsi]->seid = pf->main_vsi_seid;
14315 i40e_vsi_config_tc(pf->vsi[pf->lan_vsi], enabled_tc);
14316 if (vsi->type == I40E_VSI_MAIN)
14317 i40e_rm_default_mac_filter(vsi, pf->hw.mac.perm_addr);
14320 ret = i40e_alloc_rings(vsi);
14325 i40e_vsi_map_rings_to_vectors(vsi);
14326 return vsi;
14329 i40e_vsi_free_q_vectors(vsi);
14330 if (vsi->netdev_registered) {
14331 vsi->netdev_registered = false;
14332 unregister_netdev(vsi->netdev);
14333 free_netdev(vsi->netdev);
14334 vsi->netdev = NULL;
14336 if (vsi->type == I40E_VSI_MAIN)
14338 i40e_aq_delete_element(&pf->hw, vsi->seid, NULL);
14340 i40e_vsi_clear(vsi);
14360 struct i40e_vsi *vsi = NULL;
14381 vsi = i40e_pf_get_vsi_by_seid(pf, uplink_seid);
14382 if (!vsi) {
14388 if (vsi->uplink_seid == pf->mac_seid)
14389 veb = i40e_veb_setup(pf, 0, pf->mac_seid, vsi->seid,
14390 vsi->tc_config.enabled_tc);
14391 else if ((vsi->flags & I40E_VSI_FLAG_VEB_OWNER) == 0)
14392 veb = i40e_veb_setup(pf, 0, vsi->uplink_seid, vsi->seid,
14393 vsi->tc_config.enabled_tc);
14395 if (vsi->seid != pf->vsi[pf->lan_vsi]->seid) {
14396 dev_info(&vsi->back->pdev->dev,
14410 veb = i40e_pf_get_veb_by_seid(pf, vsi->uplink_seid);
14416 vsi->flags |= I40E_VSI_FLAG_VEB_OWNER;
14420 /* get vsi sw struct */
14424 vsi = pf->vsi[v_idx];
14425 if (!vsi)
14427 vsi->type = type;
14428 vsi->veb_idx = (veb ? veb->idx : I40E_NO_VEB);
14433 vsi->vf_id = param1;
14435 alloc_queue_pairs = vsi->alloc_queue_pairs *
14436 (i40e_enabled_xdp_vsi(vsi) ? 2 : 1);
14438 ret = i40e_get_lump(pf, pf->qp_pile, alloc_queue_pairs, vsi->idx);
14442 alloc_queue_pairs, vsi->seid, ret);
14445 vsi->base_queue = ret;
14448 vsi->uplink_seid = uplink_seid;
14449 ret = i40e_add_vsi(vsi);
14453 switch (vsi->type) {
14457 ret = i40e_config_netdev(vsi);
14460 ret = i40e_netif_set_realnum_tx_rx_queues(vsi);
14463 if (vsi->type == I40E_VSI_MAIN) {
14467 SET_NETDEV_DEVLINK_PORT(vsi->netdev, &pf->devlink_port);
14469 ret = register_netdev(vsi->netdev);
14472 vsi->netdev_registered = true;
14473 netif_carrier_off(vsi->netdev);
14476 i40e_dcbnl_setup(vsi);
14481 ret = i40e_vsi_setup_vectors(vsi);
14485 ret = i40e_alloc_rings(vsi);
14490 i40e_vsi_map_rings_to_vectors(vsi);
14492 i40e_vsi_reset_stats(vsi);
14500 vsi->type == I40E_VSI_VMDQ2) {
14501 ret = i40e_vsi_config_rss(vsi);
14505 return vsi;
14508 i40e_vsi_clear_rings(vsi);
14510 i40e_vsi_free_q_vectors(vsi);
14512 if (vsi->netdev_registered) {
14513 vsi->netdev_registered = false;
14514 unregister_netdev(vsi->netdev);
14515 free_netdev(vsi->netdev);
14516 vsi->netdev = NULL;
14519 if (vsi->type == I40E_VSI_MAIN)
14522 i40e_aq_delete_element(&pf->hw, vsi->seid, NULL);
14524 i40e_vsi_clear(vsi);
14587 * On success: returns vsi index in PF (positive)
14640 struct i40e_vsi *vsi;
14654 i40e_pf_for_each_vsi(pf, i, vsi)
14655 if (vsi->uplink_seid == branch_seid &&
14656 (vsi->flags & I40E_VSI_FLAG_VEB_OWNER) == 0)
14657 i40e_vsi_release(vsi);
14695 struct i40e_vsi *vsi, *vsi_it;
14705 vsi = vsi_it;
14721 vsi->flags &= ~I40E_VSI_FLAG_VEB_OWNER;
14722 vsi->uplink_seid = veb->uplink_seid;
14723 vsi->veb_idx = I40E_NO_VEB;
14733 * @vsi: the controlling VSI
14735 static int i40e_add_veb(struct i40e_veb *veb, struct i40e_vsi *vsi)
14741 ret = i40e_aq_add_veb(&pf->hw, veb->uplink_seid, vsi ? vsi->seid : 0,
14742 veb->enabled_tc, vsi ? false : true,
14774 if (vsi) {
14775 vsi->uplink_seid = veb->seid;
14776 vsi->veb_idx = veb->idx;
14777 vsi->flags |= I40E_VSI_FLAG_VEB_OWNER;
14793 * existing VEB. It is also possible for both uplink and vsi seids
14803 struct i40e_vsi *vsi = NULL;
14812 "one, not both seid's are 0: uplink=%d vsi=%d\n",
14817 /* make sure there is such a vsi and uplink */
14819 vsi = i40e_pf_get_vsi_by_seid(pf, vsi_seid);
14820 if (!vsi) {
14821 dev_err(&pf->pdev->dev, "vsi seid %d not found\n",
14837 ret = i40e_add_veb(veb, vsi);
14841 if (vsi && vsi->idx == pf->lan_vsi)
15046 struct i40e_vsi *vsi = NULL;
15057 vsi = i40e_vsi_setup(pf, I40E_VSI_MAIN, uplink_seid, 0);
15059 vsi = i40e_vsi_reinit_setup(pf->vsi[pf->lan_vsi]);
15060 if (!vsi) {
15068 u8 enabled_tc = pf->vsi[pf->lan_vsi]->tc_config.enabled_tc;
15070 pf->vsi[pf->lan_vsi]->tc_config.enabled_tc = 0;
15071 pf->vsi[pf->lan_vsi]->seid = pf->main_vsi_seid;
15072 i40e_vsi_config_tc(pf->vsi[pf->lan_vsi], enabled_tc);
15074 i40e_vlan_stripping_disable(pf->vsi[pf->lan_vsi]);
15101 udp_tunnel_nic_reset_ntf(pf->vsi[pf->lan_vsi]->netdev);
15259 pf->vsi[pf->lan_vsi]->num_queue_pairs);
15448 struct i40e_vsi *vsi;
15476 /* Set up the vsi struct and our local tracking of the MAIN PF vsi. */
15477 pf->vsi = kcalloc(pf->num_alloc_vsi, sizeof(struct i40e_vsi *),
15479 if (!pf->vsi) {
15493 vsi = pf->vsi[v_idx];
15494 if (!vsi) {
15498 vsi->alloc_queue_pairs = 1;
15499 err = i40e_config_netdev(vsi);
15502 err = register_netdev(vsi->netdev);
15505 vsi->netdev_registered = true;
15566 struct i40e_vsi *vsi;
15872 * vsi->num_queue_pairs will be equal to pf->num_lan_msix, i.e., 1.
15901 /* Set up the *vsi struct and our local tracking of the MAIN PF vsi. */
15902 pf->vsi = kcalloc(pf->num_alloc_vsi, sizeof(struct i40e_vsi *),
15904 if (!pf->vsi) {
15923 INIT_LIST_HEAD(&pf->vsi[pf->lan_vsi]->ch_list);
15926 vsi = i40e_find_vsi_by_type(pf, I40E_VSI_FDIR);
15927 if (vsi)
15928 i40e_vsi_open(vsi);
16138 kfree(pf->vsi);
16174 struct i40e_vsi *vsi;
16211 struct i40e_vsi *vsi = pf->vsi[0];
16213 /* We know that we have allocated only one vsi for this PF,
16217 unregister_netdev(vsi->netdev);
16218 free_netdev(vsi->netdev);
16226 i40e_notify_client_of_netdev_close(pf->vsi[pf->lan_vsi], false);
16241 i40e_pf_for_each_vsi(pf, i, vsi) {
16242 i40e_vsi_close(vsi);
16243 i40e_vsi_release(vsi);
16244 pf->vsi[i] = NULL;
16282 i40e_pf_for_each_vsi(pf, i, vsi) {
16284 i40e_vsi_clear_rings(vsi);
16286 i40e_vsi_clear(vsi);
16287 pf->vsi[i] = NULL;
16297 kfree(pf->vsi);
16431 if (pf->vsi[pf->lan_vsi] && pf->vsi[pf->lan_vsi]->netdev) {
16433 pf->vsi[pf->lan_vsi]->netdev->dev_addr);
16485 i40e_notify_client_of_netdev_close(pf->vsi[pf->lan_vsi], false);
16539 i40e_notify_client_of_netdev_close(pf->vsi[pf->lan_vsi], false);