linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Po Liu <po.liu@nxp.com>
To: davem@davemloft.net, linux-kernel@vger.kernel.org,
	netdev@vger.kernel.org, idosch@idosch.org
Cc: jiri@resnulli.us, vinicius.gomes@intel.com, vlad@buslov.dev,
	claudiu.manoil@nxp.com, vladimir.oltean@nxp.com,
	alexandru.marginean@nxp.com, michael.chan@broadcom.com,
	vishal@chelsio.com, saeedm@mellanox.com, leon@kernel.org,
	jiri@mellanox.com, idosch@mellanox.com,
	alexandre.belloni@bootlin.com, UNGLinuxDriver@microchip.com,
	kuba@kernel.org, jhs@mojatatu.com, xiyou.wangcong@gmail.com,
	simon.horman@netronome.com, pablo@netfilter.org,
	moshe@mellanox.com, m-karicheri2@ti.com,
	andre.guedes@linux.intel.com, stephen@networkplumber.org,
	Po Liu <Po.Liu@nxp.com>
Subject: [v1,net-next 2/4] net: enetc: add support max frame size for tc flower offload
Date: Tue, 23 Jun 2020 14:34:10 +0800	[thread overview]
Message-ID: <20200623063412.19180-2-po.liu@nxp.com> (raw)
In-Reply-To: <20200623063412.19180-1-po.liu@nxp.com>

From: Po Liu <Po.Liu@nxp.com>

Base on the tc flower offload police action add max frame size by the
parameter 'mtu'. Tc flower device driver working by the IEEE 802.1Qci
stream filter can implement the max frame size filtering. Add it to the
current hardware tc flower stearm filter driver.

Signed-off-by: Po Liu <Po.Liu@nxp.com>
---
 .../net/ethernet/freescale/enetc/enetc_qos.c  | 52 +++++++++++++------
 1 file changed, 36 insertions(+), 16 deletions(-)

diff --git a/drivers/net/ethernet/freescale/enetc/enetc_qos.c b/drivers/net/ethernet/freescale/enetc/enetc_qos.c
index fb76903eca90..07f98bf7a06b 100644
--- a/drivers/net/ethernet/freescale/enetc/enetc_qos.c
+++ b/drivers/net/ethernet/freescale/enetc/enetc_qos.c
@@ -389,6 +389,7 @@ struct enetc_psfp_filter {
 	u32 index;
 	s32 handle;
 	s8 prio;
+	u32 maxsdu;
 	u32 gate_id;
 	s32 meter_id;
 	refcount_t refcount;
@@ -430,6 +431,12 @@ static struct actions_fwd enetc_act_fwd[] = {
 		BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS),
 		FILTER_ACTION_TYPE_PSFP
 	},
