Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
authorDavid S. Miller <davem@davemloft.net>
Mon, 6 Jan 2014 22:37:45 +0000 (17:37 -0500)
committerDavid S. Miller <davem@davemloft.net>
Mon, 6 Jan 2014 22:37:45 +0000 (17:37 -0500)
Conflicts:
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c
net/ipv6/ip6_tunnel.c
net/ipv6/ip6_vti.c

ipv6 tunnel statistic bug fixes conflicting with consolidation into
generic sw per-cpu net stats.

qlogic conflict between queue counting bug fix and the addition
of multiple MAC address support.

Signed-off-by: David S. Miller <davem@davemloft.net>
68 files changed:
1  2 
MAINTAINERS
drivers/bluetooth/ath3k.c
drivers/bluetooth/btusb.c
drivers/net/bonding/bond_3ad.c
drivers/net/ethernet/arc/emac_main.c
drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
drivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h
drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c
drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c
drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h
drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c
drivers/net/ethernet/broadcom/tg3.c
drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
drivers/net/ethernet/chelsio/cxgb4/sge.c
drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
drivers/net/ethernet/emulex/benet/be_main.c
drivers/net/ethernet/freescale/fec_main.c
drivers/net/ethernet/intel/e1000e/netdev.c
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c
drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
drivers/net/ethernet/ti/cpsw.c
drivers/net/hyperv/netvsc_drv.c
drivers/net/macvlan.c
drivers/net/phy/phy.c
drivers/net/usb/mcs7830.c
drivers/net/virtio_net.c
drivers/net/vxlan.c
drivers/net/wireless/ath/ath9k/ar9002_mac.c
drivers/net/wireless/ath/ath9k/main.c
drivers/net/wireless/rtlwifi/pci.c
drivers/net/xen-netback/common.h
drivers/net/xen-netback/interface.c
drivers/net/xen-netback/netback.c
include/linux/netdevice.h
include/linux/skbuff.h
include/net/sctp/structs.h
net/batman-adv/translation-table.c
net/core/dev.c
net/core/neighbour.c
net/ipv4/udp.c
net/ipv6/addrconf.c
net/ipv6/ip6_output.c
net/ipv6/ip6_tunnel.c
net/ipv6/ip6_vti.c
net/ipv6/route.c
net/ipv6/sit.c
net/netfilter/ipvs/ip_vs_nfct.c
net/netfilter/nf_tables_api.c
net/netfilter/nfnetlink_log.c
net/rose/af_rose.c
net/sched/act_csum.c
net/sched/act_gact.c
net/sched/act_ipt.c
net/sched/act_nat.c
net/sched/act_pedit.c
net/sched/act_police.c
net/sched/act_simple.c
net/sched/act_skbedit.c
net/sctp/outqueue.c
net/tipc/port.c
net/tipc/socket.c

diff --cc MAINTAINERS
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -76,22 -75,17 +76,26 @@@ static int qlcnic_sriov_pf_cal_res_limi
        num_vfs = sriov->num_vfs;
        max = num_vfs + 1;
        info->bit_offsets = 0xffff;
 -      num_vf_macs = QLCNIC_SRIOV_VF_MAX_MAC;
 +      info->max_tx_ques = res->num_tx_queues / max;
 +
 +      if (qlcnic_83xx_pf_check(adapter))
 +              num_macs = 1;
 +
+       info->max_rx_mcast_mac_filters = res->num_rx_mcast_mac_filters;
        if (adapter->ahw->pci_func == func) {
 -              temp = res->num_rx_mcast_mac_filters - (num_vfs * num_vf_macs);
 -              info->max_rx_ucast_mac_filters = temp;
 -              temp = res->num_tx_mac_filters - (num_vfs * num_vf_macs);
 -              info->max_tx_mac_filters = temp;
                info->min_tx_bw = 0;
                info->max_tx_bw = MAX_BW;
++
 +              temp = res->num_rx_ucast_mac_filters - num_macs * num_vfs;
 +              info->max_rx_ucast_mac_filters = temp;
 +              temp = res->num_tx_mac_filters - num_macs * num_vfs;
 +              info->max_tx_mac_filters = temp;
 +              temp = num_macs * num_vfs * QLCNIC_SRIOV_VF_MAX_MAC;
 +              temp = res->num_rx_mcast_mac_filters - temp;
 +              info->max_rx_mcast_mac_filters = temp;
 +
+               info->max_tx_ques = res->num_tx_queues - sriov->num_vfs;
        } else {
                id = qlcnic_sriov_func_to_index(adapter, func);
                if (id < 0)
                vp = sriov->vf_info[id].vp;
                info->min_tx_bw = vp->min_tx_bw;
                info->max_tx_bw = vp->max_tx_bw;
 -              info->max_rx_ucast_mac_filters = num_vf_macs;
 -              info->max_tx_mac_filters = num_vf_macs;
++
 +              info->max_rx_ucast_mac_filters = num_macs;
 +              info->max_tx_mac_filters = num_macs;
 +              temp = num_macs * QLCNIC_SRIOV_VF_MAX_MAC;
 +              info->max_rx_mcast_mac_filters = temp;
++
+               info->max_tx_ques = QLCNIC_SINGLE_RING;
        }
  
        info->max_rx_ip_addr = res->num_destip / max;
Simple merge
Simple merge
Simple merge
@@@ -532,11 -562,11 +532,9 @@@ phy_err
   */
  int phy_start_interrupts(struct phy_device *phydev)
  {
 -      int err = 0;
 -
        atomic_set(&phydev->irq_disable, 0);
-       if (request_irq(phydev->irq, phy_interrupt,
-                               IRQF_SHARED,
-                               "phy_interrupt",
-                               phydev) < 0) {
+       if (request_irq(phydev->irq, phy_interrupt, 0, "phy_interrupt",
+                       phydev) < 0) {
                pr_warn("%s: Can't get IRQ %d (PHY)\n",
                        phydev->bus->name, phydev->irq);
                phydev->irq = PHY_POLL;
Simple merge
Simple merge
Simple merge
@@@ -134,11 -154,23 +155,24 @@@ static bool ar9002_hw_get_isr(struct at
                if ((s5_s & AR_ISR_S5_TIM_TIMER) &&
                    !(pCap->hw_caps & ATH9K_HW_CAP_AUTOSLEEP))
                        *masked |= ATH9K_INT_TIM_TIMER;
+               if (!(pCap->hw_caps & ATH9K_HW_CAP_RAC_SUPPORTED)) {
+                       REG_WRITE(ah, AR_ISR_S5, s5_s);
+                       isr &= ~AR_ISR_GENTMR;
+               }
        }
  
+       if (!(pCap->hw_caps & ATH9K_HW_CAP_RAC_SUPPORTED)) {
+               REG_WRITE(ah, AR_ISR, isr);
+               REG_READ(ah, AR_ISR);
+       }
+       if (AR_SREV_9100(ah))
+               return true;
        if (sync_cause) {
 -              ath9k_debug_sync_cause(common, sync_cause);
 +              if (sync_cause_p)
 +                      *sync_cause_p = sync_cause;
                fatal_int =
                        (sync_cause &
                         (AR_INTR_SYNC_HOST1_FATAL | AR_INTR_SYNC_HOST1_PERR))
Simple merge
Simple merge
@@@ -136,18 -143,20 +143,18 @@@ struct xenvif 
        char rx_irq_name[IFNAMSIZ+4]; /* DEVNAME-rx */
        struct xen_netif_rx_back_ring rx;
        struct sk_buff_head rx_queue;
 -
 -      /* Allow xenvif_start_xmit() to peek ahead in the rx request
 -       * ring.  This is a prediction of what rx_req_cons will be
 -       * once all queued skbs are put on the ring.
 +      /* Set when the RX interrupt is triggered by the frontend.
 +       * The worker thread may need to wake the queue.
         */
 -      RING_IDX rx_req_cons_peek;
 +      bool rx_event;
  
-       /* Given MAX_BUFFER_OFFSET of 4096 the worst case is that each
-        * head/fragment page uses 2 copy operations because it
-        * straddles two buffers in the frontend.
-        */
-       struct gnttab_copy grant_copy_op[2*XEN_NETIF_RX_RING_SIZE];
-       struct xenvif_rx_meta meta[2*XEN_NETIF_RX_RING_SIZE];
+       /* This array is allocated seperately as it is large */
+       struct gnttab_copy *grant_copy_op;
  
+       /* We create one meta structure per ring request we consume, so
+        * the maximum number is the same as the ring size.
+        */
+       struct xenvif_rx_meta meta[XEN_NETIF_RX_RING_SIZE];
  
        u8               fe_dev_addr[6];
  
Simple merge
@@@ -522,9 -606,9 +522,9 @@@ static void xenvif_rx_action(struct xen
        BUG_ON(npo.meta_prod > ARRAY_SIZE(vif->meta));
  
        if (!npo.copy_prod)
 -              return;
 +              goto done;
  
-       BUG_ON(npo.copy_prod > ARRAY_SIZE(vif->grant_copy_op));
+       BUG_ON(npo.copy_prod > MAX_GRANT_COPY_OPS);
        gnttab_batch_copy(vif->grant_copy_op, npo.copy_prod);
  
        while ((skb = __skb_dequeue(&rxq)) != NULL) {
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc net/core/dev.c
Simple merge
Simple merge
diff --cc net/ipv4/udp.c
Simple merge
Simple merge
Simple merge
@@@ -101,17 -103,25 +101,26 @@@ struct ip6_tnl_net 
  
  static struct net_device_stats *ip6_get_stats(struct net_device *dev)
  {
-       struct pcpu_sw_netstats sum = { 0 };
 -      struct pcpu_tstats tmp, sum = { 0 };
++      struct pcpu_sw_netstats tmp, sum = { 0 };
        int i;
  
        for_each_possible_cpu(i) {
 -              const struct pcpu_tstats *tstats = per_cpu_ptr(dev->tstats, i);
+               unsigned int start;
 +              const struct pcpu_sw_netstats *tstats =
 +                                                 per_cpu_ptr(dev->tstats, i);
  
-               sum.rx_packets += tstats->rx_packets;
-               sum.rx_bytes   += tstats->rx_bytes;
-               sum.tx_packets += tstats->tx_packets;
-               sum.tx_bytes   += tstats->tx_bytes;
+               do {
+                       start = u64_stats_fetch_begin_bh(&tstats->syncp);
+                       tmp.rx_packets = tstats->rx_packets;
+                       tmp.rx_bytes = tstats->rx_bytes;
+                       tmp.tx_packets = tstats->tx_packets;
+                       tmp.tx_bytes =  tstats->tx_bytes;
+               } while (u64_stats_fetch_retry_bh(&tstats->syncp, start));
+               sum.rx_packets += tmp.rx_packets;
+               sum.rx_bytes   += tmp.rx_bytes;
+               sum.tx_packets += tmp.tx_packets;
+               sum.tx_bytes   += tmp.tx_bytes;
        }
        dev->stats.rx_packets = sum.rx_packets;
        dev->stats.rx_bytes   = sum.rx_bytes;
Simple merge
Simple merge
diff --cc net/ipv6/sit.c
Simple merge
Simple merge
@@@ -2100,11 -2102,11 +2108,11 @@@ done
        return skb->len;
  }
  
 -static int nf_tables_dump_sets_all(struct nft_ctx *ctx, struct sk_buff *skb,
 -                                 struct netlink_callback *cb)
 +static int nf_tables_dump_sets_family(struct nft_ctx *ctx, struct sk_buff *skb,
 +                                    struct netlink_callback *cb)
  {
        const struct nft_set *set;
-       unsigned int idx = 0, s_idx = cb->args[0];
+       unsigned int idx, s_idx = cb->args[0];
        struct nft_table *table, *cur_table = (struct nft_table *)cb->args[2];
  
        if (cb->args[1])
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc net/tipc/port.c
Simple merge
Simple merge