OSDN Git Service

Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
authorJakub Kicinski <kuba@kernel.org>
Sat, 12 Dec 2020 04:12:36 +0000 (20:12 -0800)
committerJakub Kicinski <kuba@kernel.org>
Sat, 12 Dec 2020 06:29:38 +0000 (22:29 -0800)
xdp_return_frame_bulk() needs to pass a xdp_buff
to __xdp_return().

strlcpy got converted to strscpy but here it makes no
functional difference, so just keep the right code.

Conflicts:
net/netfilter/nf_tables_api.c

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
52 files changed:
1  2 
CREDITS
MAINTAINERS
drivers/net/can/softing/softing_main.c
drivers/net/dsa/ocelot/felix.c
drivers/net/ethernet/freescale/enetc/enetc_hw.h
drivers/net/ethernet/intel/i40e/i40e_txrx.c
drivers/net/ethernet/intel/ice/ice_txrx.c
drivers/net/ethernet/intel/igb/igb_main.c
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
drivers/net/ethernet/marvell/prestera/prestera_main.c
drivers/net/ethernet/mellanox/mlx4/en_netdev.c
drivers/net/ethernet/mellanox/mlx4/en_tx.c
drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
drivers/net/ethernet/mellanox/mlx5/core/Kconfig
drivers/net/ethernet/mscc/ocelot.c
drivers/net/ethernet/netronome/nfp/nfp_net_common.c
drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
drivers/net/ethernet/ti/cpsw_priv.c
drivers/net/geneve.c
drivers/net/netdevsim/netdevsim.h
drivers/net/vrf.c
include/linux/security.h
include/net/xdp.h
include/soc/mscc/ocelot.h
include/uapi/linux/bpf.h
kernel/bpf/helpers.c
kernel/bpf/verifier.c
kernel/trace/bpf_trace.c
mm/slab.h
net/bridge/br_device.c
net/bridge/br_multicast.c
net/bridge/br_private.h
net/bridge/br_vlan.c
net/can/isotp.c
net/core/dev.c
net/core/xdp.c
net/ipv4/tcp_input.c
net/ipv4/tcp_ipv4.c
net/ipv4/tcp_output.c
net/ipv4/udp.c
net/ipv6/tcp_ipv6.c
net/mac80211/iface.c
net/mac80211/util.c
net/netfilter/nf_tables_api.c
net/netfilter/nft_ct.c
net/tipc/node.c
net/wireless/nl80211.c
net/xdp/xsk.c
net/xdp/xsk_buff_pool.c
net/xdp/xsk_queue.h
tools/include/uapi/linux/bpf.h

diff --cc CREDITS
Simple merge
diff --cc MAINTAINERS
Simple merge
Simple merge
Simple merge
@@@ -5170,8 -5163,13 +5193,13 @@@ int stmmac_suspend(struct device *dev
        stmmac_disable_all_queues(priv);
  
        for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++)
 -              del_timer_sync(&priv->tx_queue[chan].txtimer);
 +              hrtimer_cancel(&priv->tx_queue[chan].txtimer);
  
+       if (priv->eee_enabled) {
+               priv->tx_path_in_lpi_mode = false;
+               del_timer_sync(&priv->eee_ctrl_timer);
+       }
        /* Stop TX/RX DMA */
        stmmac_stop_all_dma(priv);
  
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -3977,15 -3897,9 +3977,15 @@@ union bpf_attr 
        FN(seq_printf_btf),             \
        FN(skb_cgroup_classid),         \
        FN(redirect_neigh),             \