+	{
+		BIT(FLOW_ACTION_POLICE) |
+		BIT(FLOW_ACTION_GATE),
+		BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS),
+		FILTER_ACTION_TYPE_PSFP
+	},
 	/* example for ACL actions */
 	{
 		BIT(FLOW_ACTION_DROP),
@@ -594,8 +601,12 @@ static int enetc_streamfilter_hw_set(struct enetc_ndev_priv *priv,
 	/* Filter Type. Identifies the contents of the MSDU/FM_INST_INDEX
 	 * field as being either an MSDU value or an index into the Flow
 	 * Meter Instance table.
-	 * TODO: no limit max sdu
 	 */
+	if (sfi->maxsdu) {
+		sfi_config->msdu =
+		cpu_to_le16(sfi->maxsdu);
+		sfi_config->multi |= 0x40;
+	}
 
 	if (sfi->meter_id >= 0) {
 		sfi_config->fm_inst_table_index = cpu_to_le16(sfi->meter_id);
@@ -872,6 +883,7 @@ static struct enetc_psfp_filter
 	hlist_for_each_entry(s, &epsfp.psfp_filter_list, node)
 		if (s->gate_id == sfi->gate_id &&
 		    s->prio == sfi->prio &&
+		    s->maxsdu == sfi->maxsdu &&
 		    s->meter_id == sfi->meter_id)
 			return s;
 
@@ -979,6 +991,7 @@ static struct actions_fwd *enetc_check_flow_actions(u64 acts,
 static int enetc_psfp_parse_clsflower(struct enetc_ndev_priv *priv,
 				      struct flow_cls_offload *f)
 {
+	struct flow_action_entry *entryg = NULL, *entryp = NULL;
 	struct flow_rule *rule = flow_cls_offload_flow_rule(f);
 	struct netlink_ext_ack *extack = f->common.extack;
 	struct enetc_stream_filter *filter, *old_filter;
@@ -997,9 +1010,12 @@ static int enetc_psfp_parse_clsflower(struct enetc_ndev_priv *priv,
 
 	flow_action_for_each(i, entry, &rule->action)
 		if (entry->id == FLOW_ACTION_GATE)
-			break;
+			entryg = entry;
+		else if (entry->id == FLOW_ACTION_POLICE)
+			entryp = entry;
 
-	if (entry->id != FLOW_ACTION_GATE)
+	/* Not support without gate action */
+	if (!entryg)
 		return -EINVAL;
 
 	filter = kzalloc(sizeof(*filter), GFP_KERNEL);
@@ -1079,19 +1095,19 @@ static int enetc_psfp_parse_clsflower(struct enetc_ndev_priv *priv,
 	}
 
 	/* parsing gate action */
-	if (entry->gate.index >= priv->psfp_cap.max_psfp_gate) {
+	if (entryg->gate.index >= priv->psfp_cap.max_psfp_gate) {
 		NL_SET_ERR_MSG_MOD(extack, "No Stream Gate resource!");
 		err = -ENOSPC;
 		goto free_filter;
 	}
 
-	if (entry->gate.num_entries >= priv->psfp_cap.max_psfp_gatelist) {
+	if (entryg->gate.num_entries >= priv->psfp_cap.max_psfp_gatelist) {
 		NL_SET_ERR_MSG_MOD(extack, "No Stream Gate resource!");
 		err = -ENOSPC;
 		goto free_filter;
 	}
 
-	entries_size = struct_size(sgi, entries, entry->gate.num_entries);
+	entries_size = struct_size(sgi, entries, entryg->gate.num_entries);
 	sgi = kzalloc(entries_size, GFP_KERNEL);
 	if (!sgi) {
 		err = -ENOMEM;
@@ -1099,18 +1115,18 @@ static int enetc_psfp_parse_clsflower(struct enetc_ndev_priv *priv,
 	}
 
 	refcount_set(&sgi->refcount, 1);
-	sgi->index = entry->gate.index;
-	sgi->init_ipv = entry->gate.prio;
-	sgi->basetime = entry->gate.basetime;
-	sgi->cycletime = entry->gate.cycletime;
-	sgi->num_entries = entry->gate.num_entries;
+	sgi->index = entryg->gate.index;
+	sgi->init_ipv = entryg->gate.prio;
+	sgi->basetime = entryg->gate.basetime;
+	sgi->cycletime = entryg->gate.cycletime;
+	sgi->num_entries = entryg->gate.num_entries;
 
 	e = sgi->entries;
-	for (i = 0; i < entry->gate.num_entries; i++) {
-		e[i].gate_state = entry->gate.entries[i].gate_state;
-		e[i].interval = entry->gate.entries[i].interval;
-		e[i].ipv = entry->gate.entries[i].ipv;
-		e[i].maxoctets = entry->gate.entries[i].maxoctets;
+	for (i = 0; i < entryg->gate.num_entries; i++) {
+		e[i].gate_state = entryg->gate.entries[i].gate_state;
+		e[i].interval = entryg->gate.entries[i].interval;
+		e[i].ipv = entryg->gate.entries[i].ipv;
+		e[i].maxoctets = entryg->gate.entries[i].maxoctets;
 	}
 
 	filter->sgi_index = sgi->index;
@@ -1127,6 +1143,10 @@ static int enetc_psfp_parse_clsflower(struct enetc_ndev_priv *priv,
 	/* flow meter not support yet */
 	sfi->meter_id = ENETC_PSFP_WILDCARD;
 
+	/* Max frame size */
+	if (entryp)
+		sfi->maxsdu = entryp->police.mtu;
+
 	/* prio ref the filter prio */
 	if (f->common.prio && f->common.prio <= BIT(3))
 		sfi->prio = f->common.prio - 1;
-- 
2.17.1


  reply	other threads:[~2020-06-23  6:33 UTC|newest]

Thread overview: 125+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-06 12:55 [RFC,net-next 0/9] Introduce a flow gate control action and apply IEEE Po Liu
2020-03-06 12:55 ` [RFC,net-next 1/9] net: qos offload add flow status with dropped count Po Liu
2020-03-06 12:56 ` [RFC,net-next 2/9] net: qos: introduce a gate control flow action Po Liu
2020-03-06 19:11   ` Jakub Kicinski
2020-03-07  6:05     ` [EXT] " Po Liu
2020-03-12 22:14   ` Vinicius Costa Gomes
2020-03-13  3:47     ` [EXT] " Po Liu
2020-03-13 18:36   ` Cong Wang
2020-03-14  4:09     ` [EXT] " Po Liu
2020-03-06 12:56 ` [RFC,net-next 3/9] net: schedule: add action gate offloading Po Liu
2020-03-06 19:02   ` Jakub Kicinski
2020-03-06 19:19     ` Jakub Kicinski
2020-03-07  4:38       ` [EXT] " Po Liu
2020-03-06 12:56 ` [RFC,net-next 4/9] net: enetc: add hw tc hw offload features for PSPF capability Po Liu
2020-03-06 12:56 ` [RFC,net-next 5/9] net: enetc: add tc flower psfp offload driver Po Liu
2020-03-12 22:14   ` Vinicius Costa Gomes
2020-03-13  5:59     ` [EXT] " Po Liu
2020-03-06 12:56 ` [RFC,net-next 6/9] net: qos: add tc police offloading action with max frame size limit Po Liu
2020-06-23  6:34   ` [v1,net-next 1/4] " Po Liu
2020-06-23  6:34     ` Po Liu [this message]
2020-06-23  6:34     ` [v1,net-next 3/4] net: qos: police action add index for tc flower offloading Po Liu
2020-06-23  7:09       ` Ido Schimmel
2020-06-23  7:39         ` [EXT] " Po Liu
2020-06-23 10:08       ` Jamal Hadi Salim
2020-06-23  6:34     ` [v1,net-next 4/4] net: enetc add tc flower offload flow metering policing action Po Liu
2020-06-23 14:54       ` kernel test robot
2020-06-23 15:08       ` kernel test robot
2020-06-24  9:36       ` [v2,net-next 1/4] net: qos: add tc police offloading action with max frame size limit Po Liu
2020-06-24  9:36         ` [v2,net-next 2/4] net: enetc: add support max frame size for tc flower offload Po Liu
2020-06-25  5:04           ` David Miller
2020-06-24  9:36         ` [v2,net-next 3/4] net: qos: police action add index for tc flower offloading Po Liu
2020-06-25  5:04           ` David Miller
2020-06-24  9:36         ` [v2,net-next 4/4] net: enetc add tc flower offload flow metering policing action Po Liu
2020-06-25  5:04           ` David Miller
2020-06-25  5:04         ` [v2,net-next 1/4] net: qos: add tc police offloading action with max frame size limit David Miller
2020-06-23  7:01     ` [v1,net-next " Ido Schimmel
2020-03-06 12:56 ` [RFC,net-next 7/9] net: enetc: add support max frame size for tc flower offload Po Liu
2020-03-06 12:56 ` [RFC,net-next 8/9] net: qos: police action add index for tc flower offloading Po Liu
2020-06-21 10:04   ` Ido Schimmel
2020-03-06 12:56 ` [RFC,net-next 9/9] net: enetc add tc flower offload flow metering policing action Po Liu
2020-03-06 12:56 ` [RFC, iproute2-next] iproute2:tc:action: add a gate control action Po Liu
2020-03-24  3:47   ` [v1,net-next 0/5] Introduce a flow gate control action and apply IEEE Po Liu
2020-03-24  3:47     ` [v1,net-next 1/5] net: qos offload add flow status with dropped count Po Liu
2020-03-24 10:01       ` Jiri Pirko
2020-03-24 13:04         ` [EXT] " Po Liu
2020-03-24  3:47     ` [v1,net-next 2/5] net: qos: introduce a gate control flow action Po Liu
2020-03-24 10:19       ` Jiri Pirko
2020-03-24 10:28         ` [EXT] " Po Liu
2020-03-24  3:47     ` [v1,net-next 3/5] net: schedule: add action gate offloading Po Liu
2020-03-24  3:47     ` [v1,net-next 4/5] net: enetc: add hw tc hw offload features for PSPF capability Po Liu
2020-03-24 11:18       ` kbuild test robot
2020-03-24 12:14       ` Jiri Pirko
2020-03-24  3:47     ` [v1,net-next 5/5] net: enetc: add tc flower psfp offload driver Po Liu
2020-03-24 12:53       ` kbuild test robot
2020-03-24  3:47     ` [v1,iproute2 1/2] iproute2:tc:action: add a gate control action Po Liu
2020-03-24 21:59       ` Stephen Hemminger
2020-03-25  2:40         ` [EXT] " Po Liu
2020-03-24  3:47     ` [v1,iproute2 2/2] iproute2: add gate action man page Po Liu
2020-04-14  5:40       ` [v2,net-next 0/4] Introduce a flow gate control action and apply IEEE Po Liu
2020-04-14  5:40         ` [ v2,net-next 1/4] net: qos: introduce a gate control flow action Po Liu
2020-04-14  5:40         ` [ v2,net-next 2/4] net: schedule: add action gate offloading Po Liu
2020-04-14  5:40         ` [ v2,net-next 3/4] net: enetc: add hw tc hw offload features for PSPF capability Po Liu
2020-04-14  5:40         ` [ v2,net-next 4/4] net: enetc: add tc flower psfp offload driver Po Liu
2020-04-14 23:41         ` [v2,net-next 0/4] Introduce a flow gate control action and apply IEEE David Miller
2020-04-18  1:12       ` Po Liu
2020-04-18  1:12         ` [ v2,net-next 1/4] net: qos: introduce a gate control flow action Po Liu
2020-04-18  1:12         ` [ v2,net-next 2/4] net: schedule: add action gate offloading Po Liu
2020-04-18  1:12         ` [ v2,net-next 3/4] net: enetc: add hw tc hw offload features for PSPF capability Po Liu
2020-04-18  1:12         ` [ v2,net-next 4/4] net: enetc: add tc flower psfp offload driver Po Liu
2020-04-18 22:52           ` Vladimir Oltean
2020-04-19  1:44             ` [EXT] " Po Liu
2020-04-22  2:48           ` [v3,net-next 0/4] Introduce a flow gate control action and apply IEEE Po Liu
2020-04-22  2:48             ` [v3,net-next 1/4] net: qos: introduce a gate control flow action Po Liu
2020-04-22 13:23               ` Vlad Buslov
2020-04-23  3:14                 ` [EXT] " Po Liu
2020-04-23  7:43                   ` Vlad Buslov
2020-04-23  8:32                     ` Po Liu
2020-04-23  9:15                       ` Po Liu
2020-04-23 11:14                         ` Vlad Buslov
2020-04-23 11:03                       ` Vlad Buslov
2020-04-22 19:19               ` Allan W. Nielsen
2020-04-22 19:28                 ` Vladimir Oltean
2020-04-22 20:05                   ` Dave Taht
2020-04-23  3:29                     ` [EXT] " Po Liu
2020-04-23 19:11                   ` Allan W. Nielsen
2020-04-23  3:27                 ` [EXT] " Po Liu
2020-04-23 17:38               ` Vinicius Costa Gomes
2020-04-23 19:17                 ` Allan W. Nielsen
2020-04-24  3:23                 ` [EXT] " Po Liu
2020-04-24 17:41                   ` Vinicius Costa Gomes
2020-04-25  1:49                     ` Po Liu
2020-04-22  2:48             ` [v3,net-next 2/4] net: schedule: add action gate offloading Po Liu
2020-04-22 14:14               ` Vlad Buslov
2020-04-22  2:48             ` [v3,net-next 3/4] net: enetc: add hw tc hw offload features for PSPF capability Po Liu
2020-04-22  2:48             ` [v3,net-next 4/4] net: enetc: add tc flower psfp offload driver Po Liu
2020-04-28  3:34               ` [v4,net-next 0/4] Introduce a flow gate control action and apply IEEE Po Liu
2020-04-28  3:34                 ` [v4,net-next 1/4] net: qos: introduce a gate control flow action Po Liu
2020-04-29 17:04                   ` Vlad Buslov
2020-04-30  0:52                     ` [EXT] " Po Liu
2020-04-28  3:34                 ` [v4,net-next 2/4] net: schedule: add action gate offloading Po Liu
2020-04-29 17:40                   ` Vlad Buslov
2020-04-28  3:34                 ` [v4,net-next 3/4] net: enetc: add hw tc hw offload features for PSPF capability Po Liu
2020-04-28  3:34                 ` [v4,net-next 4/4] net: enetc: add tc flower psfp offload driver Po Liu
2020-05-01  0:53                   ` [v5,net-next 0/4] Introduce a flow gate control action and apply IEEE Po Liu
2020-05-01  0:53                     ` [v5,net-next 1/4] net: qos: introduce a gate control flow action Po Liu
2020-05-01  0:53                     ` [v5,net-next 2/4] net: schedule: add action gate offloading Po Liu
2020-05-01  0:53                     ` [v5,net-next 3/4] net: enetc: add hw tc hw offload features for PSPF capability Po Liu
2020-05-01  0:53                     ` [v5,net-next 4/4] net: enetc: add tc flower psfp offload driver Po Liu
2020-05-03  6:32                       ` [v3,iproute2 1/2] iproute2:tc:action: add a gate control action Po Liu
2020-05-03  6:32                         ` [v3,iproute2 2/2] iproute2: add gate action man page Po Liu
2020-05-06  8:40                           ` [v4,iproute2-next 1/2] iproute2-next:tc:action: add a gate control action Po Liu
2020-05-06  8:40                             ` [v4,iproute2-next 2/2] iproute2-next: add gate action man page Po Liu
2020-05-08  7:02                               ` [v5,iproute2-next 1/2] iproute2-next:tc:action: add a gate control action Po Liu
2020-05-08  7:02                                 ` [v5,iproute2-next 2/2] iproute2-next: add gate action man page Po Liu
2020-05-13  2:21                                 ` [v5,iproute2-next 1/2] iproute2-next:tc:action: add a gate control action David Ahern
2020-05-06 12:54                             ` [v4,iproute2-next " Davide Caratti
2020-05-07  2:28                               ` [EXT] " Po Liu
2020-05-06 15:21                             ` Stephen Hemminger
2020-05-05  0:05                         ` [v3,iproute2 1/2] iproute2:tc:action: " Stephen Hemminger
2020-05-05  0:06                         ` Stephen Hemminger
2020-05-01 23:08                     ` [v5,net-next 0/4] Introduce a flow gate control action and apply IEEE David Miller
2020-06-19  6:01     ` [v2,net-next] net: qos offload add flow status with dropped count Po Liu
2020-06-19  7:03       ` Simon Horman
2020-06-19 18:00       ` Vlad Buslov
2020-06-19 19:54       ` David Miller

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=20200623063412.19180-2-po.liu@nxp.com \
    --to=po.liu@nxp.com \
    --cc=UNGLinuxDriver@microchip.com \
    --cc=alexandre.belloni@bootlin.com \
    --cc=alexandru.marginean@nxp.com \
    --cc=andre.guedes@linux.intel.com \
    --cc=claudiu.manoil@nxp.com \
    --cc=davem@davemloft.net \
    --cc=idosch@idosch.org \
    --cc=idosch@mellanox.com \
    --cc=jhs@mojatatu.com \
    --cc=jiri@mellanox.com \
    --cc=jiri@resnulli.us \
    --cc=kuba@kernel.org \
    --cc=leon@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=m-karicheri2@ti.com \
    --cc=michael.chan@broadcom.com \
    --cc=moshe@mellanox.com \
    --cc=netdev@vger.kernel.org \
    --cc=pablo@netfilter.org \
    --cc=saeedm@mellanox.com \
    --cc=simon.horman@netronome.com \
    --cc=stephen@networkplumber.org \
    --cc=vinicius.gomes@intel.com \
    --cc=vishal@chelsio.com \
    --cc=vlad@buslov.dev \
    --cc=vladimir.oltean@nxp.com \
    --cc=xiyou.wangcong@gmail.com \
    /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;
as well as URLs for NNTP newsgroup(s).