Intel-Wired-Lan Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Haiyue Wang <haiyue.wang@intel.com>
To: intel-wired-lan@osuosl.org
Subject: [Intel-wired-lan] [RFC 11/20] ice: Add new actions support for VF FDIR
Date: Tue, 24 Nov 2020 14:24:01 +0800	[thread overview]
Message-ID: <20201124062410.6824-12-haiyue.wang@intel.com> (raw)
In-Reply-To: <20201124062410.6824-1-haiyue.wang@intel.com>

From: Qi Zhang <qi.z.zhang@intel.com>

Add two new actions support for VF FDIR:

A passthrough action does not specify the destination queue, but
just allow the packet go to next pipeline stage, a typical use
cases is combined with a software mark (FDID) action.

Allow specify a 2^n continuous queues as the destination of a FDIR rule.
Packet distribution is based on current RSS configure.

Signed-off-by: Yahui Cao <yahui.cao@intel.com>
Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_fdir.c          | 12 +++++++++++-
 drivers/net/ethernet/intel/ice/ice_fdir.h          |  4 ++++
 drivers/net/ethernet/intel/ice/ice_virtchnl_fdir.c | 10 ++++++++++
 include/linux/avf/virtchnl.h                       |  2 ++
 4 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_fdir.c b/drivers/net/ethernet/intel/ice/ice_fdir.c
