OSDN Git Service

Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
authorDavid S. Miller <davem@davemloft.net>
Wed, 17 Jan 2018 05:00:25 +0000 (00:00 -0500)
committerDavid S. Miller <davem@davemloft.net>
Wed, 17 Jan 2018 05:10:42 +0000 (00:10 -0500)
Overlapping changes all over.

The mini-qdisc bits were a little bit tricky, however.

Signed-off-by: David S. Miller <davem@davemloft.net>
38 files changed:
1  2 
MAINTAINERS
arch/x86/Kconfig
arch/x86/lib/Makefile
drivers/net/ethernet/ibm/ibmvnic.c
drivers/net/ethernet/mellanox/mlx5/core/en.h
drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
drivers/net/ethernet/mellanox/mlx5/core/en_main.c
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c
drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c
drivers/net/ethernet/qlogic/qed/qed_spq.c
drivers/net/ethernet/renesas/sh_eth.c
drivers/net/wireless/mac80211_hwsim.c
include/linux/mlx5/mlx5_ifc.h
include/linux/ptr_ring.h
include/net/cfg80211.h
include/net/sch_generic.h
kernel/bpf/verifier.c
kernel/trace/Kconfig
net/core/neighbour.c
net/ipv4/arp.c
net/ipv4/esp4.c
net/ipv4/esp4_offload.c
net/ipv4/route.c
net/ipv6/esp6.c
net/ipv6/esp6_offload.c
net/ipv6/ip6_output.c
net/netlink/af_netlink.c
net/sched/sch_api.c
net/sched/sch_generic.c
net/sched/sch_ingress.c
net/sctp/outqueue.c
net/sctp/socket.c
net/wireless/nl80211.c
net/xfrm/xfrm_input.c
net/xfrm/xfrm_policy.c
net/xfrm/xfrm_state.c
tools/testing/selftests/bpf/test_verifier.c

diff --cc MAINTAINERS
Simple merge
Simple merge
@@@ -26,7 -26,7 +26,8 @@@ lib-y += memcpy_$(BITS).
  lib-$(CONFIG_RWSEM_XCHGADD_ALGORITHM) += rwsem.o
  lib-$(CONFIG_INSTRUCTION_DECODER) += insn.o inat.o insn-eval.o
  lib-$(CONFIG_RANDOMIZE_BASE) += kaslr.o
 +lib-$(CONFIG_FUNCTION_ERROR_INJECTION)        += error-inject.o
+ lib-$(CONFIG_RETPOLINE) += retpoline.o
  
  obj-y += msr.o msr-reg.o msr-reg-export.o hweight.o
  
Simple merge
Simple merge
Simple merge
@@@ -1035,10 -1027,9 +1035,12 @@@ struct mlx5_ifc_cmd_hca_cap_bits 
        u8         log_max_wq_sz[0x5];
  
        u8         nic_vport_change_event[0x1];
 -      u8         reserved_at_3e3[0x8];
 +      u8         disable_local_lb[0x1];
 +      u8         reserved_at_3e2[0x1];
+       u8         disable_local_lb_uc[0x1];
+       u8         disable_local_lb_mc[0x1];
 +      u8         log_min_hairpin_wq_data_sz[0x5];
 +      u8         reserved_at_3e8[0x3];
        u8         log_max_vlan_list[0x5];
        u8         reserved_at_3f0[0x3];
        u8         log_max_current_mc_list[0x5];
Simple merge
Simple merge
@@@ -471,11 -444,10 +471,12 @@@ void qdisc_destroy(struct Qdisc *qdisc)
  void qdisc_tree_reduce_backlog(struct Qdisc *qdisc, unsigned int n,
                               unsigned int len);
  struct Qdisc *qdisc_alloc(struct netdev_queue *dev_queue,
 -                        const struct Qdisc_ops *ops);
 +                        const struct Qdisc_ops *ops,
 +                        struct netlink_ext_ack *extack);
+ void qdisc_free(struct Qdisc *qdisc);
  struct Qdisc *qdisc_create_dflt(struct netdev_queue *dev_queue,
 -                              const struct Qdisc_ops *ops, u32 parentid);
 +                              const struct Qdisc_ops *ops, u32 parentid,
 +                              struct netlink_ext_ack *extack);
  void __qdisc_calculate_pkt_len(struct sk_buff *skb,
                               const struct qdisc_size_table *stab);
  int skb_do_redirect(struct sk_buff *);
