summaryrefslogtreecommitdiffstats
path: root/package/linux/kernel-patches/204-net_sched_sch_api_c-wlfix
diff options
context:
space:
mode:
Diffstat (limited to 'package/linux/kernel-patches/204-net_sched_sch_api_c-wlfix')
-rw-r--r--package/linux/kernel-patches/204-net_sched_sch_api_c-wlfix83
1 files changed, 83 insertions, 0 deletions
diff --git a/package/linux/kernel-patches/204-net_sched_sch_api_c-wlfix b/package/linux/kernel-patches/204-net_sched_sch_api_c-wlfix
new file mode 100644
index 000000000..8a6562d77
--- /dev/null
+++ b/package/linux/kernel-patches/204-net_sched_sch_api_c-wlfix
@@ -0,0 +1,83 @@
+--- linux-mips-cvs/net/sched/sch_api.c 2004-11-19 01:29:09.000000000 +0100
++++ linux-broadcom/net/sched/sch_api.c 2005-01-31 18:07:45.000000000 +0100
+@@ -194,7 +194,11 @@
+ {
+ struct Qdisc *q;
+
++#ifdef CONFIG_BCM4710
++ for (q = dev->qdisc_list; q; q = q->next) {
++#else
+ list_for_each_entry(q, &dev->qdisc_list, list) {
++#endif
+ if (q->handle == handle)
+ return q;
+ }
+@@ -371,8 +375,10 @@
+ unsigned long cl = cops->get(parent, classid);
+ if (cl) {
+ err = cops->graft(parent, cl, new, old);
++#ifndef CONFIG_BCM4710
+ if (new)
+ new->parent = classid;
++#endif
+ cops->put(parent, cl);
+ }
+ }
+@@ -427,7 +433,11 @@
+
+ memset(sch, 0, size);
+
++#ifdef CONFIG_BCM4710
++ sch->next = NULL;
++#else
+ INIT_LIST_HEAD(&sch->list);
++#endif
+ skb_queue_head_init(&sch->q);
+
+ if (handle == TC_H_INGRESS)
+@@ -453,7 +463,12 @@
+
+ if (!ops->init || (err = ops->init(sch, tca[TCA_OPTIONS-1])) == 0) {
+ write_lock(&qdisc_tree_lock);
++#ifdef CONFIG_BCM4710
++ sch->next = dev->qdisc_list;
++ dev->qdisc_list = sch;
++#else
+ list_add_tail(&sch->list, &dev->qdisc_list);
++#endif
+ write_unlock(&qdisc_tree_lock);
+ #ifdef CONFIG_NET_ESTIMATOR
+ if (tca[TCA_RATE-1])
+@@ -809,12 +824,20 @@
+ s_q_idx = 0;
+ read_lock(&qdisc_tree_lock);
+ q_idx = 0;
++#ifdef CONFIG_BCM4710
++ for (q = dev->qdisc_list, q_idx = 0; q; q = q->next, q_idx++) {
++#else
+ list_for_each_entry(q, &dev->qdisc_list, list) {
++#endif
+ if (q_idx < s_q_idx) {
+ q_idx++;
+ continue;
+ }
++#ifdef CONFIG_BCM4710
++ if (tc_fill_qdisc(skb, q, 0, NETLINK_CB(cb->skb).pid,
++#else
+ if (tc_fill_qdisc(skb, q, q->parent, NETLINK_CB(cb->skb).pid,
++#endif
+ cb->nlh->nlmsg_seq, NLM_F_MULTI, RTM_NEWQDISC) <= 0) {
+ read_unlock(&qdisc_tree_lock);
+ goto done;
+@@ -1033,7 +1056,11 @@
+ t = 0;
+
+ read_lock(&qdisc_tree_lock);
++#ifdef CONFIG_BCM4710
++ for (q=dev->qdisc_list, t=0; q; q = q->next, t++) {
++#else
+ list_for_each_entry(q, &dev->qdisc_list, list) {
++#endif
+ if (t < s_t || !q->ops->cl_ops ||
+ (tcm->tcm_parent &&
+ TC_H_MAJ(tcm->tcm_parent) != q->handle)) {