]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
i40e: add counters for UDP/IPv4 and IPv4 filters
authorJacob Keller <jacob.e.keller@intel.com>
Mon, 6 Feb 2017 22:38:46 +0000 (14:38 -0800)
committerJack Vogel <jack.vogel@oracle.com>
Sat, 10 Jun 2017 01:57:03 +0000 (18:57 -0700)
In preparation for adding code to properly check the mask values, we
will need to know the number of active filters for each type. Add
counters for each filter type. Rename the already existing fd_tcp_rule
to fd_tcp4_filter_cnt to match the style of other names. To avoid style
warnings, avoid assigning multiple parameters at once, and fix up one
other case where we did so previously.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Orabug: 26132523
(cherry picked from commit 097dbf52505962d06f9b707a3984d48d4f25fbe9)
Signed-off-by: Jack Vogel <jack.vogel@oracle.com>
Reviewed-by: Brian Maly <brian.maly@oracle.com>
drivers/net/ethernet/intel/i40e/i40e.h
drivers/net/ethernet/intel/i40e/i40e_main.c
drivers/net/ethernet/intel/i40e/i40e_txrx.c

index a5d85e7c3353995e0df1359ffcb25e29ac06e57f..a723f5638ea42f33acc11d4aa7522ce3fe440ef7 100644 (file)
@@ -286,7 +286,14 @@ struct i40e_pf {
        u32 fd_flush_cnt;
        u32 fd_add_err;
        u32 fd_atr_cnt;
-       u32 fd_tcp_rule;
+
+       /* Book-keeping of side-band filter count per flow-type.
+        * This is used to detect and handle input set changes for
+        * respective flow-type.
+        */
+       u16 fd_tcp4_filter_cnt;
+       u16 fd_udp4_filter_cnt;
+       u16 fd_ip4_filter_cnt;
 
        struct i40e_udp_port_config udp_ports[I40E_MAX_PF_UDP_OFFLOAD_PORTS];
        u16 pending_udp_bitmap;
index fc4c4ccbd0d826fe17917c199999979f19c4e42e..afafb26a70ba196aa34257f5e16be45f1a4d5c05 100644 (file)
@@ -3249,7 +3249,9 @@ static void i40e_fdir_filter_restore(struct i40e_vsi *vsi)
                return;
 
        /* Reset FDir counters as we're replaying all existing filters */
-       pf->fd_tcp_rule = 0;
+       pf->fd_tcp4_filter_cnt = 0;
+       pf->fd_udp4_filter_cnt = 0;
+       pf->fd_ip4_filter_cnt = 0;
 
        hlist_for_each_entry_safe(filter, node,
                                  &pf->fdir_filter_list, fdir_node) {
@@ -5433,7 +5435,8 @@ static int i40e_up_complete(struct i40e_vsi *vsi)
        /* replay FDIR SB filters */
        if (vsi->type == I40E_VSI_FDIR) {
                /* reset fd counters */
-               pf->fd_add_err = pf->fd_atr_cnt = 0;
+               pf->fd_add_err = 0;
+               pf->fd_atr_cnt = 0;
                i40e_fdir_filter_restore(vsi);
        }
 
@@ -5704,7 +5707,11 @@ static void i40e_fdir_filter_exit(struct i40e_pf *pf)
                hlist_del(&filter->fdir_node);
                kfree(filter);
        }
+
        pf->fdir_pf_active_filters = 0;
+       pf->fd_tcp4_filter_cnt = 0;
+       pf->fd_udp4_filter_cnt = 0;
+       pf->fd_ip4_filter_cnt = 0;
 }
 
 /**
@@ -6109,7 +6116,7 @@ void i40e_fdir_check_and_reenable(struct i40e_pf *pf)
        if (fcnt_prog < (fcnt_avail - I40E_FDIR_BUFFER_HEAD_ROOM * 2)) {
                if ((pf->flags & I40E_FLAG_FD_ATR_ENABLED) &&
                    (pf->hw_disabled_flags & I40E_FLAG_FD_ATR_ENABLED) &&
-                   (pf->fd_tcp_rule == 0)) {
+                   (pf->fd_tcp4_filter_cnt == 0)) {
                        pf->hw_disabled_flags &= ~I40E_FLAG_FD_ATR_ENABLED;
                        if (I40E_DEBUG_FD & pf->hw.debug_mask)
                                dev_info(&pf->pdev->dev, "ATR is being enabled since we have space in the table and there are no conflicting ntuple rules\n");
@@ -6181,7 +6188,7 @@ static void i40e_fdir_flush_and_replay(struct i40e_pf *pf)
        } else {
                /* replay sideband filters */
                i40e_fdir_filter_restore(pf->vsi[pf->lan_vsi]);
