|
@@ -8135,6 +8135,34 @@ u32 i40e_get_global_fd_count(struct i40e_pf *pf)
|
|
|
return fcnt_prog;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * i40e_reenable_fdir_sb - Restore FDir SB capability
|
|
|
+ * @pf: board private structure
|
|
|
+ **/
|
|
|
+static void i40e_reenable_fdir_sb(struct i40e_pf *pf)
|
|
|
+{
|
|
|
+ if (pf->flags & I40E_FLAG_FD_SB_AUTO_DISABLED) {
|
|
|
+ pf->flags &= ~I40E_FLAG_FD_SB_AUTO_DISABLED;
|
|
|
+ if ((pf->flags & I40E_FLAG_FD_SB_ENABLED) &&
|
|
|
+ (I40E_DEBUG_FD & pf->hw.debug_mask))
|
|
|
+ dev_info(&pf->pdev->dev, "FD Sideband/ntuple is being enabled since we have space in the table now\n");
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * i40e_reenable_fdir_atr - Restore FDir ATR capability
|
|
|
+ * @pf: board private structure
|
|
|
+ **/
|
|
|
+static void i40e_reenable_fdir_atr(struct i40e_pf *pf)
|
|
|
+{
|
|
|
+ if (pf->flags & I40E_FLAG_FD_ATR_AUTO_DISABLED) {
|
|
|
+ pf->flags &= ~I40E_FLAG_FD_ATR_AUTO_DISABLED;
|
|
|
+ if ((pf->flags & I40E_FLAG_FD_ATR_ENABLED) &&
|
|
|
+ (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");
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* i40e_delete_invalid_filter - Delete an invalid FDIR filter
|
|
|
* @pf: board private structure
|
|
@@ -8198,28 +8226,16 @@ void i40e_fdir_check_and_reenable(struct i40e_pf *pf)
|
|
|
fcnt_avail = pf->fdir_pf_filter_count;
|
|
|
if ((fcnt_prog < (fcnt_avail - I40E_FDIR_BUFFER_HEAD_ROOM)) ||
|
|
|
(pf->fd_add_err == 0) ||
|
|
|
- (i40e_get_current_atr_cnt(pf) < pf->fd_atr_cnt)) {
|
|
|
- if (pf->flags & I40E_FLAG_FD_SB_AUTO_DISABLED) {
|
|
|
- pf->flags &= ~I40E_FLAG_FD_SB_AUTO_DISABLED;
|
|
|
- if ((pf->flags & I40E_FLAG_FD_SB_ENABLED) &&
|
|
|
- (I40E_DEBUG_FD & pf->hw.debug_mask))
|
|
|
- dev_info(&pf->pdev->dev, "FD Sideband/ntuple is being enabled since we have space in the table now\n");
|
|
|
- }
|
|
|
- }
|
|
|
+ (i40e_get_current_atr_cnt(pf) < pf->fd_atr_cnt))
|
|
|
+ i40e_reenable_fdir_sb(pf);
|
|
|
|
|
|
/* We should wait for even more space before re-enabling ATR.
|
|
|
* Additionally, we cannot enable ATR as long as we still have TCP SB
|
|
|
* rules active.
|
|
|
*/
|
|
|
if ((fcnt_prog < (fcnt_avail - I40E_FDIR_BUFFER_HEAD_ROOM_FOR_ATR)) &&
|
|
|
- (pf->fd_tcp4_filter_cnt == 0)) {
|
|
|
- if (pf->flags & I40E_FLAG_FD_ATR_AUTO_DISABLED) {
|
|
|
- pf->flags &= ~I40E_FLAG_FD_ATR_AUTO_DISABLED;
|
|
|
- if ((pf->flags & I40E_FLAG_FD_ATR_ENABLED) &&
|
|
|
- (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");
|
|
|
- }
|
|
|
- }
|
|
|
+ (pf->fd_tcp4_filter_cnt == 0))
|
|
|
+ i40e_reenable_fdir_atr(pf);
|
|
|
|
|
|
/* if hw had a problem adding a filter, delete it */
|
|
|
if (pf->fd_inv > 0) {
|