Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
authorJakub Kicinski <kuba@kernel.org>
Tue, 29 Jun 2021 22:45:27 +0000 (15:45 -0700)
committerJakub Kicinski <kuba@kernel.org>
Tue, 29 Jun 2021 22:45:27 +0000 (15:45 -0700)
Trivial conflict in net/netfilter/nf_tables_api.c.

Duplicate fix in tools/testing/selftests/net/devlink_port_split.py
- take the net-next version.

skmsg, and L4 bpf - keep the bpf code but remove the flags
and err params.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
48 files changed:
1  2 
MAINTAINERS
drivers/atm/nicstar.c
drivers/net/bonding/bond_main.c
drivers/net/dsa/sja1105/sja1105_main.c
drivers/net/ethernet/google/gve/gve_main.c
drivers/net/ethernet/ibm/ibmvnic.c
drivers/net/ethernet/intel/e1000e/netdev.c
drivers/net/ethernet/intel/i40e/i40e_main.c
drivers/net/ethernet/microsoft/mana/mana_en.c
drivers/net/ethernet/sfc/ef10.c
drivers/net/phy/at803x.c
drivers/net/vrf.c
include/linux/netdevice.h
include/linux/skmsg.h
include/net/sch_generic.h
include/net/sctp/structs.h
include/net/xfrm.h
kernel/bpf/devmap.c
kernel/bpf/verifier.c
net/can/bcm.c
net/can/isotp.c
net/can/j1939/socket.c
net/core/dev.c
net/ipv4/esp4.c
net/ipv4/fib_frontend.c
net/ipv4/route.c
net/ipv4/tcp_bpf.c
net/ipv4/udp.c
net/ipv4/udp_bpf.c
net/ipv6/esp6.c
net/ipv6/ip6_tunnel.c
net/mptcp/options.c
net/mptcp/protocol.c
net/mptcp/protocol.h
net/mptcp/subflow.c
net/netfilter/nf_tables_api.c
net/netfilter/nft_exthdr.c
net/netfilter/nft_tproxy.c
net/sctp/input.c
net/sctp/ipv6.c
net/sctp/protocol.c
net/sctp/sm_make_chunk.c
net/tls/tls_sw.c
net/vmw_vsock/af_vsock.c
net/xfrm/xfrm_output.c
net/xfrm/xfrm_policy.c
net/xfrm/xfrm_state.c
tools/testing/selftests/bpf/prog_tests/sockmap_listen.c

