diff options
| author | Dave Airlie <airlied@redhat.com> | 2014-06-05 06:28:59 -0400 |
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2014-06-05 06:28:59 -0400 |
| commit | 8d4ad9d4bb0a618c975a32d77087694ec6336f68 (patch) | |
| tree | d18d12688174a623e3503b11118e44ef8186c90b /net/sched | |
| parent | 5ea1f752ae04be403a3dc8ec876a60d7f5f6990a (diff) | |
| parent | 9e9a928eed8796a0a1aaed7e0b676db86ba84594 (diff) | |
Merge commit '9e9a928eed8796a0a1aaed7e0b676db86ba84594' into drm-next
Merge drm-fixes into drm-next.
Both i915 and radeon need this done for later patches.
Conflicts:
drivers/gpu/drm/drm_crtc_helper.c
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/i915_gem.c
drivers/gpu/drm/i915/i915_gem_execbuffer.c
drivers/gpu/drm/i915/i915_gem_gtt.c
Diffstat (limited to 'net/sched')
| -rw-r--r-- | net/sched/act_api.c | 2 | ||||
| -rw-r--r-- | net/sched/cls_api.c | 2 | ||||
| -rw-r--r-- | net/sched/cls_tcindex.c | 30 | ||||
| -rw-r--r-- | net/sched/sch_api.c | 6 | ||||
| -rw-r--r-- | net/sched/sch_hhf.c | 11 |
5 files changed, 31 insertions, 20 deletions
diff --git a/net/sched/act_api.c b/net/sched/act_api.c index 8a5ba5add4bc..648778aef1a2 100644 --- a/net/sched/act_api.c +++ b/net/sched/act_api.c | |||
| @@ -948,7 +948,7 @@ static int tc_ctl_action(struct sk_buff *skb, struct nlmsghdr *n) | |||
| 948 | u32 portid = skb ? NETLINK_CB(skb).portid : 0; | 948 | u32 portid = skb ? NETLINK_CB(skb).portid : 0; |
| 949 | int ret = 0, ovr = 0; | 949 | int ret = 0, ovr = 0; |
| 950 | 950 | ||
| 951 | if ((n->nlmsg_type != RTM_GETACTION) && !capable(CAP_NET_ADMIN)) | 951 | if ((n->nlmsg_type != RTM_GETACTION) && !netlink_capable(skb, CAP_NET_ADMIN)) |
| 952 | return -EPERM; | 952 | return -EPERM; |
| 953 | 953 | ||
| 954 | ret = nlmsg_parse(n, sizeof(struct tcamsg), tca, TCA_ACT_MAX, NULL); | 954 | ret = nlmsg_parse(n, sizeof(struct tcamsg), tca, TCA_ACT_MAX, NULL); |
diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c index 29a30a14c315..bdbdb1a7920a 100644 --- a/net/sched/cls_api.c +++ b/net/sched/cls_api.c | |||
| @@ -134,7 +134,7 @@ static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n) | |||
| 134 | int err; | 134 | int err; |
| 135 | int tp_created = 0; | 135 | int tp_created = 0; |
| 136 | 136 | ||
| 137 | if ((n->nlmsg_type != RTM_GETTFILTER) && !capable(CAP_NET_ADMIN)) | 137 | if ((n->nlmsg_type != RTM_GETTFILTER) && !netlink_capable(skb, CAP_NET_ADMIN)) |
| 138 | return -EPERM; | 138 | return -EPERM; |
| 139 | 139 | ||
| 140 | replay: | 140 | replay: |
diff --git a/net/sched/cls_tcindex.c b/net/sched/cls_tcindex.c index eed8404443d8..f435a88d899a 100644 --- a/net/sched/cls_tcindex.c +++ b/net/sched/cls_tcindex.c | |||
| @@ -188,6 +188,12 @@ static const struct nla_policy tcindex_policy[TCA_TCINDEX_MAX + 1] = { | |||
| 188 | [TCA_TCINDEX_CLASSID] = { .type = NLA_U32 }, | 188 | [TCA_TCINDEX_CLASSID] = { .type = NLA_U32 }, |
| 189 | }; | 189 | }; |
| 190 | 190 | ||
| 191 | static void tcindex_filter_result_init(struct tcindex_filter_result *r) | ||
| 192 | { | ||
| 193 | memset(r, 0, sizeof(*r)); | ||
| 194 | tcf_exts_init(&r->exts, TCA_TCINDEX_ACT, TCA_TCINDEX_POLICE); | ||
| 195 | } | ||
| 196 | |||
| 191 | static int | 197 | static int |
| 192 | tcindex_set_parms(struct net *net, struct tcf_proto *tp, unsigned long base, | 198 | tcindex_set_parms(struct net *net, struct tcf_proto *tp, unsigned long base, |
| 193 | u32 handle, struct tcindex_data *p, | 199 | u32 handle, struct tcindex_data *p, |
| @@ -207,15 +213,11 @@ tcindex_set_parms(struct net *net, struct tcf_proto *tp, unsigned long base, | |||
| 207 | return err; | 213 | return err; |
| 208 | 214 | ||
| 209 | memcpy(&cp, p, sizeof(cp)); | 215 | memcpy(&cp, p, sizeof(cp)); |
| 210 | memset(&new_filter_result, 0, sizeof(new_filter_result)); | 216 | tcindex_filter_result_init(&new_filter_result); |
| 211 | tcf_exts_init(&new_filter_result.exts, TCA_TCINDEX_ACT, TCA_TCINDEX_POLICE); | ||
| 212 | 217 | ||
| 218 | tcindex_filter_result_init(&cr); | ||
| 213 | if (old_r) | 219 | if (old_r) |
| 214 | memcpy(&cr, r, sizeof(cr)); | 220 | cr.res = r->res; |
| 215 | else { | ||
| 216 | memset(&cr, 0, sizeof(cr)); | ||
| 217 | tcf_exts_init(&cr.exts, TCA_TCINDEX_ACT, TCA_TCINDEX_POLICE); | ||
| 218 | } | ||
| 219 | 221 | ||
| 220 | if (tb[TCA_TCINDEX_HASH]) | 222 | if (tb[TCA_TCINDEX_HASH]) |
| 221 | cp.hash = nla_get_u32(tb[TCA_TCINDEX_HASH]); | 223 | cp.hash = nla_get_u32(tb[TCA_TCINDEX_HASH]); |
| @@ -267,9 +269,14 @@ tcindex_set_parms(struct net *net, struct tcf_proto *tp, unsigned long base, | |||
| 267 | err = -ENOMEM; | 269 | err = -ENOMEM; |
| 268 | if (!cp.perfect && !cp.h) { | 270 | if (!cp.perfect && !cp.h) { |
| 269 | if (valid_perfect_hash(&cp)) { | 271 | if (valid_perfect_hash(&cp)) { |
| 272 | int i; | ||
| 273 | |||
| 270 | cp.perfect = kcalloc(cp.hash, sizeof(*r), GFP_KERNEL); | 274 | cp.perfect = kcalloc(cp.hash, sizeof(*r), GFP_KERNEL); |
| 271 | if (!cp.perfect) | 275 | if (!cp.perfect) |
| 272 | goto errout; | 276 | goto errout; |
| 277 | for (i = 0; i < cp.hash; i++) | ||
| 278 | tcf_exts_init(&cp.perfect[i].exts, TCA_TCINDEX_ACT, | ||
| 279 | TCA_TCINDEX_POLICE); | ||
| 273 | balloc = 1; | 280 | balloc = 1; |
| 274 | } else { | 281 | } else { |
| 275 | cp.h = kcalloc(cp.hash, sizeof(f), GFP_KERNEL); | 282 | cp.h = kcalloc(cp.hash, sizeof(f), GFP_KERNEL); |
| @@ -295,14 +302,17 @@ tcindex_set_parms(struct net *net, struct tcf_proto *tp, unsigned long base, | |||
| 295 | tcf_bind_filter(tp, &cr.res, base); | 302 | tcf_bind_filter(tp, &cr.res, base); |
| 296 | } | 303 | } |
| 297 | 304 | ||
| 298 | tcf_exts_change(tp, &cr.exts, &e); | 305 | if (old_r) |
| 306 | tcf_exts_change(tp, &r->exts, &e); | ||
| 307 | else | ||
| 308 | tcf_exts_change(tp, &cr.exts, &e); | ||
| 299 | 309 | ||
| 300 | tcf_tree_lock(tp); | 310 | tcf_tree_lock(tp); |
| 301 | if (old_r && old_r != r) | 311 | if (old_r && old_r != r) |
| 302 | memset(old_r, 0, sizeof(*old_r)); | 312 | tcindex_filter_result_init(old_r); |
| 303 | 313 | ||
| 304 | memcpy(p, &cp, sizeof(cp)); | 314 | memcpy(p, &cp, sizeof(cp)); |
| 305 | memcpy(r, &cr, sizeof(cr)); | 315 | r->res = cr.res; |
| 306 | 316 | ||
| 307 | if (r == &new_filter_result) { | 317 | if (r == &new_filter_result) { |
| 308 | struct tcindex_filter **fp; | 318 | struct tcindex_filter **fp; |
diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c index a0b84e0e22de..400769014bbd 100644 --- a/net/sched/sch_api.c +++ b/net/sched/sch_api.c | |||
| @@ -1084,7 +1084,7 @@ static int tc_get_qdisc(struct sk_buff *skb, struct nlmsghdr *n) | |||
| 1084 | struct Qdisc *p = NULL; | 1084 | struct Qdisc *p = NULL; |
| 1085 | int err; | 1085 | int err; |
| 1086 | 1086 | ||
| 1087 | if ((n->nlmsg_type != RTM_GETQDISC) && !capable(CAP_NET_ADMIN)) | 1087 | if ((n->nlmsg_type != RTM_GETQDISC) && !netlink_capable(skb, CAP_NET_ADMIN)) |
| 1088 | return -EPERM; | 1088 | return -EPERM; |
| 1089 | 1089 | ||
| 1090 | err = nlmsg_parse(n, sizeof(*tcm), tca, TCA_MAX, NULL); | 1090 | err = nlmsg_parse(n, sizeof(*tcm), tca, TCA_MAX, NULL); |
| @@ -1151,7 +1151,7 @@ static int tc_modify_qdisc(struct sk_buff *skb, struct nlmsghdr *n) | |||
| 1151 | struct Qdisc *q, *p; | 1151 | struct Qdisc *q, *p; |
| 1152 | int err; | 1152 | int err; |
| 1153 | 1153 | ||
| 1154 | if (!capable(CAP_NET_ADMIN)) | 1154 | if (!netlink_capable(skb, CAP_NET_ADMIN)) |
| 1155 | return -EPERM; | 1155 | return -EPERM; |
| 1156 | 1156 | ||
| 1157 | replay: | 1157 | replay: |
| @@ -1490,7 +1490,7 @@ static int tc_ctl_tclass(struct sk_buff *skb, struct nlmsghdr *n) | |||
| 1490 | u32 qid; | 1490 | u32 qid; |
| 1491 | int err; | 1491 | int err; |
| 1492 | 1492 | ||
| 1493 | if ((n->nlmsg_type != RTM_GETTCLASS) && !capable(CAP_NET_ADMIN)) | 1493 | if ((n->nlmsg_type != RTM_GETTCLASS) && !netlink_capable(skb, CAP_NET_ADMIN)) |
| 1494 | return -EPERM; | 1494 | return -EPERM; |
| 1495 | 1495 | ||
| 1496 | err = nlmsg_parse(n, sizeof(*tcm), tca, TCA_MAX, NULL); | 1496 | err = nlmsg_parse(n, sizeof(*tcm), tca, TCA_MAX, NULL); |
diff --git a/net/sched/sch_hhf.c b/net/sched/sch_hhf.c index edee03d922e2..6e957c3b9854 100644 --- a/net/sched/sch_hhf.c +++ b/net/sched/sch_hhf.c | |||
| @@ -553,11 +553,6 @@ static int hhf_change(struct Qdisc *sch, struct nlattr *opt) | |||
| 553 | if (err < 0) | 553 | if (err < 0) |
| 554 | return err; | 554 | return err; |
| 555 | 555 | ||
| 556 | sch_tree_lock(sch); | ||
| 557 | |||
| 558 | if (tb[TCA_HHF_BACKLOG_LIMIT]) | ||
| 559 | sch->limit = nla_get_u32(tb[TCA_HHF_BACKLOG_LIMIT]); | ||
| 560 | |||
| 561 | if (tb[TCA_HHF_QUANTUM]) | 556 | if (tb[TCA_HHF_QUANTUM]) |
| 562 | new_quantum = nla_get_u32(tb[TCA_HHF_QUANTUM]); | 557 | new_quantum = nla_get_u32(tb[TCA_HHF_QUANTUM]); |
| 563 | 558 | ||
| @@ -567,6 +562,12 @@ static int hhf_change(struct Qdisc *sch, struct nlattr *opt) | |||
| 567 | non_hh_quantum = (u64)new_quantum * new_hhf_non_hh_weight; | 562 | non_hh_quantum = (u64)new_quantum * new_hhf_non_hh_weight; |
| 568 | if (non_hh_quantum > INT_MAX) | 563 | if (non_hh_quantum > INT_MAX) |
| 569 | return -EINVAL; | 564 | return -EINVAL; |
| 565 | |||
| 566 | sch_tree_lock(sch); | ||
| 567 | |||
| 568 | if (tb[TCA_HHF_BACKLOG_LIMIT]) | ||
| 569 | sch->limit = nla_get_u32(tb[TCA_HHF_BACKLOG_LIMIT]); | ||
| 570 | |||
| 570 | q->quantum = new_quantum; | 571 | q->quantum = new_quantum; |
| 571 | q->hhf_non_hh_weight = new_hhf_non_hh_weight; | 572 | q->hhf_non_hh_weight = new_hhf_non_hh_weight; |
| 572 | 573 | ||
