Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
authorDavid S. Miller <davem@davemloft.net>
Sat, 2 Nov 2019 20:12:51 +0000 (13:12 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sat, 2 Nov 2019 20:54:56 +0000 (13:54 -0700)
The only slightly tricky merge conflict was the netdevsim because the
mutex locking fix overlapped a lot of driver reload reorganization.

The rest were (relatively) trivial in nature.

Signed-off-by: David S. Miller <davem@davemloft.net>
50 files changed:
1  2 
MAINTAINERS
drivers/net/bonding/bond_main.c
drivers/net/dsa/bcm_sf2.c
drivers/net/ethernet/broadcom/bnxt/bnxt.c
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
drivers/net/ethernet/faraday/ftgmac100.c
drivers/net/ethernet/freescale/fec_main.c
drivers/net/ethernet/intel/igb/igb_main.c
drivers/net/ethernet/intel/igc/igc_main.c
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
drivers/net/ethernet/mellanox/mlx5/core/health.c
drivers/net/ethernet/mellanox/mlxsw/core.c
drivers/net/ethernet/pensando/ionic/ionic_lif.c
drivers/net/ethernet/pensando/ionic/ionic_main.c
drivers/net/ethernet/realtek/r8169_main.c
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
drivers/net/ipvlan/ipvlan_main.c
drivers/net/netdevsim/dev.c
drivers/net/phy/phylink.c
drivers/net/team/team.c
drivers/net/usb/lan78xx.c
drivers/net/usb/r8152.c
drivers/net/vxlan.c
drivers/net/wireless/intel/iwlwifi/mvm/sta.c
include/linux/filter.h
include/linux/netdevice.h
include/linux/skbuff.h
include/net/flow_dissector.h
include/net/ip_vs.h
include/net/net_namespace.h
include/net/sock.h
kernel/bpf/core.c
kernel/bpf/syscall.c
net/core/dev.c
net/core/flow_dissector.c
net/core/rtnetlink.c
net/core/sock.c
net/dsa/slave.c
net/ipv4/tcp.c
net/ipv4/tcp_ipv4.c
net/netfilter/ipvs/ip_vs_ctl.c
net/netfilter/nf_tables_offload.c
net/sched/sch_generic.c
net/smc/af_smc.c
net/smc/smc_core.c
net/smc/smc_pnet.c
net/tipc/socket.c
net/unix/af_unix.c
net/wireless/nl80211.c
tools/testing/selftests/bpf/test_offload.py

diff --cc MAINTAINERS
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -619,139 -657,8 +619,141 @@@ static const struct devlink_ops nsim_de
  #define NSIM_DEV_MAX_MACS_DEFAULT 32
  #define NSIM_DEV_TEST1_DEFAULT true
  
 -static struct nsim_dev *
 -nsim_dev_create(struct nsim_bus_dev *nsim_bus_dev, unsigned int port_count)
 +static int __nsim_dev_port_add(struct nsim_dev *nsim_dev,
 +                             unsigned int port_index)
 +{
 +      struct nsim_dev_port *nsim_dev_port;
 +      struct devlink_port *devlink_port;
 +      int err;
 +
 +      nsim_dev_port = kzalloc(sizeof(*nsim_dev_port), GFP_KERNEL);
 +      if (!nsim_dev_port)
 +              return -ENOMEM;
 +      nsim_dev_port->port_index = port_index;
 +
 +      devlink_port = &nsim_dev_port->devlink_port;
 +      devlink_port_attrs_set(devlink_port, DEVLINK_PORT_FLAVOUR_PHYSICAL,
 +                             port_index + 1, 0, 0,
 +                             nsim_dev->switch_id.id,
 +                             nsim_dev->switch_id.id_len);
 +      err = devlink_port_register(priv_to_devlink(nsim_dev), devlink_port,
 +                                  port_index);
 +      if (err)
 +              goto err_port_free;
 +
 +      err = nsim_dev_port_debugfs_init(nsim_dev, nsim_dev_port);
 +      if (err)
 +              goto err_dl_port_unregister;
 +
 +      nsim_dev_port->ns = nsim_create(nsim_dev, nsim_dev_port);
 +      if (IS_ERR(nsim_dev_port->ns)) {
 +              err = PTR_ERR(nsim_dev_port->ns);
 +              goto err_port_debugfs_exit;
 +      }
 +
 +      devlink_port_type_eth_set(devlink_port, nsim_dev_port->ns->netdev);
 +      list_add(&nsim_dev_port->list, &nsim_dev->port_list);
 +
 +      return 0;
 +
 +err_port_debugfs_exit:
 +      nsim_dev_port_debugfs_exit(nsim_dev_port);
 +err_dl_port_unregister:
 +      devlink_port_unregister(devlink_port);
 +err_port_free:
 +      kfree(nsim_dev_port);
 +      return err;
 +}
 +
 +static void __nsim_dev_port_del(struct nsim_dev_port *nsim_dev_port)
 +{
 +      struct devlink_port *devlink_port = &nsim_dev_port->devlink_port;
 +
 +      list_del(&nsim_dev_port->list);
 +      devlink_port_type_clear(devlink_port);
 +      nsim_destroy(nsim_dev_port->ns);
 +      nsim_dev_port_debugfs_exit(nsim_dev_port);
 +      devlink_port_unregister(devlink_port);
 +      kfree(nsim_dev_port);
 +}
 +
 +static void nsim_dev_port_del_all(struct nsim_dev *nsim_dev)
 +{
 +      struct nsim_dev_port *nsim_dev_port, *tmp;
 +
++      mutex_lock(&nsim_dev->port_list_lock);
 +      list_for_each_entry_safe(nsim_dev_port, tmp,
 +                               &nsim_dev->port_list, list)
 +              __nsim_dev_port_del(nsim_dev_port);
++      mutex_unlock(&nsim_dev->port_list_lock);
 +}
 +
 +static int nsim_dev_port_add_all(struct nsim_dev *nsim_dev,
 +                               unsigned int port_count)
 +{
 +      int i, err;
 +
 +      for (i = 0; i < port_count; i++) {
 +              err = __nsim_dev_port_add(nsim_dev, i);
 +              if (err)
 +                      goto err_port_del_all;
 +      }
 +      return 0;
 +
 +err_port_del_all:
 +      nsim_dev_port_del_all(nsim_dev);
 +      return err;
 +}
 +
 +static int nsim_dev_reload_create(struct nsim_dev *nsim_dev,
 +                                struct netlink_ext_ack *extack)
 +{
 +      struct nsim_bus_dev *nsim_bus_dev = nsim_dev->nsim_bus_dev;
 +      struct devlink *devlink;
 +      int err;
 +
 +      devlink = priv_to_devlink(nsim_dev);
 +      nsim_dev = devlink_priv(devlink);
 +      INIT_LIST_HEAD(&nsim_dev->port_list);
 +      mutex_init(&nsim_dev->port_list_lock);
 +      nsim_dev->fw_update_status = true;
 +
 +      nsim_dev->fib_data = nsim_fib_create(devlink, extack);
 +      if (IS_ERR(nsim_dev->fib_data))
 +              return PTR_ERR(nsim_dev->fib_data);
 +
 +      nsim_devlink_param_load_driverinit_values(devlink);
 +
 +      err = nsim_dev_dummy_region_init(nsim_dev, devlink);
 +      if (err)
 +              goto err_fib_destroy;
 +
 +      err = nsim_dev_traps_init(devlink);
 +      if (err)
 +              goto err_dummy_region_exit;
 +
 +      err = nsim_dev_health_init(nsim_dev, devlink);
 +      if (err)
 +              goto err_traps_exit;
 +
 +      err = nsim_dev_port_add_all(nsim_dev, nsim_bus_dev->port_count);
 +      if (err)
 +              goto err_health_exit;
 +
 +      return 0;
 +
 +err_health_exit:
 +      nsim_dev_health_exit(nsim_dev);
 +err_traps_exit:
 +      nsim_dev_traps_exit(devlink);
 +err_dummy_region_exit:
 +      nsim_dev_dummy_region_exit(nsim_dev);
 +err_fib_destroy:
 +      nsim_fib_destroy(devlink, nsim_dev->fib_data);
 +      return err;
 +}
 +
 +static struct nsim_dev *nsim_dev_create(struct nsim_bus_dev *nsim_bus_dev)
  {
        struct nsim_dev *nsim_dev;
        struct devlink *devlink;
@@@ -874,8 -816,10 +876,10 @@@ static void nsim_dev_destroy(struct nsi
  int nsim_dev_probe(struct nsim_bus_dev *nsim_bus_dev)
  {
        struct nsim_dev *nsim_dev;
+       int i;
+       int err;
  
 -      nsim_dev = nsim_dev_create(nsim_bus_dev, nsim_bus_dev->port_count);
 +      nsim_dev = nsim_dev_create(nsim_bus_dev);
        if (IS_ERR(nsim_dev))
                return PTR_ERR(nsim_dev);
        dev_set_drvdata(&nsim_bus_dev->dev, nsim_dev);
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -4,10 -4,9 +4,11 @@@
  
  #include <linux/types.h>
  #include <linux/in6.h>
+ #include <linux/siphash.h>
  #include <uapi/linux/if_ether.h>
  
 +struct sk_buff;
 +
  /**
   * struct flow_dissector_key_control:
   * @thoff: Transport header offset
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc net/core/dev.c
Simple merge
@@@ -1449,12 -1365,8 +1441,8 @@@ static const void *flow_keys_hash_start
  static inline size_t flow_keys_hash_length(const struct flow_keys *flow)
  {
        size_t diff = FLOW_KEYS_HASH_OFFSET + sizeof(flow->addrs);
 -      BUILD_BUG_ON(offsetof(typeof(*flow), addrs) !=
 -                   sizeof(*flow) - sizeof(flow->addrs));
++
 +      BUILD_BUG_ON((sizeof(*flow) - FLOW_KEYS_HASH_OFFSET) % sizeof(u32));
-       /* flow.addrs MUST be the last member in struct flow_keys because
-        * different L3 protocols have different address length
-        */
-       BUILD_BUG_ON(offsetof(typeof(*flow), addrs) !=
-                    sizeof(*flow) - sizeof(flow->addrs));
  
        switch (flow->control.addr_type) {
        case FLOW_DISSECTOR_KEY_IPV4_ADDRS:
Simple merge
diff --cc net/core/sock.c
Simple merge
diff --cc net/dsa/slave.c
Simple merge
diff --cc net/ipv4/tcp.c
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -311,8 -312,12 +312,12 @@@ class DebugfsDir
          for f in out.split():
              if f == "ports":
                  continue
              p = os.path.join(path, f)
 -            if os.path.isfile(p):
+             if not os.stat(p).st_mode & stat.S_IRUSR:
+                 continue
 +            if os.path.isfile(p) and os.access(p, os.R_OK):
                  _, out = cmd('cat %s/%s' % (path, f))
                  dfs[f] = out.strip()
              elif os.path.isdir(p):