Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 3 Apr 2018 21:04:18 +0000 (14:04 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 3 Apr 2018 21:04:18 +0000 (14:04 -0700)
Pull networking updates from David Miller:

 1) Support offloading wireless authentication to userspace via
    NL80211_CMD_EXTERNAL_AUTH, from Srinivas Dasari.

 2) A lot of work on network namespace setup/teardown from Kirill Tkhai.
    Setup and cleanup of namespaces now all run asynchronously and thus
    performance is significantly increased.

 3) Add rx/tx timestamping support to mv88e6xxx driver, from Brandon
    Streiff.

 4) Support zerocopy on RDS sockets, from Sowmini Varadhan.

 5) Use denser instruction encoding in x86 eBPF JIT, from Daniel
    Borkmann.

 6) Support hw offload of vlan filtering in mvpp2 dreiver, from Maxime
    Chevallier.

 7) Support grafting of child qdiscs in mlxsw driver, from Nogah
    Frankel.

 8) Add packet forwarding tests to selftests, from Ido Schimmel.

 9) Deal with sub-optimal GSO packets better in BBR congestion control,
    from Eric Dumazet.

10) Support 5-tuple hashing in ipv6 multipath routing, from David Ahern.

11) Add path MTU tests to selftests, from Stefano Brivio.

12) Various bits of IPSEC offloading support for mlx5, from Aviad
    Yehezkel, Yossi Kuperman, and Saeed Mahameed.

13) Support RSS spreading on ntuple filters in SFC driver, from Edward
    Cree.

14) Lots of sockmap work from John Fastabend. Applications can use eBPF
    to filter sendmsg and sendpage operations.

15) In-kernel receive TLS support, from Dave Watson.

16) Add XDP support to ixgbevf, this is significant because it should
    allow optimized XDP usage in various cloud environments. From Tony
    Nguyen.

17) Add new Intel E800 series "ice" ethernet driver, from Anirudh
    Venkataramanan et al.

18) IP fragmentation match offload support in nfp driver, from Pieter
    Jansen van Vuuren.

19) Support XDP redirect in i40e driver, from Björn Töpel.

20) Add BPF_RAW_TRACEPOINT program type for accessing the arguments of
    tracepoints in their raw form, from Alexei Starovoitov.

21) Lots of striding RQ improvements to mlx5 driver with many
    performance improvements, from Tariq Toukan.

22) Use rhashtable for inet frag reassembly, from Eric Dumazet.

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next: (1678 commits)
  net: mvneta: improve suspend/resume
  net: mvneta: split rxq/txq init and txq deinit into SW and HW parts
  ipv6: frags: fix /proc/sys/net/ipv6/ip6frag_low_thresh
  net: bgmac: Fix endian access in bgmac_dma_tx_ring_free()
  net: bgmac: Correctly annotate register space
  route: check sysctl_fib_multipath_use_neigh earlier than hash
  fix typo in command value in drivers/net/phy/mdio-bitbang.
  sky2: Increase D3 delay to sky2 stops working after suspend
  net/mlx5e: Set EQE based as default TX interrupt moderation mode
  ibmvnic: Disable irqs before exiting reset from closed state
  net: sched: do not emit messages while holding spinlock
  vlan: also check phy_driver ts_info for vlan's real device
  Bluetooth: Mark expected switch fall-throughs
  Bluetooth: Set HCI_QUIRK_SIMULTANEOUS_DISCOVERY for BTUSB_QCA_ROME
  Bluetooth: btrsi: remove unused including <linux/version.h>
  Bluetooth: hci_bcm: Remove DMI quirk for the MINIX Z83-4
  sh_eth: kill useless check in __sh_eth_get_regs()
  sh_eth: add sh_eth_cpu_data::no_xdfar flag
  ipv6: factorize sk_wmem_alloc updates done by __ip6_append_data()
  ipv4: factorize sk_wmem_alloc updates done by __ip_append_data()
  ...

13 files changed:
1  2 
MAINTAINERS
arch/m68k/mac/config.c
drivers/net/ethernet/8390/ne.c
drivers/net/ethernet/Kconfig
drivers/net/ethernet/Makefile
drivers/net/wireless/cisco/Kconfig
fs/afs/rxrpc.c
include/linux/socket.h
include/linux/trace_events.h
net/rxrpc/call_accept.c
net/rxrpc/call_object.c
net/rxrpc/conn_object.c
net/socket.c

diff --cc MAINTAINERS
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc fs/afs/rxrpc.c
index e613dd754383ee8e3e48e956dda1c9b2a0222d42,b819900916e6a71000e151e6656a06dc7af1c350..f7ae54b6a393e205765ab1bf1b94aa51f2928f54
@@@ -169,13 -170,14 +170,14 @@@ void afs_put_call(struct afs_call *call
                afs_put_server(call->net, call->cm_server);
                afs_put_cb_interest(call->net, call->cbi);
                kfree(call->request);
-               kfree(call);
  
-               o = atomic_dec_return(&net->nr_outstanding_calls);
                trace_afs_call(call, afs_call_trace_free, 0, o,
                               __builtin_return_address(0));
+               kfree(call);
+               o = atomic_dec_return(&net->nr_outstanding_calls);
                if (o == 0)
 -                      wake_up_atomic_t(&net->nr_outstanding_calls);
 +                      wake_up_var(&net->nr_outstanding_calls);
        }
  }
  
