aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2013-01-29 15:32:13 -0500
committerDavid S. Miller <davem@davemloft.net>2013-01-29 15:32:13 -0500
commitf1e7b73acc26e8908af783bcd3a9900fd80688f5 (patch)
tree9a9382fb7f12f1889020efb4bffa3f4a88589fc5 /drivers/net/ethernet
parent218774dc341f219bfcf940304a081b121a0e8099 (diff)
parentfc16e884a2320198b8cb7bc2fdcf6b4485e79709 (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.c2
-rw-r--r--drivers/net/ethernet/calxeda/xgmac.c4
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c17
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/en_tx.c13
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/main.c11
-rw-r--r--drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c2
-rw-r--r--drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c2
-rw-r--r--drivers/net/ethernet/realtek/r8169.c21
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
2002static int get_coalesce(struct net_device *dev, struct ethtool_coalesce *c) 2013static 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
1970out_err: 1972out_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
1832static int rtl8169_gset_tbi(struct net_device *dev, struct ethtool_cmd *cmd) 1830static 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 6105release_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;