From: David S. Miller <davem@davemloft.net>
Date: Thu, 2 Apr 2015 20:16:53 +0000 (-0400)
Subject: Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
X-Git-Tag: firefly_0821_release~176^2~1974^2~84
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=9f0d34bc344889c2e6c593bd949d7ab821f0f4a5;p=firefly-linux-kernel-4.4.55.git

Merge git://git./linux/kernel/git/davem/net

Conflicts:
	drivers/net/usb/asix_common.c
	drivers/net/usb/sr9800.c
	drivers/net/usb/usbnet.c
	include/linux/usb/usbnet.h
	net/ipv4/tcp_ipv4.c
	net/ipv6/tcp_ipv6.c

The TCP conflicts were overlapping changes.  In 'net' we added a
READ_ONCE() to the socket cached RX route read, whilst in 'net-next'
Eric Dumazet touched the surrounding code dealing with how mini
sockets are handled.

With USB, it's a case of the same bug fix first going into net-next
and then I cherry picked it back into net.

Signed-off-by: David S. Miller <davem@davemloft.net>
---

9f0d34bc344889c2e6c593bd949d7ab821f0f4a5
diff --cc drivers/net/ethernet/mellanox/mlx4/en_netdev.c
index 354e254b53cf,3485acf03014..51b20663c2a6
--- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
@@@ -2963,12 -2844,16 +2956,20 @@@ int mlx4_en_init_netdev(struct mlx4_en_
  		queue_delayed_work(mdev->workqueue, &priv->service_task,
  				   SERVICE_TASK_DELAY);
  
 -	mlx4_set_stats_bitmap(mdev->dev, &priv->stats_bitmap);
 +	mlx4_en_set_stats_bitmap(mdev->dev, &priv->stats_bitmap,
 +				 mdev->profile.prof[priv->port].rx_ppp,
 +				 mdev->profile.prof[priv->port].rx_pause,
 +				 mdev->profile.prof[priv->port].tx_ppp,
 +				 mdev->profile.prof[priv->port].tx_pause);
  
+ 	err = register_netdev(dev);
+ 	if (err) {
+ 		en_err(priv, "Netdev registration failed for port %d\n", port);
+ 		goto out;
+ 	}
+ 
+ 	priv->registered = 1;
+ 
  	return 0;
  
  out:
diff --cc net/ipv4/tcp_ipv4.c
index 5aababa20a21,f1756ee02207..69f9cf684744
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@@ -1468,8 -1517,8 +1468,8 @@@ void tcp_v4_early_demux(struct sk_buff 
  	if (sk) {
  		skb->sk = sk;
  		skb->destructor = sock_edemux;
 -		if (sk->sk_state != TCP_TIME_WAIT) {
 +		if (sk_fullsock(sk)) {
- 			struct dst_entry *dst = sk->sk_rx_dst;
+ 			struct dst_entry *dst = READ_ONCE(sk->sk_rx_dst);
  
  			if (dst)
  				dst = dst_check(dst, 0);
diff --cc net/ipv6/tcp_ipv6.c
index 7cdad8401434,1f5e62229aaa..f73a97f6e68e
--- a/net/ipv6/tcp_ipv6.c
+++ b/net/ipv6/tcp_ipv6.c
@@@ -1521,8 -1595,8 +1532,8 @@@ static void tcp_v6_early_demux(struct s
  	if (sk) {
  		skb->sk = sk;
  		skb->destructor = sock_edemux;
 -		if (sk->sk_state != TCP_TIME_WAIT) {
 +		if (sk_fullsock(sk)) {
- 			struct dst_entry *dst = sk->sk_rx_dst;
+ 			struct dst_entry *dst = READ_ONCE(sk->sk_rx_dst);
  
  			if (dst)
  				dst = dst_check(dst, inet6_sk(sk)->rx_dst_cookie);