index e2b6bd4fe977a069278bc42a95080120cfa97087,60e01482a9c4a290f9a1265b2e0681d03911511f..ea50f4a6581622be6d6246b0d604fdb911a6e441
@@@ -356,30 -353,7 +357,30 @@@ extern long __sys_sendmsg(int fd, struc
  extern int __sys_recvmmsg(int fd, struct mmsghdr __user *mmsg, unsigned int vlen,
                          unsigned int flags, struct timespec *timeout);
  extern int __sys_sendmmsg(int fd, struct mmsghdr __user *mmsg,
 -                        unsigned int vlen, unsigned int flags);
 +                        unsigned int vlen, unsigned int flags,
 +                        bool forbid_cmsg_compat);
 +
 +/* helpers which do the actual work for syscalls */
 +extern int __sys_recvfrom(int fd, void __user *ubuf, size_t size,
 +                        unsigned int flags, struct sockaddr __user *addr,
 +                        int __user *addr_len);
 +extern int __sys_sendto(int fd, void __user *buff, size_t len,
 +                      unsigned int flags, struct sockaddr __user *addr,
 +                      int addr_len);
 +extern int __sys_accept4(int fd, struct sockaddr __user *upeer_sockaddr,
 +                       int __user *upeer_addrlen, int flags);
 +extern int __sys_socket(int family, int type, int protocol);
 +extern int __sys_bind(int fd, struct sockaddr __user *umyaddr, int addrlen);
 +extern int __sys_connect(int fd, struct sockaddr __user *uservaddr,
 +                       int addrlen);
 +extern int __sys_listen(int fd, int backlog);
 +extern int __sys_getsockname(int fd, struct sockaddr __user *usockaddr,
 +                           int __user *usockaddr_len);
 +extern int __sys_getpeername(int fd, struct sockaddr __user *usockaddr,
 +                           int __user *usockaddr_len);
 +extern int __sys_socketpair(int family, int type, int protocol,
 +                          int __user *usockvec);
 +extern int __sys_shutdown(int fd, int how);
  
+ extern struct ns_common *get_net_ns(struct ns_common *ns);
  #endif /* _LINUX_SOCKET_H */
Simple merge
index 3028298ca56134e86b1ef60c9987b37490e12f19,f67017dcb25e00cc9e595d3e0c1824d0b15d63ae..a9a9be5519b9abfbc6d627279b4e64a35e4b05bd
@@@ -216,6 -219,8 +219,8 @@@ void rxrpc_discard_prealloc(struct rxrp
                list_del(&conn->proc_link);
                write_unlock(&rxnet->conn_lock);
                kfree(conn);
 -                      wake_up_atomic_t(&rxnet->nr_conns);
+               if (atomic_dec_and_test(&rxnet->nr_conns))
++                      wake_up_var(&rxnet->nr_conns);
                tail = (tail + 1) & (size - 1);
        }
  
index 0b2db38dd32d4c2418827236faf5219bc70cc97f,f721c2b7e234dfd3affeac6e50a7f8d8fdcbf006..f6734d8cb01a711317854a17c981b2506625846b
@@@ -648,6 -657,8 +657,8 @@@ static void rxrpc_rcu_destroy_call(stru
        kfree(call->rxtx_buffer);
        kfree(call->rxtx_annotations);
        kmem_cache_free(rxrpc_call_jar, call);
 -              wake_up_atomic_t(&rxnet->nr_calls);
+       if (atomic_dec_and_test(&rxnet->nr_calls))
++              wake_up_var(&rxnet->nr_calls);
  }
  
  /*
@@@ -712,4 -723,7 +723,7 @@@ void rxrpc_destroy_all_calls(struct rxr
        }
  
        write_unlock(&rxnet->call_lock);
 -      wait_on_atomic_t(&rxnet->nr_calls, atomic_t_wait, TASK_UNINTERRUPTIBLE);
+       atomic_dec(&rxnet->nr_calls);
++      wait_var_event(&rxnet->nr_calls, !atomic_read(&rxnet->nr_calls));
  }
index ccbac190add1fa07bb35fe399572f2e7d3fdb015,0950ee3d26f56918b8dbb1ef3b1925c8755776bf..4c77a78a252af9a19d4801d3904847475a4d5341
@@@ -365,6 -365,9 +365,9 @@@ static void rxrpc_destroy_connection(st
        key_put(conn->params.key);
        key_put(conn->server_key);
        rxrpc_put_peer(conn->params.peer);
 -              wake_up_atomic_t(&conn->params.local->rxnet->nr_conns);
+       if (atomic_dec_and_test(&conn->params.local->rxnet->nr_conns))
++              wake_up_var(&conn->params.local->rxnet->nr_conns);
        rxrpc_put_local(conn->params.local);
  
        kfree(conn);
@@@ -475,5 -479,9 +479,9 @@@ void rxrpc_destroy_all_connections(stru
  
        ASSERT(list_empty(&rxnet->conn_proc_list));
  
 -      wait_on_atomic_t(&rxnet->nr_conns, atomic_t_wait, TASK_UNINTERRUPTIBLE);
+       /* We need to wait for the connections to be destroyed by RCU as they
+        * pin things that we still need to get rid of.
+        */
++      wait_var_event(&rxnet->nr_conns, !atomic_read(&rxnet->nr_conns));
        _leave("");
  }
diff --cc net/socket.c
Simple merge