Fix qdisc patch
This commit is contained in:
@@ -8,17 +8,14 @@
|
|||||||
* @tc_at_ingress: used within tc_classify to distinguish in/egress
|
* @tc_at_ingress: used within tc_classify to distinguish in/egress
|
||||||
* @redirected: packet was redirected by packet classifier
|
* @redirected: packet was redirected by packet classifier
|
||||||
* @from_ingress: packet was redirected from the ingress path
|
* @from_ingress: packet was redirected from the ingress path
|
||||||
@@ -970,6 +971,10 @@ struct sk_buff {
|
@@ -939,6 +940,7 @@ struct sk_buff {
|
||||||
__u8 offload_fwd_mark:1;
|
#ifdef CONFIG_NET_XGRESS
|
||||||
__u8 offload_l3_fwd_mark:1;
|
__u8 tc_at_ingress:1; /* See TC_AT_INGRESS_MASK */
|
||||||
#endif
|
__u8 tc_skip_classify:1;
|
||||||
+#ifdef CONFIG_NET_CLS_ACT
|
|
||||||
+ __u8 tc_skip_classify_offload:1;
|
+ __u8 tc_skip_classify_offload:1;
|
||||||
+ __u16 tc_verd_qca_nss;
|
#endif
|
||||||
+#endif
|
__u8 remcsum_offload:1;
|
||||||
__u8 redirected:1;
|
__u8 csum_complete_sw:1;
|
||||||
#ifdef CONFIG_NET_REDIRECT
|
|
||||||
__u8 from_ingress:1;
|
|
||||||
--- a/include/uapi/linux/pkt_cls.h
|
--- a/include/uapi/linux/pkt_cls.h
|
||||||
+++ b/include/uapi/linux/pkt_cls.h
|
+++ b/include/uapi/linux/pkt_cls.h
|
||||||
@@ -139,6 +139,7 @@ enum tca_id {
|
@@ -139,6 +139,7 @@ enum tca_id {
|
||||||
@@ -29,31 +26,6 @@
|
|||||||
/* other actions go here */
|
/* other actions go here */
|
||||||
__TCA_ID_MAX = 255
|
__TCA_ID_MAX = 255
|
||||||
};
|
};
|
||||||
@@ -817,4 +818,14 @@ enum {
|
|
||||||
TCF_EM_OPND_LT
|
|
||||||
};
|
|
||||||
|
|
||||||
+
|
|
||||||
+#define _TC_MAKE32(x) ((x))
|
|
||||||
+#define _TC_MAKEMASK1(n) (_TC_MAKE32(1) << _TC_MAKE32(n))
|
|
||||||
+
|
|
||||||
+#define TC_NCLS _TC_MAKEMASK1(8)
|
|
||||||
+#define TC_NCLS_NSS _TC_MAKEMASK1(12)
|
|
||||||
+#define SET_TC_NCLS_NSS(v) ( TC_NCLS_NSS | ((v) & ~TC_NCLS_NSS))
|
|
||||||
+#define CLR_TC_NCLS_NSS(v) ( (v) & ~TC_NCLS_NSS)
|
|
||||||
+
|
|
||||||
+
|
|
||||||
#endif
|
|
||||||
--- a/include/linux/timer.h
|
|
||||||
+++ b/include/linux/timer.h
|
|
||||||
@@ -17,6 +17,7 @@ struct timer_list {
|
|
||||||
unsigned long expires;
|
|
||||||
void (*function)(struct timer_list *);
|
|
||||||
u32 flags;
|
|
||||||
+ unsigned long cust_data;
|
|
||||||
|
|
||||||
#ifdef CONFIG_LOCKDEP
|
|
||||||
struct lockdep_map lockdep_map;
|
|
||||||
--- a/drivers/net/ifb.c
|
--- a/drivers/net/ifb.c
|
||||||
+++ b/drivers/net/ifb.c
|
+++ b/drivers/net/ifb.c
|
||||||
@@ -151,6 +151,31 @@ resched:
|
@@ -151,6 +151,31 @@ resched:
|
||||||
@@ -108,11 +80,10 @@
|
|||||||
* @sync: function to call if address should be added
|
* @sync: function to call if address should be added
|
||||||
--- a/include/uapi/linux/pkt_sched.h
|
--- a/include/uapi/linux/pkt_sched.h
|
||||||
+++ b/include/uapi/linux/pkt_sched.h
|
+++ b/include/uapi/linux/pkt_sched.h
|
||||||
@@ -1306,4 +1306,248 @@ enum {
|
@@ -119,6 +119,249 @@ enum {
|
||||||
|
|
||||||
#define TCA_ETS_MAX (__TCA_ETS_MAX - 1)
|
#define TCA_STAB_MAX (__TCA_STAB_MAX - 1)
|
||||||
|
|
||||||
+
|
|
||||||
+enum {
|
+enum {
|
||||||
+ TCA_NSS_ACCEL_MODE_NSS_FW,
|
+ TCA_NSS_ACCEL_MODE_NSS_FW,
|
||||||
+ TCA_NSS_ACCEL_MODE_PPE,
|
+ TCA_NSS_ACCEL_MODE_PPE,
|
||||||
@@ -356,36 +327,9 @@
|
|||||||
+ __u8 accel_mode; /* Dictates which data plane offloads the qdisc */
|
+ __u8 accel_mode; /* Dictates which data plane offloads the qdisc */
|
||||||
+};
|
+};
|
||||||
+
|
+
|
||||||
#endif
|
/* FIFO section */
|
||||||
--- a/net/sched/sch_api.c
|
|
||||||
+++ b/net/sched/sch_api.c
|
|
||||||
@@ -2399,4 +2399,26 @@ static int __init pktsched_init(void)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+
|
struct tc_fifo_qopt {
|
||||||
+bool tcf_destroy(struct tcf_proto *tp, bool force)
|
|
||||||
+{
|
|
||||||
+ tp->ops->destroy(tp, force, NULL);
|
|
||||||
+ module_put(tp->ops->owner);
|
|
||||||
+ kfree_rcu(tp, rcu);
|
|
||||||
+
|
|
||||||
+ return true;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+void tcf_destroy_chain(struct tcf_proto __rcu **fl)
|
|
||||||
+{
|
|
||||||
+ struct tcf_proto *tp;
|
|
||||||
+
|
|
||||||
+ while ((tp = rtnl_dereference(*fl)) != NULL) {
|
|
||||||
+ RCU_INIT_POINTER(*fl, tp->next);
|
|
||||||
+ tcf_destroy(tp, true);
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+EXPORT_SYMBOL(tcf_destroy_chain);
|
|
||||||
+
|
|
||||||
+
|
|
||||||
subsys_initcall(pktsched_init);
|
|
||||||
--- a/net/sched/sch_generic.c
|
--- a/net/sched/sch_generic.c
|
||||||
+++ b/net/sched/sch_generic.c
|
+++ b/net/sched/sch_generic.c
|
||||||
@@ -1059,7 +1059,7 @@ static void qdisc_free_cb(struct rcu_hea
|
@@ -1059,7 +1059,7 @@ static void qdisc_free_cb(struct rcu_hea
|
||||||
@@ -415,10 +359,13 @@
|
|||||||
u32 limit;
|
u32 limit;
|
||||||
const struct Qdisc_ops *ops;
|
const struct Qdisc_ops *ops;
|
||||||
struct qdisc_size_table __rcu *stab;
|
struct qdisc_size_table __rcu *stab;
|
||||||
@@ -752,6 +753,40 @@ static inline bool skb_skip_tc_classify(
|
@@ -748,6 +749,40 @@ static inline bool skb_skip_tc_classify(
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
+ return false;
|
||||||
|
+}
|
||||||
|
+
|
||||||
+/*
|
+/*
|
||||||
+ * Set skb classify bit field.
|
+ * Set skb classify bit field.
|
||||||
+ */
|
+ */
|
||||||
@@ -450,19 +397,18 @@
|
|||||||
+ return true;
|
+ return true;
|
||||||
+ }
|
+ }
|
||||||
+#endif
|
+#endif
|
||||||
+ return false;
|
return false;
|
||||||
+}
|
|
||||||
+
|
|
||||||
/* Reset all TX qdiscs greater than index of a device. */
|
|
||||||
static inline void qdisc_reset_all_tx_gt(struct net_device *dev, unsigned int i)
|
|
||||||
{
|
|
||||||
@@ -1323,4 +1358,9 @@ static inline void qdisc_synchronize(con
|
|
||||||
msleep(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -802,6 +802,11 @@ static inline void qdisc_reset_all_tx_gt(struct net_device *dev, unsigned int i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+static inline void qdisc_reset_all_tx(struct net_device *dev)
|
||||||
|
+{
|
||||||
|
+ qdisc_reset_all_tx_gt(dev, 0);
|
||||||
|
+}
|
||||||
+
|
+
|
||||||
+void qdisc_destroy(struct Qdisc *qdisc);
|
/* Are all TX queues of the device empty? */
|
||||||
+void tcf_destroy_chain(struct tcf_proto __rcu **fl);
|
static inline bool qdisc_all_tx_empty(const struct net_device *dev)
|
||||||
+
|
{
|
||||||
+
|
|
||||||
#endif
|
|
||||||
|
|||||||
Reference in New Issue
Block a user