index d7650a82eeda..f4447a239c6c 100644
--- a/drivers/net/ethernet/intel/ice/ice_fdir.c
+++ b/drivers/net/ethernet/intel/ice/ice_fdir.c
@@ -374,7 +374,14 @@ ice_fdir_get_prgm_desc(struct ice_hw *hw, struct ice_fdir_fltr *input,
 	if (input->dest_ctl == ICE_FLTR_PRGM_DESC_DEST_DROP_PKT) {
 		fdir_fltr_ctx.drop = ICE_FXD_FLTR_QW0_DROP_YES;
 		fdir_fltr_ctx.qindex = 0;
+	} else if (input->dest_ctl ==
+		   ICE_FLTR_PRGM_DESC_DEST_DIRECT_PKT_OTHER) {
+		fdir_fltr_ctx.drop = ICE_FXD_FLTR_QW0_DROP_NO;
+		fdir_fltr_ctx.qindex = 0;
 	} else {
+		if (input->dest_ctl ==
+		    ICE_FLTR_PRGM_DESC_DEST_DIRECT_PKT_QGROUP)
+			fdir_fltr_ctx.toq = input->q_region;
 		fdir_fltr_ctx.drop = ICE_FXD_FLTR_QW0_DROP_NO;
 		fdir_fltr_ctx.qindex = input->q_index;
 	}
@@ -382,7 +389,10 @@ ice_fdir_get_prgm_desc(struct ice_hw *hw, struct ice_fdir_fltr *input,
 	fdir_fltr_ctx.cnt_index = input->cnt_index;
 	fdir_fltr_ctx.fd_vsi = ice_get_hw_vsi_num(hw, input->dest_vsi);
 	fdir_fltr_ctx.evict_ena = ICE_FXD_FLTR_QW0_EVICT_ENA_FALSE;
-	fdir_fltr_ctx.toq_prio = 3;
+	if (input->dest_ctl == ICE_FLTR_PRGM_DESC_DEST_DIRECT_PKT_OTHER)
+		fdir_fltr_ctx.toq_prio = 0;
+	else
+		fdir_fltr_ctx.toq_prio = 3;
 	fdir_fltr_ctx.pcmd = add ? ICE_FXD_FLTR_QW1_PCMD_ADD :
 		ICE_FXD_FLTR_QW1_PCMD_REMOVE;
 	fdir_fltr_ctx.swap = ICE_FXD_FLTR_QW1_SWAP_NOT_SET;
diff --git a/drivers/net/ethernet/intel/ice/ice_fdir.h b/drivers/net/ethernet/intel/ice/ice_fdir.h
index 7028ff2a4118..c137ea99579c 100644
--- a/drivers/net/ethernet/intel/ice/ice_fdir.h
+++ b/drivers/net/ethernet/intel/ice/ice_fdir.h
@@ -42,6 +42,8 @@
 enum ice_fltr_prgm_desc_dest {
 	ICE_FLTR_PRGM_DESC_DEST_DROP_PKT,
 	ICE_FLTR_PRGM_DESC_DEST_DIRECT_PKT_QINDEX,
+	ICE_FLTR_PRGM_DESC_DEST_DIRECT_PKT_QGROUP,
+	ICE_FLTR_PRGM_DESC_DEST_DIRECT_PKT_OTHER,
 };
 
 enum ice_fltr_prgm_desc_fd_status {
@@ -133,6 +135,8 @@ struct ice_fdir_fltr {
 
 	/* flex byte filter data */
 	__be16 flex_word;
+	/* queue region size (=2^q_region) */
+	u8 q_region;
 	u16 flex_offset;
 	u16 flex_fltr;
 
diff --git a/drivers/net/ethernet/intel/ice/ice_virtchnl_fdir.c b/drivers/net/ethernet/intel/ice/ice_virtchnl_fdir.c
index 4fa559724293..e2419c7edc6f 100644
--- a/drivers/net/ethernet/intel/ice/ice_virtchnl_fdir.c
+++ b/drivers/net/ethernet/intel/ice/ice_virtchnl_fdir.c
@@ -904,6 +904,10 @@ ice_vc_fdir_parse_action(struct ice_vf *vf, struct virtchnl_fdir_add *fltr,
 		struct virtchnl_filter_action *action = &as->actions[i];
 
 		switch (action->type) {
+		case VIRTCHNL_ACTION_PASSTHRU:
+			dest_num++;
+			input->dest_ctl = ICE_FLTR_PRGM_DESC_DEST_DIRECT_PKT_OTHER;
+			break;
 		case VIRTCHNL_ACTION_DROP:
 			dest_num++;
 			input->dest_ctl = ICE_FLTR_PRGM_DESC_DEST_DROP_PKT;
@@ -913,6 +917,12 @@ ice_vc_fdir_parse_action(struct ice_vf *vf, struct virtchnl_fdir_add *fltr,
 			input->dest_ctl = ICE_FLTR_PRGM_DESC_DEST_DIRECT_PKT_QINDEX;
 			input->q_index = action->act_conf.queue.index;
 			break;
+		case VIRTCHNL_ACTION_Q_REGION:
+			dest_num++;
+			input->dest_ctl = ICE_FLTR_PRGM_DESC_DEST_DIRECT_PKT_QGROUP;
+			input->q_index = action->act_conf.queue.index;
+			input->q_region = action->act_conf.queue.region;
+			break;
 		case VIRTCHNL_ACTION_MARK:
 			mark_num++;
 			input->fltr_id = action->act_conf.mark_id;
diff --git a/include/linux/avf/virtchnl.h b/include/linux/avf/virtchnl.h
index ebf46eb99dd5..9218533b953f 100644
--- a/include/linux/avf/virtchnl.h
+++ b/include/linux/avf/virtchnl.h
@@ -636,7 +636,9 @@ enum virtchnl_action {
 	/* action types */
 	VIRTCHNL_ACTION_DROP = 0,
 	VIRTCHNL_ACTION_TC_REDIRECT,
+	VIRTCHNL_ACTION_PASSTHRU,
 	VIRTCHNL_ACTION_QUEUE,
+	VIRTCHNL_ACTION_Q_REGION,
 	VIRTCHNL_ACTION_MARK,
 	VIRTCHNL_ACTION_COUNT,
 };
-- 
2.29.2


  parent reply	other threads:[~2020-11-24  6:24 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-24  6:23 [Intel-wired-lan] [RFC 00/20] Enable Intel VF flow director with DDP Haiyue Wang
2020-11-24  6:23 ` [Intel-wired-lan] [RFC 01/20] ice: Add more basic protocol support for flow filter Haiyue Wang
2020-11-24  6:23 ` [Intel-wired-lan] [RFC 02/20] ice: Support non word aligned input set field Haiyue Wang
2020-11-24  6:23 ` [Intel-wired-lan] [RFC 03/20] ice: Add more advanced protocol support in flow filter Haiyue Wang
2020-11-24  6:23 ` [Intel-wired-lan] [RFC 04/20] ice: Support to separate GTP-U uplink and downlink Haiyue Wang
2020-11-24  6:23 ` [Intel-wired-lan] [RFC 05/20] ice: Enhanced IPv4 and IPv6 flow filter Haiyue Wang
2020-11-24  6:23 ` [Intel-wired-lan] [RFC 06/20] ice: Enable RSS Configure for AVF Haiyue Wang
2020-11-24  6:23 ` [Intel-wired-lan] [RFC 07/20] ice: Support RSS configure removal " Haiyue Wang
2020-11-24  6:23 ` [Intel-wired-lan] [RFC 08/20] ice: Add support for per VF ctrl VSI enabling Haiyue Wang
2020-11-24  6:23 ` [Intel-wired-lan] [RFC 09/20] ice: Support FDIR configure for AVF Haiyue Wang
2020-11-24  6:24 ` [Intel-wired-lan] [RFC 10/20] ice: Add FDIR pattern action parser for VF Haiyue Wang
2020-11-24  6:24 ` Haiyue Wang [this message]
2020-11-24  6:24 ` [Intel-wired-lan] [RFC 12/20] ice: Add non-IP Layer2 protocol FDIR filter for AVF Haiyue Wang
2020-11-24  6:24 ` [Intel-wired-lan] [RFC 13/20] ice: Add GTPU " Haiyue Wang
2020-11-24  6:24 ` [Intel-wired-lan] [RFC 14/20] ice: Add more FDIR filter type " Haiyue Wang
2020-11-24  6:24 ` [Intel-wired-lan] [RFC 15/20] ice: Check FDIR program status " Haiyue Wang
2020-11-24  6:24 ` [Intel-wired-lan] [RFC 16/20] iavf: Add framework to enable ethtool ntuple filters Haiyue Wang
2021-01-26 11:30   ` Sokolowski, Jan
2021-01-26 15:12     ` Loktionov, Aleksandr
2021-01-26 16:33       ` Creeley, Brett
2021-01-27  1:00         ` Wang, Haiyue
2020-11-24  6:24 ` [Intel-wired-lan] [RFC 17/20] iavf: Support IPv4 Flow Director filters Haiyue Wang
2020-11-24  6:24 ` [Intel-wired-lan] [RFC 18/20] iavf: Support IPv6 " Haiyue Wang
2020-11-24  6:24 ` [Intel-wired-lan] [RFC 19/20] iavf: Support Ethernet Type " Haiyue Wang
2020-11-24  6:24 ` [Intel-wired-lan] [RFC 20/20] iavf: Enable flex-bytes support Haiyue Wang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201124062410.6824-12-haiyue.wang@intel.com \
    --to=haiyue.wang@intel.com \
    --cc=intel-wired-lan@osuosl.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox