From: David S. Miller Date: Sun, 17 Dec 2017 03:11:55 +0000 (-0500) Subject: Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=c30abd5e40dd863f88e26be09b6ce949145a630a;p=linux.git Merge git://git./linux/kernel/git/davem/net Three sets of overlapping changes, two in the packet scheduler and one in the meson-gxl PHY driver. Signed-off-by: David S. Miller --- c30abd5e40dd863f88e26be09b6ce949145a630a diff --cc drivers/net/phy/meson-gxl.c index 401e3234be58b,842eb871a6e38..4ee630afe43ac --- a/drivers/net/phy/meson-gxl.c +++ b/drivers/net/phy/meson-gxl.c @@@ -58,7 -130,9 +130,8 @@@ static struct phy_driver meson_gxl_phy[ .features = PHY_BASIC_FEATURES, .flags = PHY_IS_INTERNAL, .config_init = meson_gxl_config_init, - .config_aneg = genphy_config_aneg, .aneg_done = genphy_aneg_done, + .read_status = meson_gxl_read_status, .suspend = genphy_suspend, .resume = genphy_resume, }, diff --cc include/net/ip.h index fc9bf1b1fe2c2,af8addbaa3c18..746abff9ce517 --- a/include/net/ip.h +++ b/include/net/ip.h @@@ -33,9 -32,9 +33,10 @@@ #include #include #include +#include #define IPV4_MAX_PMTU 65535U /* RFC 2675, Section 5.1 */ + #define IPV4_MIN_MTU 68 /* RFC 791 */ struct sock; diff --cc include/net/sch_generic.h index 8f8c0afe529b8,83a3e47d5845b..bc6b25faba996 --- a/include/net/sch_generic.h +++ b/include/net/sch_generic.h @@@ -71,7 -71,7 +71,8 @@@ struct Qdisc * qdisc_tree_decrease_qlen() should stop. */ #define TCQ_F_INVISIBLE 0x80 /* invisible by default in dump */ +#define TCQ_F_NOLOCK 0x100 /* qdisc does not require locking */ + #define TCQ_F_OFFLOADED 0x200 /* qdisc is offloaded to HW */ u32 limit; const struct Qdisc_ops *ops; struct qdisc_size_table __rcu *stab; diff --cc net/ipv4/ip_gre.c index 004800b923c64,9c1735632c8c4..9a80d84fc182c --- a/net/ipv4/ip_gre.c +++ b/net/ipv4/ip_gre.c @@@ -267,13 -265,11 +267,13 @@@ static int erspan_rcv(struct sk_buff *s itn = net_generic(net, erspan_net_id); len = gre_hdr_len + sizeof(*ershdr); + /* Check based hdr len */ if (unlikely(!pskb_may_pull(skb, len))) - return -ENOMEM; + return PACKET_REJECT; iph = ip_hdr(skb); - ershdr = (struct erspanhdr *)(skb->data + gre_hdr_len); + ershdr = (struct erspan_base_hdr *)(skb->data + gre_hdr_len); + ver = (ntohs(ershdr->ver_vlan) & VER_MASK) >> VER_OFFSET; /* The original GRE header does not have key field, * Use ERSPAN 10-bit session ID as key. diff --cc net/sched/cls_api.c index 5b9b8a61e8c41,b91ea03e3afa7..32b1ea7cf8634 --- a/net/sched/cls_api.c +++ b/net/sched/cls_api.c @@@ -340,13 -349,16 +339,15 @@@ EXPORT_SYMBOL(tcf_block_get) void tcf_block_put_ext(struct tcf_block *block, struct Qdisc *q, struct tcf_block_ext_info *ei) { - struct tcf_chain *chain; + struct tcf_chain *chain, *tmp; - if (!block) - return; - /* Hold a refcnt for all chains, except 0, so that they don't disappear + /* Hold a refcnt for all chains, so that they don't disappear * while we are iterating. */ ++ if (!block) ++ return; list_for_each_entry(chain, &block->chain_list, list) - if (chain->index) - tcf_chain_hold(chain); + tcf_chain_hold(chain); list_for_each_entry(chain, &block->chain_list, list) tcf_chain_flush(chain); diff --cc net/sched/sch_api.c index a904276b657dc,0f1eab99ff4ed..74c22b4e365e4 --- a/net/sched/sch_api.c +++ b/net/sched/sch_api.c @@@ -795,10 -795,11 +795,12 @@@ static int tc_fill_qdisc(struct sk_buf tcm->tcm_info = refcount_read(&q->refcnt); if (nla_put_string(skb, TCA_KIND, q->ops->id)) goto nla_put_failure; + if (nla_put_u8(skb, TCA_HW_OFFLOAD, !!(q->flags & TCQ_F_OFFLOADED))) + goto nla_put_failure; if (q->ops->dump && q->ops->dump(q, skb) < 0) goto nla_put_failure; - qlen = q->q.qlen; + + qlen = qdisc_qlen_sum(q); stab = rtnl_dereference(q->stab); if (stab && qdisc_dump_stab(skb, stab) < 0)