Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
authorDavid S. Miller <davem@davemloft.net>
Tue, 7 Feb 2017 21:29:30 +0000 (16:29 -0500)
committerDavid S. Miller <davem@davemloft.net>
Tue, 7 Feb 2017 21:29:30 +0000 (16:29 -0500)
The conflict was an interaction between a bug fix in the
netvsc driver in 'net' and an optimization of the RX path
in 'net-next'.

Signed-off-by: David S. Miller <davem@davemloft.net>
23 files changed:
1  2 
MAINTAINERS
drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
drivers/net/ethernet/mellanox/mlx4/en_netdev.c
drivers/net/ethernet/mellanox/mlx4/en_rx.c
drivers/net/hyperv/netvsc.c
drivers/net/tun.c
drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c
drivers/vhost/vhost.c
include/net/sock.h
include/uapi/linux/seg6.h
net/core/dev.c
net/core/ethtool.c
net/ipv4/ip_sockglue.c
net/ipv4/tcp.c
net/ipv4/udp.c
net/ipv6/addrconf.c
net/ipv6/ip6_gre.c
net/ipv6/seg6_hmac.c
net/ipv6/tcp_ipv6.c
net/ipv6/udp.c
net/mac80211/mesh.c
net/sctp/socket.c
net/wireless/nl80211.c

diff --cc MAINTAINERS
Simple merge
@@@ -1245,25 -1289,74 +1245,28 @@@ void netvsc_channel_cb(void *context
        else
                device = channel->device_obj;
  
 -      net_device = get_inbound_net_device(device);
 -      if (!net_device)
 -              return;
        ndev = hv_get_drvdata(device);
 -      buffer = get_per_channel_state(channel);
 +      if (unlikely(!ndev))
 +              return;
 +
 +      net_device = net_device_to_netvsc_device(ndev);
 +      if (unlikely(net_device->destroy) &&
 +          netvsc_channel_idle(net_device, q_idx))
 +              return;
  
 -      do {
 -              desc = get_next_pkt_raw(channel);
 -              if (desc != NULL) {
 -                      netvsc_process_raw_pkt(device,
 -                                             channel,
 -                                             net_device,
 -                                             ndev,
 -                                             desc->trans_id,
 -                                             desc);
 -
 -                      put_pkt_raw(channel, desc);
 -                      need_to_commit = true;
 -                      continue;
 -              }
 -              if (need_to_commit) {
 -                      need_to_commit = false;
 -                      commit_rd_index(channel);
 -              }
 -
 -              ret = vmbus_recvpacket_raw(channel, buffer, bufferlen,
 -                                         &bytes_recvd, &request_id);
 -              if (ret == 0) {
 -                      if (bytes_recvd > 0) {
 -                              desc = (struct vmpacket_descriptor *)buffer;
 -                              netvsc_process_raw_pkt(device,
 -                                                     channel,
 -                                                     net_device,
 -                                                     ndev,
 -                                                     request_id,
 -                                                     desc);
 -                      } else {
 -                              /*
 -                               * We are done for this pass.
 -                               */
 -                              break;
 -                      }
 -
 -              } else if (ret == -ENOBUFS) {
 -                      if (bufferlen > NETVSC_PACKET_SIZE)
 -                              kfree(buffer);
 -                      /* Handle large packet */
 -                      buffer = kmalloc(bytes_recvd, GFP_ATOMIC);
 -                      if (buffer == NULL) {
 -                              /* Try again next time around */
 -                              netdev_err(ndev,
 -                                         "unable to allocate buffer of size "
 -                                         "(%d)!!\n", bytes_recvd);
 -                              break;
 -                      }
 -
 -                      bufferlen = bytes_recvd;
 -              }
 -
 -              init_cached_read_index(channel);
+       /* commit_rd_index() -> hv_signal_on_read() needs this. */
+       init_cached_read_index(channel);
 +      while ((desc = get_next_pkt_raw(channel)) != NULL) {
 +              netvsc_process_raw_pkt(device, channel, net_device,
 +                                     ndev, desc->trans_id, desc);
  
 -      } while (1);
 +              put_pkt_raw(channel, desc);
 +              need_to_commit = true;
 +      }
  
 -      if (bufferlen > NETVSC_PACKET_SIZE)
 -              kfree(buffer);
 +      if (need_to_commit)
 +              commit_rd_index(channel);
  
        netvsc_chk_recv_comp(net_device, channel, q_idx);
  }
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc net/core/dev.c
Simple merge
Simple merge
Simple merge
diff --cc net/ipv4/tcp.c
Simple merge
diff --cc net/ipv4/udp.c
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc net/ipv6/udp.c
Simple merge
Simple merge
Simple merge
Simple merge