Simple merge
Simple merge
Simple merge
diff --cc net/ipv4/arp.c
Simple merge
diff --cc net/ipv4/esp4.c
Simple merge
Simple merge
Simple merge
diff --cc net/ipv6/esp6.c
Simple merge
Simple merge
@@@ -1215,16 -1206,18 +1215,18 @@@ static int ip6_setup_cork(struct sock *
        v6_cork->tclass = ipc6->tclass;
        if (rt->dst.flags & DST_XFRM_TUNNEL)
                mtu = np->pmtudisc >= IPV6_PMTUDISC_PROBE ?
-                     rt->dst.dev->mtu : dst_mtu(&rt->dst);
+                     READ_ONCE(rt->dst.dev->mtu) : dst_mtu(&rt->dst);
        else
                mtu = np->pmtudisc >= IPV6_PMTUDISC_PROBE ?
-                     rt->dst.dev->mtu : dst_mtu(xfrm_dst_path(&rt->dst));
 -                    READ_ONCE(rt->dst.dev->mtu) : dst_mtu(rt->dst.path);
++                      READ_ONCE(rt->dst.dev->mtu) : dst_mtu(xfrm_dst_path(&rt->dst));
        if (np->frag_size < mtu) {
                if (np->frag_size)
                        mtu = np->frag_size;
        }
+       if (mtu < IPV6_MIN_MTU)
+               return -EINVAL;
        cork->base.fragsize = mtu;
 -      if (dst_allfrag(rt->dst.path))
 +      if (dst_allfrag(xfrm_dst_path(&rt->dst)))
                cork->base.flags |= IPCORK_ALLFRAG;
        cork->base.length = 0;
  
Simple merge
@@@ -1088,64 -1062,43 +1088,53 @@@ static struct Qdisc *qdisc_create(struc
                netdev_info(dev, "Caught tx_queue_len zero misconfig\n");
        }
  
 -      if (!ops->init || (err = ops->init(sch, tca[TCA_OPTIONS])) == 0) {
 -              if (tca[TCA_STAB]) {
 -                      stab = qdisc_get_stab(tca[TCA_STAB]);
 -                      if (IS_ERR(stab)) {
 -                              err = PTR_ERR(stab);
 -                              goto err_out4;
 -                      }
 -                      rcu_assign_pointer(sch->stab, stab);
 -              }
 -              if (tca[TCA_RATE]) {
 -                      seqcount_t *running;
 -
 -                      err = -EOPNOTSUPP;
 -                      if (sch->flags & TCQ_F_MQROOT)
 -                              goto err_out4;
 -
 -                      if ((sch->parent != TC_H_ROOT) &&
 -                          !(sch->flags & TCQ_F_INGRESS) &&
 -                          (!p || !(p->flags & TCQ_F_MQROOT)))
 -                              running = qdisc_root_sleeping_running(sch);
 -                      else
 -                              running = &sch->running;
 -
 -                      err = gen_new_estimator(&sch->bstats,
 -                                              sch->cpu_bstats,
 -                                              &sch->rate_est,
 -                                              NULL,
 -                                              running,
 -                                              tca[TCA_RATE]);
 -                      if (err)
 -                              goto err_out4;
 +      if (ops->init) {
 +              err = ops->init(sch, tca[TCA_OPTIONS], extack);
 +              if (err != 0)
 +                      goto err_out5;
 +      }
 +
-       if (qdisc_is_percpu_stats(sch)) {
-               sch->cpu_bstats =
-                       netdev_alloc_pcpu_stats(struct gnet_stats_basic_cpu);
-               if (!sch->cpu_bstats)
-                       goto err_out4;
-               sch->cpu_qstats = alloc_percpu(struct gnet_stats_queue);
-               if (!sch->cpu_qstats)
-                       goto err_out4;
-       }
 +      if (tca[TCA_STAB]) {
 +              stab = qdisc_get_stab(tca[TCA_STAB], extack);
 +              if (IS_ERR(stab)) {
 +                      err = PTR_ERR(stab);
 +                      goto err_out4;
                }
 +              rcu_assign_pointer(sch->stab, stab);
 +      }
 +      if (tca[TCA_RATE]) {
 +              seqcount_t *running;
  
 -              qdisc_hash_add(sch, false);
 +              err = -EOPNOTSUPP;
 +              if (sch->flags & TCQ_F_MQROOT) {
 +                      NL_SET_ERR_MSG(extack, "Cannot attach rate estimator to a multi-queue root qdisc");
 +                      goto err_out4;
 +              }
  
 -              return sch;
 +              if (sch->parent != TC_H_ROOT &&
 +                  !(sch->flags & TCQ_F_INGRESS) &&
 +                  (!p || !(p->flags & TCQ_F_MQROOT)))
 +                      running = qdisc_root_sleeping_running(sch);
 +              else
 +                      running = &sch->running;
 +
 +              err = gen_new_estimator(&sch->bstats,
 +                                      sch->cpu_bstats,
 +                                      &sch->rate_est,
 +                                      NULL,
 +                                      running,
 +                                      tca[TCA_RATE]);
 +              if (err) {
 +                      NL_SET_ERR_MSG(extack, "Failed to generate new estimator");
 +                      goto err_out4;
 +              }
        }
 +
 +      qdisc_hash_add(sch, false);
 +
 +      return sch;
 +
 +err_out5:
        /* ops->init() failed, we call ->destroy() like qdisc_create_dflt() */
        if (ops->destroy)
                ops->destroy(sch);
Simple merge
@@@ -78,13 -75,7 +77,7 @@@ static int ingress_init(struct Qdisc *s
        q->block_info.chain_head_change = clsact_chain_head_change;
        q->block_info.chain_head_change_priv = &q->miniqp;
  
-       err = tcf_block_get_ext(&q->block, sch, &q->block_info, extack);
-       if (err)
-               return err;
-       sch->flags |= TCQ_F_CPUSTATS;
-       return 0;
 -      return tcf_block_get_ext(&q->block, sch, &q->block_info);
++      return tcf_block_get_ext(&q->block, sch, &q->block_info, extack);
  }
  
  static void ingress_destroy(struct Qdisc *sch)
@@@ -197,14 -186,7 +191,7 @@@ static int clsact_init(struct Qdisc *sc
        q->egress_block_info.chain_head_change = clsact_chain_head_change;
        q->egress_block_info.chain_head_change_priv = &q->miniqp_egress;
  
-       err = tcf_block_get_ext(&q->egress_block, sch, &q->egress_block_info,
-                               extack);
-       if (err)
-               return err;
-       sch->flags |= TCQ_F_CPUSTATS;
-       return 0;
 -      return tcf_block_get_ext(&q->egress_block, sch, &q->egress_block_info);
++      return tcf_block_get_ext(&q->egress_block, sch, &q->egress_block_info, extack);
  }
  
  static void clsact_destroy(struct Qdisc *sch)
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge