diff options
author | David S. Miller <davem@davemloft.net> | 2013-01-29 15:32:13 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-01-29 15:32:13 -0500 |
commit | f1e7b73acc26e8908af783bcd3a9900fd80688f5 (patch) | |
tree | 9a9382fb7f12f1889020efb4bffa3f4a88589fc5 /drivers/net/ethernet | |
parent | 218774dc341f219bfcf940304a081b121a0e8099 (diff) | |
parent | fc16e884a2320198b8cb7bc2fdcf6b4485e79709 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Bring in the 'net' tree so that we can get some ipv4/ipv6 bug
fixes that some net-next work will build upon.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet')
-rw-r--r-- | drivers/net/ethernet/3com/3c574_cs.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/calxeda/xgmac.c | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 17 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/en_tx.c | 13 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/main.c | 11 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/realtek/r8169.c | 21 |
8 files changed, 39 insertions, 33 deletions
diff --git a/drivers/net/ethernet/3com/3c574_cs.c b/drivers/net/ethernet/3com/3c574_cs.c index 66df93638085..ffd8de28a76a 100644 --- a/drivers/net/ethernet/3com/3c574_cs.c +++ b/drivers/net/ethernet/3com/3c574_cs.c | |||
@@ -432,7 +432,7 @@ static int tc574_config(struct pcmcia_device *link) | |||
432 | netdev_info(dev, "%s at io %#3lx, irq %d, hw_addr %pM\n", | 432 | netdev_info(dev, "%s at io %#3lx, irq %d, hw_addr %pM\n", |
433 | cardname, dev->base_addr, dev->irq, dev->dev_addr); | 433 | cardname, dev->base_addr, dev->irq, dev->dev_addr); |
434 | netdev_info(dev, " %dK FIFO split %s Rx:Tx, %sMII interface.\n", | 434 | netdev_info(dev, " %dK FIFO split %s Rx:Tx, %sMII interface.\n", |
435 | 8 << config & Ram_size, | 435 | 8 << (config & Ram_size), |
436 | ram_split[(config & Ram_split) >> Ram_split_shift], | 436 | ram_split[(config & Ram_split) >> Ram_split_shift], |
437 | config & Autoselect ? "autoselect " : ""); | 437 | config & Autoselect ? "autoselect " : ""); |
438 | 438 | ||
diff --git a/drivers/net/ethernet/calxeda/xgmac.c b/drivers/net/ethernet/calxeda/xgmac.c index a345e2454b83..a170065b5973 100644 --- a/drivers/net/ethernet/calxeda/xgmac.c +++ b/drivers/net/ethernet/calxeda/xgmac.c | |||
@@ -548,6 +548,10 @@ static int desc_get_rx_status(struct xgmac_priv *priv, struct xgmac_dma_desc *p) | |||
548 | return -1; | 548 | return -1; |
549 | } | 549 | } |
550 | 550 | ||
551 | /* All frames should fit into a single buffer */ | ||
552 | if (!(status & RXDESC_FIRST_SEG) || !(status & RXDESC_LAST_SEG)) | ||
553 | return -1; | ||
554 | |||
551 | /* Check if packet has checksum already */ | 555 | /* Check if packet has checksum already */ |
552 | if ((status & RXDESC_FRAME_TYPE) && (status & RXDESC_EXT_STATUS) && | 556 | if ((status & RXDESC_FRAME_TYPE) && (status & RXDESC_EXT_STATUS) && |
553 | !(ext_status & RXDESC_IP_PAYLOAD_MASK)) | 557 | !(ext_status & RXDESC_IP_PAYLOAD_MASK)) |
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c index 424f8ed67d39..c6c05bfef0e0 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | |||
@@ -1994,9 +1994,20 @@ static int set_coalesce(struct net_device *dev, struct ethtool_coalesce *c) | |||
1994 | { | 1994 | { |
1995 | const struct port_info *pi = netdev_priv(dev); | 1995 | const struct port_info *pi = netdev_priv(dev); |
1996 | struct adapter *adap = pi->adapter; | 1996 | struct adapter *adap = pi->adapter; |
1997 | 1997 | struct sge_rspq *q; | |
1998 | return set_rxq_intr_params(adap, &adap->sge.ethrxq[pi->first_qset].rspq, | 1998 | int i; |
1999 | c->rx_coalesce_usecs, c->rx_max_coalesced_frames); | 1999 | int r = 0; |
2000 | |||
2001 | for (i = pi->first_qset; i < pi->first_qset + pi->nqsets; i++) { | ||
2002 | q = &adap->sge.ethrxq[i].rspq; | ||
2003 | r = set_rxq_intr_params(adap, q, c->rx_coalesce_usecs, | ||
2004 | c->rx_max_coalesced_frames); | ||
2005 | if (r) { | ||
2006 | dev_err(&dev->dev, "failed to set coalesce %d\n", r); | ||
2007 | break; | ||
2008 | } | ||
2009 | } | ||
2010 | return r; | ||
2000 | } | 2011 | } |
2001 | 2012 | ||
2002 | static int get_coalesce(struct net_device *dev, struct ethtool_coalesce *c) | 2013 | static int get_coalesce(struct net_device *dev, struct ethtool_coalesce *c) |
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c index 3c5ffd2f5c6f..30724d811115 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c | |||
@@ -640,10 +640,15 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev) | |||
640 | ring->tx_csum++; | 640 | ring->tx_csum++; |
641 | } | 641 | } |
642 | 642 | ||
643 | /* Copy dst mac address to wqe */ | 643 | if (mlx4_is_mfunc(mdev->dev) || priv->validate_loopback) { |
644 | ethh = (struct ethhdr *)skb->data; | 644 | /* Copy dst mac address to wqe. This allows loopback in eSwitch, |
645 | tx_desc->ctrl.srcrb_flags16[0] = get_unaligned((__be16 *)ethh->h_dest); | 645 | * so that VFs and PF can communicate with each other |
646 | tx_desc->ctrl.imm = get_unaligned((__be32 *)(ethh->h_dest + 2)); | 646 | */ |
647 | ethh = (struct ethhdr *)skb->data; | ||
648 | tx_desc->ctrl.srcrb_flags16[0] = get_unaligned((__be16 *)ethh->h_dest); | ||
649 | tx_desc->ctrl.imm = get_unaligned((__be32 *)(ethh->h_dest + 2)); | ||
650 | } | ||
651 | |||
647 | /* Handle LSO (TSO) packets */ | 652 | /* Handle LSO (TSO) packets */ |
648 | if (lso_header_size) { | 653 | if (lso_header_size) { |
649 | /* Mark opcode as LSO */ | 654 | /* Mark opcode as LSO */ |
diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c index 983fd3d62bce..f1ee52d10467 100644 --- a/drivers/net/ethernet/mellanox/mlx4/main.c +++ b/drivers/net/ethernet/mellanox/mlx4/main.c | |||
@@ -1790,15 +1790,8 @@ static void mlx4_enable_msi_x(struct mlx4_dev *dev) | |||
1790 | int i; | 1790 | int i; |
1791 | 1791 | ||
1792 | if (msi_x) { | 1792 | if (msi_x) { |
1793 | /* In multifunction mode each function gets 2 msi-X vectors | 1793 | nreq = min_t(int, dev->caps.num_eqs - dev->caps.reserved_eqs, |
1794 | * one for data path completions anf the other for asynch events | 1794 | nreq); |
1795 | * or command completions */ | ||
1796 | if (mlx4_is_mfunc(dev)) { | ||
1797 | nreq = 2; | ||
1798 | } else { | ||
1799 | nreq = min_t(int, dev->caps.num_eqs - | ||
1800 | dev->caps.reserved_eqs, nreq); | ||
1801 | } | ||
1802 | 1795 | ||
1803 | entries = kcalloc(nreq, sizeof *entries, GFP_KERNEL); | 1796 | entries = kcalloc(nreq, sizeof *entries, GFP_KERNEL); |
1804 | if (!entries) | 1797 | if (!entries) |
diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c b/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c index bc165f4d0f65..695667d471a1 100644 --- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c +++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c | |||
@@ -144,7 +144,7 @@ void netxen_release_tx_buffers(struct netxen_adapter *adapter) | |||
144 | buffrag->length, PCI_DMA_TODEVICE); | 144 | buffrag->length, PCI_DMA_TODEVICE); |
145 | buffrag->dma = 0ULL; | 145 | buffrag->dma = 0ULL; |
146 | } | 146 | } |
147 | for (j = 0; j < cmd_buf->frag_count; j++) { | 147 | for (j = 1; j < cmd_buf->frag_count; j++) { |
148 | buffrag++; | 148 | buffrag++; |
149 | if (buffrag->dma) { | 149 | if (buffrag->dma) { |
150 | pci_unmap_page(adapter->pdev, buffrag->dma, | 150 | pci_unmap_page(adapter->pdev, buffrag->dma, |
diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c index 8e40ea09d7fc..7a849fc55a66 100644 --- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c +++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c | |||
@@ -1962,10 +1962,12 @@ unwind: | |||
1962 | while (--i >= 0) { | 1962 | while (--i >= 0) { |
1963 | nf = &pbuf->frag_array[i+1]; | 1963 | nf = &pbuf->frag_array[i+1]; |
1964 | pci_unmap_page(pdev, nf->dma, nf->length, PCI_DMA_TODEVICE); | 1964 | pci_unmap_page(pdev, nf->dma, nf->length, PCI_DMA_TODEVICE); |
1965 | nf->dma = 0ULL; | ||
1965 | } | 1966 | } |
1966 | 1967 | ||
1967 | nf = &pbuf->frag_array[0]; | 1968 | nf = &pbuf->frag_array[0]; |
1968 | pci_unmap_single(pdev, nf->dma, skb_headlen(skb), PCI_DMA_TODEVICE); | 1969 | pci_unmap_single(pdev, nf->dma, skb_headlen(skb), PCI_DMA_TODEVICE); |
1970 | nf->dma = 0ULL; | ||
1969 | 1971 | ||
1970 | out_err: | 1972 | out_err: |
1971 | return -ENOMEM; | 1973 | return -ENOMEM; |
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c index 97fdbb1d6412..4208f28d5d19 100644 --- a/drivers/net/ethernet/realtek/r8169.c +++ b/drivers/net/ethernet/realtek/r8169.c | |||
@@ -1825,8 +1825,6 @@ static void rtl8169_rx_vlan_tag(struct RxDesc *desc, struct sk_buff *skb) | |||
1825 | 1825 | ||
1826 | if (opts2 & RxVlanTag) | 1826 | if (opts2 & RxVlanTag) |
1827 | __vlan_hwaccel_put_tag(skb, swab16(opts2 & 0xffff)); | 1827 | __vlan_hwaccel_put_tag(skb, swab16(opts2 & 0xffff)); |
1828 | |||
1829 | desc->opts2 = 0; | ||
1830 | } | 1828 | } |
1831 | 1829 | ||
1832 | static int rtl8169_gset_tbi(struct net_device *dev, struct ethtool_cmd *cmd) | 1830 | static int rtl8169_gset_tbi(struct net_device *dev, struct ethtool_cmd *cmd) |
@@ -6061,8 +6059,6 @@ static int rtl_rx(struct net_device *dev, struct rtl8169_private *tp, u32 budget | |||
6061 | !(status & (RxRWT | RxFOVF)) && | 6059 | !(status & (RxRWT | RxFOVF)) && |
6062 | (dev->features & NETIF_F_RXALL)) | 6060 | (dev->features & NETIF_F_RXALL)) |
6063 | goto process_pkt; | 6061 | goto process_pkt; |
6064 | |||
6065 | rtl8169_mark_to_asic(desc, rx_buf_sz); | ||
6066 | } else { | 6062 | } else { |
6067 | struct sk_buff *skb; | 6063 | struct sk_buff *skb; |
6068 | dma_addr_t addr; | 6064 | dma_addr_t addr; |
@@ -6083,16 +6079,14 @@ process_pkt: | |||
6083 | if (unlikely(rtl8169_fragmented_frame(status))) { | 6079 | if (unlikely(rtl8169_fragmented_frame(status))) { |
6084 | dev->stats.rx_dropped++; | 6080 | dev->stats.rx_dropped++; |
6085 | dev->stats.rx_length_errors++; | 6081 | dev->stats.rx_length_errors++; |
6086 | rtl8169_mark_to_asic(desc, rx_buf_sz); | 6082 | goto release_descriptor; |
6087 | continue; | ||
6088 | } | 6083 | } |
6089 | 6084 | ||
6090 | skb = rtl8169_try_rx_copy(tp->Rx_databuff[entry], | 6085 | skb = rtl8169_try_rx_copy(tp->Rx_databuff[entry], |
6091 | tp, pkt_size, addr); | 6086 | tp, pkt_size, addr); |
6092 | rtl8169_mark_to_asic(desc, rx_buf_sz); | ||
6093 | if (!skb) { | 6087 | if (!skb) { |
6094 | dev->stats.rx_dropped++; | 6088 | dev->stats.rx_dropped++; |
6095 | continue; | 6089 | goto release_descriptor; |
6096 | } | 6090 | } |
6097 | 6091 | ||
6098 | rtl8169_rx_csum(skb, status); | 6092 | rtl8169_rx_csum(skb, status); |
@@ -6108,13 +6102,10 @@ process_pkt: | |||
6108 | tp->rx_stats.bytes += pkt_size; | 6102 | tp->rx_stats.bytes += pkt_size; |
6109 | u64_stats_update_end(&tp->rx_stats.syncp); | 6103 | u64_stats_update_end(&tp->rx_stats.syncp); |
6110 | } | 6104 | } |
6111 | 6105 | release_descriptor: | |
6112 | /* Work around for AMD plateform. */ | 6106 | desc->opts2 = 0; |
6113 | if ((desc->opts2 & cpu_to_le32(0xfffe000)) && | 6107 | wmb(); |
6114 | (tp->mac_version == RTL_GIGA_MAC_VER_05)) { | 6108 | rtl8169_mark_to_asic(desc, rx_buf_sz); |
6115 | desc->opts2 = 0; | ||
6116 | cur_rx++; | ||
6117 | } | ||
6118 | } | 6109 | } |
6119 | 6110 | ||
6120 | count = cur_rx - tp->cur_rx; | 6111 | count = cur_rx - tp->cur_rx; |