diff options
Diffstat (limited to 'include/net/sch_generic.h')
| -rw-r--r-- | include/net/sch_generic.h | 17 | 
1 files changed, 12 insertions, 5 deletions
diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h index f4eb365f7dc..624f9857c83 100644 --- a/include/net/sch_generic.h +++ b/include/net/sch_generic.h @@ -185,7 +185,7 @@ struct tcf_result {  };  struct tcf_proto_ops { -	struct tcf_proto_ops	*next; +	struct list_head	head;  	char			kind[IFNAMSIZ];  	int			(*classify)(struct sk_buff *, @@ -199,12 +199,12 @@ struct tcf_proto_ops {  	int			(*change)(struct net *net, struct sk_buff *,  					struct tcf_proto*, unsigned long,  					u32 handle, struct nlattr **, -					unsigned long *); +					unsigned long *, bool);  	int			(*delete)(struct tcf_proto*, unsigned long);  	void			(*walk)(struct tcf_proto*, struct tcf_walker *arg);  	/* rtnetlink specific */ -	int			(*dump)(struct tcf_proto*, unsigned long, +	int			(*dump)(struct net*, struct tcf_proto*, unsigned long,  					struct sk_buff *skb, struct tcmsg*);  	struct module		*owner; @@ -702,13 +702,20 @@ static inline u64 psched_l2t_ns(const struct psched_ratecfg *r,  }  void psched_ratecfg_precompute(struct psched_ratecfg *r, -			       const struct tc_ratespec *conf); +			       const struct tc_ratespec *conf, +			       u64 rate64);  static inline void psched_ratecfg_getrate(struct tc_ratespec *res,  					  const struct psched_ratecfg *r)  {  	memset(res, 0, sizeof(*res)); -	res->rate = r->rate_bytes_ps; + +	/* legacy struct tc_ratespec has a 32bit @rate field +	 * Qdisc using 64bit rate should add new attributes +	 * in order to maintain compatibility. +	 */ +	res->rate = min_t(u64, r->rate_bytes_ps, ~0U); +  	res->overhead = r->overhead;  	res->linklayer = (r->linklayer & TC_LINKLAYER_MASK);  }  | 