diff --cc MAINTAINERS
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -171,8 -161,14 +171,14 @@@ static inline bool qdisc_run_begin(stru
  {
        if (qdisc->flags & TCQ_F_NOLOCK) {
                if (spin_trylock(&qdisc->seqlock))
 -                      goto nolock_empty;
 +                      return true;
  
+               /* Paired with smp_mb__after_atomic() to make sure
+                * STATE_MISSED checking is synchronized with clearing
+                * in pfifo_fast_dequeue().
+                */
+               smp_mb__before_atomic();
                /* If the MISSED flag is set, it means other thread has
                 * set the MISSED flag before second spin_trylock(), so
                 * we can return false here to avoid multi cpus doing
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc net/can/bcm.c
Simple merge
diff --cc net/can/isotp.c
Simple merge
Simple merge
diff --cc net/core/dev.c
Simple merge
diff --cc net/ipv4/esp4.c
Simple merge
Simple merge
Simple merge
@@@ -163,6 -163,28 +163,28 @@@ static bool tcp_bpf_stream_read(const s
        return !empty;
  }
  
 -static int tcp_msg_wait_data(struct sock *sk, struct sk_psock *psock, int flags,
 -                           long timeo, int *err)
++static int tcp_msg_wait_data(struct sock *sk, struct sk_psock *psock,
++                           long timeo)
+ {
+       DEFINE_WAIT_FUNC(wait, woken_wake_function);
+       int ret = 0;
+       if (sk->sk_shutdown & RCV_SHUTDOWN)
+               return 1;
+       if (!timeo)
+               return ret;
+       add_wait_queue(sk_sleep(sk), &wait);
+       sk_set_bit(SOCKWQ_ASYNC_WAITDATA, sk);
+       ret = sk_wait_event(sk, &timeo,
+                           !list_empty(&psock->ingress_msg) ||
+                           !skb_queue_empty(&sk->sk_receive_queue), &wait);
+       sk_clear_bit(SOCKWQ_ASYNC_WAITDATA, sk);
+       remove_wait_queue(sk_sleep(sk), &wait);
+       return ret;
+ }
  static int tcp_bpf_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
                    int nonblock, int flags, int *addr_len)
  {
  msg_bytes_ready:
        copied = sk_msg_recvmsg(sk, psock, msg, len, flags);
        if (!copied) {
 -              int data, err = 0;
                long timeo;
 +              int data;
  
                timeo = sock_rcvtimeo(sk, nonblock);
-               data = sk_msg_wait_data(sk, psock, timeo);
 -              data = tcp_msg_wait_data(sk, psock, flags, timeo, &err);
++              data = tcp_msg_wait_data(sk, psock, timeo);
                if (data) {
                        if (!sk_psock_queue_empty(psock))
                                goto msg_bytes_ready;
diff --cc net/ipv4/udp.c
Simple merge
@@@ -21,6 -21,45 +21,45 @@@ static int sk_udp_recvmsg(struct sock *
        return udp_prot.recvmsg(sk, msg, len, noblock, flags, addr_len);
  }
  
 -static int udp_msg_wait_data(struct sock *sk, struct sk_psock *psock, int flags,
 -                           long timeo, int *err)
+ static bool udp_sk_has_data(struct sock *sk)
+ {
+       return !skb_queue_empty(&udp_sk(sk)->reader_queue) ||
+              !skb_queue_empty(&sk->sk_receive_queue);
+ }
+ static bool psock_has_data(struct sk_psock *psock)
+ {
+       return !skb_queue_empty(&psock->ingress_skb) ||
+              !sk_psock_queue_empty(psock);
+ }
+ #define udp_msg_has_data(__sk, __psock)       \
+               ({ udp_sk_has_data(__sk) || psock_has_data(__psock); })
++static int udp_msg_wait_data(struct sock *sk, struct sk_psock *psock,
++                           long timeo)
+ {
+       DEFINE_WAIT_FUNC(wait, woken_wake_function);
+       int ret = 0;
+       if (sk->sk_shutdown & RCV_SHUTDOWN)
+               return 1;
+       if (!timeo)
+               return ret;
+       add_wait_queue(sk_sleep(sk), &wait);
+       sk_set_bit(SOCKWQ_ASYNC_WAITDATA, sk);
+       ret = udp_msg_has_data(sk, psock);
+       if (!ret) {
+               wait_woken(&wait, TASK_INTERRUPTIBLE, timeo);
+               ret = udp_msg_has_data(sk, psock);
+       }
+       sk_clear_bit(SOCKWQ_ASYNC_WAITDATA, sk);
+       remove_wait_queue(sk_sleep(sk), &wait);
+       return ret;
+ }
  static int udp_bpf_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
                           int nonblock, int flags, int *addr_len)
  {
  msg_bytes_ready:
        copied = sk_msg_recvmsg(sk, psock, msg, len, flags);
        if (!copied) {
 -              int data, err = 0;
                long timeo;
 +              int data;
  
                timeo = sock_rcvtimeo(sk, nonblock);
-               data = sk_msg_wait_data(sk, psock, timeo);
 -              data = udp_msg_wait_data(sk, psock, flags, timeo, &err);
++              data = udp_msg_wait_data(sk, psock, timeo);
                if (data) {
-                       if (!sk_psock_queue_empty(psock))
+                       if (psock_has_data(psock))
                                goto msg_bytes_ready;
                        ret = sk_udp_recvmsg(sk, msg, len, nonblock, flags, addr_len);
                        goto out;
diff --cc net/ipv6/esp6.c
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -3236,9 -3249,9 +3242,9 @@@ static int nf_tables_newrule(struct sk_
        u8 genmask = nft_genmask_next(info->net);
        struct nft_rule *rule, *old_rule = NULL;
        struct nft_expr_info *expr_info = NULL;
 -      int family = nfmsg->nfgen_family;
 +      u8 family = info->nfmsg->nfgen_family;
+       struct nft_flow_rule *flow = NULL;
        struct net *net = info->net;
-       struct nft_flow_rule *flow;
        struct nft_userdata *udata;
        struct nft_table *table;
        struct nft_chain *chain;
Simple merge
Simple merge
Simple merge
diff --cc net/sctp/ipv6.c
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge