All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vlad Buslov <vlad@buslov.dev>
To: Po Liu <Po.Liu@nxp.com>
Cc: davem@davemloft.net, linux-kernel@vger.kernel.org,
	netdev@vger.kernel.org, vinicius.gomes@intel.com,
	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
Subject: Re: [v3,net-next  2/4] net: schedule: add action gate offloading
Date: Wed, 22 Apr 2020 17:14:07 +0300	[thread overview]
Message-ID: <874ktbbob4.fsf@buslov.dev> (raw)
In-Reply-To: <20200422024852.23224-3-Po.Liu@nxp.com>


On Wed 22 Apr 2020 at 05:48, Po Liu <Po.Liu@nxp.com> wrote:
> Add the gate action to the flow action entry. Add the gate parameters to
> the tc_setup_flow_action() queueing to the entries of flow_action_entry
> array provide to the driver.
>
> Signed-off-by: Po Liu <Po.Liu@nxp.com>
> ---
>  include/net/flow_offload.h   |  10 +++
>  include/net/tc_act/tc_gate.h | 115 +++++++++++++++++++++++++++++++++++
>  net/sched/cls_api.c          |  33 ++++++++++
>  3 files changed, 158 insertions(+)
>
> diff --git a/include/net/flow_offload.h b/include/net/flow_offload.h
> index 3619c6acf60f..94a30fe02e6d 100644
> --- a/include/net/flow_offload.h
> +++ b/include/net/flow_offload.h
> @@ -147,6 +147,7 @@ enum flow_action_id {
>  	FLOW_ACTION_MPLS_PUSH,
>  	FLOW_ACTION_MPLS_POP,
>  	FLOW_ACTION_MPLS_MANGLE,
> +	FLOW_ACTION_GATE,
>  	NUM_FLOW_ACTIONS,
>  };
>  
> @@ -255,6 +256,15 @@ struct flow_action_entry {
>  			u8		bos;
>  			u8		ttl;
>  		} mpls_mangle;
> +		struct {
> +			u32		index;
> +			s32		prio;
> +			u64		basetime;
> +			u64		cycletime;
> +			u64		cycletimeext;
> +			u32		num_entries;
> +			struct action_gate_entry *entries;
> +		} gate;
>  	};
>  	struct flow_action_cookie *cookie; /* user defined action cookie */
>  };
> diff --git a/include/net/tc_act/tc_gate.h b/include/net/tc_act/tc_gate.h
> index b0ace55b2aaa..62633cb02c7a 100644
> --- a/include/net/tc_act/tc_gate.h
> +++ b/include/net/tc_act/tc_gate.h
> @@ -7,6 +7,13 @@
>  #include <net/act_api.h>
>  #include <linux/tc_act/tc_gate.h>
>  
> +struct action_gate_entry {
> +	u8			gate_state;
> +	u32			interval;
> +	s32			ipv;
> +	s32			maxoctets;
> +};
> +
>  struct tcfg_gate_entry {
>  	int			index;
>  	u8			gate_state;
> @@ -51,4 +58,112 @@ struct tcf_gate {
>  #define get_gate_param(act) ((struct tcf_gate_params *)act)
>  #define get_gate_action(p) ((struct gate_action *)p)
>  
> +static inline bool is_tcf_gate(const struct tc_action *a)
> +{
> +#ifdef CONFIG_NET_CLS_ACT
> +	if (a->ops && a->ops->id == TCA_ID_GATE)
> +		return true;
> +#endif
> +	return false;
> +}
> +
> +static inline u32 tcf_gate_index(const struct tc_action *a)
> +{
> +	return a->tcfa_index;
> +}
> +
> +static inline s32 tcf_gate_prio(const struct tc_action *a)
> +{
> +	s32 tcfg_prio;
> +
> +	rcu_read_lock();
> +	tcfg_prio = rcu_dereference(to_gate(a)->actg)->param.tcfg_priority;
> +	rcu_read_unlock();
> +
> +	return tcfg_prio;
> +}
> +
> +static inline u64 tcf_gate_basetime(const struct tc_action *a)
> +{
> +	u64 tcfg_basetime;
> +
> +	rcu_read_lock();
> +	tcfg_basetime =
> +		rcu_dereference(to_gate(a)->actg)->param.tcfg_basetime;
> +	rcu_read_unlock();
> +
> +	return tcfg_basetime;
> +}
> +
> +static inline u64 tcf_gate_cycletime(const struct tc_action *a)
> +{
> +	u64 tcfg_cycletime;
> +
> +	rcu_read_lock();
> +	tcfg_cycletime =
> +		rcu_dereference(to_gate(a)->actg)->param.tcfg_cycletime;
> +	rcu_read_unlock();
> +
> +	return tcfg_cycletime;
> +}
> +
> +static inline u64 tcf_gate_cycletimeext(const struct tc_action *a)
> +{
> +	u64 tcfg_cycletimeext;
> +
> +	rcu_read_lock();
> +	tcfg_cycletimeext =
> +		rcu_dereference(to_gate(a)->actg)->param.tcfg_cycletime_ext;
> +	rcu_read_unlock();
> +
> +	return tcfg_cycletimeext;
> +}
> +
> +static inline u32 tcf_gate_num_entries(const struct tc_action *a)
> +{
> +	u32 num_entries;
> +
> +	rcu_read_lock();
> +	num_entries =
> +		rcu_dereference(to_gate(a)->actg)->param.num_entries;
> +	rcu_read_unlock();
> +
> +	return num_entries;
> +}
> +
> +static inline struct action_gate_entry
> +			*tcf_gate_get_list(const struct tc_action *a)
> +{
> +	struct action_gate_entry *oe;
> +	struct tcf_gate_params *p;
> +	struct tcfg_gate_entry *entry;
> +	u32 num_entries;
> +	int i = 0;
> +
> +	rcu_read_lock();
> +	p = &(rcu_dereference(to_gate(a)->actg)->param);
> +	num_entries = p->num_entries;
> +	rcu_read_unlock();

Here you obtain a pointer to part of rcu-protected object and use it
past rcu read lock block.

> +
> +	list_for_each_entry(entry, &p->entries, list)
> +		i++;
> +
> +	if (i != num_entries)
> +		return NULL;
> +
> +	oe = kzalloc(sizeof(*oe) * num_entries, GFP_KERNEL);
> +	if (!oe)
> +		return NULL;
> +
> +	i = 0;
> +	list_for_each_entry(entry, &p->entries, list) {
> +		oe[i].gate_state = entry->gate_state;
> +		oe[i].interval = entry->interval;
> +		oe[i].ipv = entry->ipv;
> +		oe[i].maxoctets = entry->maxoctets;
> +		i++;
> +	}
> +
> +	return oe;
> +}
>  #endif
> diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c
> index 55bd1429678f..ca8bf74be4ba 100644
> --- a/net/sched/cls_api.c
> +++ b/net/sched/cls_api.c
> @@ -39,6 +39,7 @@
>  #include <net/tc_act/tc_skbedit.h>
>  #include <net/tc_act/tc_ct.h>
>  #include <net/tc_act/tc_mpls.h>
> +#include <net/tc_act/tc_gate.h>
>  #include <net/flow_offload.h>
>  
>  extern const struct nla_policy rtm_tca_policy[TCA_MAX + 1];
> @@ -3523,6 +3524,27 @@ static void tcf_sample_get_group(struct flow_action_entry *entry,
>  #endif
>  }
>  
> +static void tcf_gate_entry_destructor(void *priv)
> +{
> +	struct action_gate_entry *oe = priv;
> +
> +	kfree(oe);
> +}
> +
> +static int tcf_gate_get_entries(struct flow_action_entry *entry,
> +				const struct tc_action *act)
> +{
> +	entry->gate.entries = tcf_gate_get_list(act);
> +
> +	if (!entry->gate.entries)
> +		return -EINVAL;
> +
> +	entry->destructor = tcf_gate_entry_destructor;
> +	entry->destructor_priv = entry->gate.entries;
> +
> +	return 0;
> +}
> +
>  int tc_setup_flow_action(struct flow_action *flow_action,
>  			 const struct tcf_exts *exts)
>  {
> @@ -3669,6 +3691,17 @@ int tc_setup_flow_action(struct flow_action *flow_action,
>  		} else if (is_tcf_skbedit_priority(act)) {
>  			entry->id = FLOW_ACTION_PRIORITY;
>  			entry->priority = tcf_skbedit_priority(act);
> +		} else if (is_tcf_gate(act)) {
> +			entry->id = FLOW_ACTION_GATE;
> +			entry->gate.index = tcf_gate_index(act);
> +			entry->gate.prio = tcf_gate_prio(act);
> +			entry->gate.basetime = tcf_gate_basetime(act);
> +			entry->gate.cycletime = tcf_gate_cycletime(act);
> +			entry->gate.cycletimeext = tcf_gate_cycletimeext(act);
> +			entry->gate.num_entries = tcf_gate_num_entries(act);
> +			err = tcf_gate_get_entries(entry, act);
> +			if (err)
> +				goto err_out;
>  		} else {
>  			err = -EOPNOTSUPP;
>  			goto err_out_locked;


  reply	other threads:[~2020-04-22 14:14 UTC|newest]

Thread overview: 129+ 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     ` [v1,net-next 2/4] net: enetc: add support max frame size for tc flower offload Po Liu
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       ` [v1, net-next " kernel test robot
2020-06-23 14:54         ` [v1,net-next " kernel test robot
2020-06-23 15:08       ` [v1, net-next " kernel test robot
2020-06-23 15:08         ` [v1,net-next " 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       ` [v1, net-next " kbuild test robot
2020-03-24 11:18         ` [v1,net-next " 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       ` [v1, net-next " kbuild test robot
2020-03-24 12:53         ` [v1,net-next " 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 [this message]
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=874ktbbob4.fsf@buslov.dev \
    --to=vlad@buslov.dev \
    --cc=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@mellanox.com \
    --cc=jhs@mojatatu.com \
    --cc=jiri@mellanox.com \
    --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=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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.