-       FN(bpf_per_cpu_ptr),            \
-       FN(bpf_this_cpu_ptr),           \
+       FN(per_cpu_ptr),                \
+       FN(this_cpu_ptr),               \
        FN(redirect_peer),              \
 +      FN(task_storage_get),           \
 +      FN(task_storage_delete),        \
 +      FN(get_current_task_btf),       \
 +      FN(bprm_opts_set),              \
 +      FN(ktime_get_coarse_ns),        \
 +      FN(ima_inode_hash),             \
        /* */
  
  /* integer value in 'imm' field of BPF_CALL instruction selects which helper
Simple merge
Simple merge
Simple merge
diff --cc mm/slab.h
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -266,12 -266,13 +266,14 @@@ static int __vlan_add(struct net_bridge
                }
  
                masterv = br_vlan_get_master(br, v->vid, extack);
-               if (!masterv)
+               if (!masterv) {
+                       err = -ENOMEM;
                        goto out_filt;
+               }
                v->brvlan = masterv;
                if (br_opt_get(br, BROPT_VLAN_STATS_PER_PORT)) {
 -                      v->stats = netdev_alloc_pcpu_stats(struct br_vlan_stats);
 +                      v->stats =
 +                           netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
                        if (!v->stats) {
                                err = -ENOMEM;
                                goto out_filt;
diff --cc net/can/isotp.c
Simple merge
diff --cc net/core/dev.c
Simple merge
diff --cc net/core/xdp.c
@@@ -381,63 -383,9 +384,63 @@@ void xdp_return_frame_rx_napi(struct xd
  }
  EXPORT_SYMBOL_GPL(xdp_return_frame_rx_napi);
  
-               __xdp_return(xdpf->data, &xdpf->mem, false);
 +/* XDP bulk APIs introduce a defer/flush mechanism to return
 + * pages belonging to the same xdp_mem_allocator object
 + * (identified via the mem.id field) in bulk to optimize
 + * I-cache and D-cache.
 + * The bulk queue size is set to 16 to be aligned to how
 + * XDP_REDIRECT bulking works. The bulk is flushed when
 + * it is full or when mem.id changes.
 + * xdp_frame_bulk is usually stored/allocated on the function
 + * call-stack to avoid locking penalties.
 + */
 +void xdp_flush_frame_bulk(struct xdp_frame_bulk *bq)
 +{
 +      struct xdp_mem_allocator *xa = bq->xa;
 +
 +      if (unlikely(!xa || !bq->count))
 +              return;
 +
 +      page_pool_put_page_bulk(xa->page_pool, bq->q, bq->count);
 +      /* bq->xa is not cleared to save lookup, if mem.id same in next bulk */
 +      bq->count = 0;
 +}
 +EXPORT_SYMBOL_GPL(xdp_flush_frame_bulk);
 +
 +/* Must be called with rcu_read_lock held */
 +void xdp_return_frame_bulk(struct xdp_frame *xdpf,
 +                         struct xdp_frame_bulk *bq)
 +{
 +      struct xdp_mem_info *mem = &xdpf->mem;
 +      struct xdp_mem_allocator *xa;
 +
 +      if (mem->type != MEM_TYPE_PAGE_POOL) {
++              __xdp_return(xdpf->data, &xdpf->mem, false, NULL);
 +              return;
 +      }
 +
 +      xa = bq->xa;
 +      if (unlikely(!xa)) {
 +              xa = rhashtable_lookup(mem_id_ht, &mem->id, mem_id_rht_params);
 +              bq->count = 0;
 +              bq->xa = xa;
 +      }
 +
 +      if (bq->count == XDP_BULK_QUEUE_SIZE)
 +              xdp_flush_frame_bulk(bq);
 +
 +      if (unlikely(mem->id != xa->mem.id)) {
 +              xdp_flush_frame_bulk(bq);
 +              bq->xa = rhashtable_lookup(mem_id_ht, &mem->id, mem_id_rht_params);
 +      }
 +
 +      bq->q[bq->count++] = xdpf->data;
 +}
 +EXPORT_SYMBOL_GPL(xdp_return_frame_bulk);
 +
  void xdp_return_buff(struct xdp_buff *xdp)
  {
-       __xdp_return(xdp->data, &xdp->rxq->mem, true);
+       __xdp_return(xdp->data, &xdp->rxq->mem, true, xdp);
  }
  
  /* Only called for MEM_TYPE_PAGE_POOL see xdp.h */
Simple merge
Simple merge
Simple merge
diff --cc net/ipv4/udp.c
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -1723,7 -1722,11 +1723,11 @@@ static struct nft_hook *nft_netdev_hook
                goto err_hook_alloc;
        }
  
 -      nla_strlcpy(ifname, attr, IFNAMSIZ);
 +      nla_strscpy(ifname, attr, IFNAMSIZ);
+       /* nf_tables_netdev_event() is called under rtnl_mutex, this is
+        * indirectly serializing all the other holders of the commit_mutex with
+        * the rtnl_mutex.
+        */
        dev = __dev_get_by_name(net, ifname);
        if (!dev) {
                err = -ENOENT;
Simple merge
diff --cc net/tipc/node.c
Simple merge
Simple merge
diff --cc net/xdp/xsk.c
Simple merge
Simple merge
@@@ -307,9 -264,15 +307,15 @@@ static inline bool xskq_cons_is_full(st
                q->nentries;
  }
  
+ static inline u32 xskq_cons_present_entries(struct xsk_queue *q)
+ {
+       /* No barriers needed since data is not accessed */
+       return READ_ONCE(q->ring->producer) - READ_ONCE(q->ring->consumer);
+ }
  /* Functions for producers */
  
 -static inline bool xskq_prod_is_full(struct xsk_queue *q)
 +static inline u32 xskq_prod_nb_free(struct xsk_queue *q, u32 max)
  {
        u32 free_entries = q->nentries - (q->cached_prod - q->cached_cons);
  
@@@ -3977,15 -3897,9 +3977,15 @@@ union bpf_attr 
        FN(seq_printf_btf),             \
        FN(skb_cgroup_classid),         \
        FN(redirect_neigh),             \
-       FN(bpf_per_cpu_ptr),            \
-       FN(bpf_this_cpu_ptr),           \
+       FN(per_cpu_ptr),                \
+       FN(this_cpu_ptr),               \
        FN(redirect_peer),              \
 +      FN(task_storage_get),           \
 +      FN(task_storage_delete),        \
 +      FN(get_current_task_btf),       \
 +      FN(bprm_opts_set),              \
 +      FN(ktime_get_coarse_ns),        \
 +      FN(ima_inode_hash),             \
        /* */
  
  /* integer value in 'imm' field of BPF_CALL instruction selects which helper