-               if (!disable_atr && !pf->fd_tcp_rule)
+               if (!disable_atr && !pf->fd_tcp4_filter_cnt)
                        pf->hw_disabled_flags &= ~I40E_FLAG_FD_ATR_ENABLED;
                clear_bit(__I40E_FD_FLUSH_REQUESTED, &pf->state);
                if (I40E_DEBUG_FD & pf->hw.debug_mask)
@@ -8874,8 +8881,8 @@ bool i40e_set_ntuple(struct i40e_pf *pf, netdev_features_t features)
                pf->flags &= ~I40E_FLAG_FD_SB_ENABLED;
                pf->hw_disabled_flags &= ~I40E_FLAG_FD_SB_ENABLED;
                /* reset fd counters */
-               pf->fd_add_err = pf->fd_atr_cnt = pf->fd_tcp_rule = 0;
-               pf->fdir_pf_active_filters = 0;
+               pf->fd_add_err = 0;
+               pf->fd_atr_cnt = 0;
                /* if ATR was auto disabled it can be re-enabled. */
                if ((pf->flags & I40E_FLAG_FD_ATR_ENABLED) &&
                    (pf->hw_disabled_flags & I40E_FLAG_FD_ATR_ENABLED)) {
index 70fae96729a153f1ec332b6d0daa416c0c989bb4..90571a1ae942bd832c94f3b97e7824842a80274a 100644 (file)
@@ -244,6 +244,11 @@ static int i40e_add_del_fdir_udpv4(struct i40e_vsi *vsi,
                                 fd_data->pctype, fd_data->fd_id);
        }
 
+       if (add)
+               pf->fd_udp4_filter_cnt++;
+       else
+               pf->fd_udp4_filter_cnt--;
+
        return 0;
 }
 
@@ -305,15 +310,14 @@ static int i40e_add_del_fdir_tcpv4(struct i40e_vsi *vsi,
        }
 
        if (add) {
-               pf->fd_tcp_rule++;
+               pf->fd_tcp4_filter_cnt++;
                if ((pf->flags & I40E_FLAG_FD_ATR_ENABLED) &&
                    I40E_DEBUG_FD & pf->hw.debug_mask)
                        dev_info(&pf->pdev->dev, "Forcing ATR off, sideband rules for TCP/IPv4 flow being applied\n");
                pf->hw_disabled_flags |= I40E_FLAG_FD_ATR_ENABLED;
        } else {
-               pf->fd_tcp_rule = (pf->fd_tcp_rule > 0) ?
-                                 (pf->fd_tcp_rule - 1) : 0;
-               if (pf->fd_tcp_rule == 0) {
+               pf->fd_tcp4_filter_cnt--;
+               if (pf->fd_tcp4_filter_cnt == 0) {
                        if ((pf->flags & I40E_FLAG_FD_ATR_ENABLED) &&
                            I40E_DEBUG_FD & pf->hw.debug_mask)
                                dev_info(&pf->pdev->dev, "ATR re-enabled due to no sideband TCP/IPv4 rules\n");
@@ -382,6 +386,11 @@ static int i40e_add_del_fdir_ipv4(struct i40e_vsi *vsi,
                }
        }
 
+       if (add)
+               pf->fd_ip4_filter_cnt++;
+       else
+               pf->fd_ip4_filter_cnt--;
+
        return 0;
 }