Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (27 commits)
rtnetlink: propagate error from dev_change_flags in do_setlink()
isdn: remove extra byteswap in isdn_net_ciscohdlck_slarp_send_reply
Phonet: refuse to send bigger than MTU packets
e1000e: fix IPMI traffic
e1000e: fix warn_on reload after phy_id error
phy: fix phy address bug
e100: fix dma error in direction for mapping
igb: use dev_printk instead of printk
qla3xxx: Cleanup: Fix link print statements.
igb: Use device_set_wakeup_enable
e1000: Use device_set_wakeup_enable
e1000e: Use device_set_wakeup_enable
via-velocity: enable perfect filtering for multicast packets
phy: Add support for Marvell 88E1118 PHY
mlx4_en: Pause parameters per port
phylib: fix premature freeing of struct mii_bus
atl1: Do not enumerate options unsupported by chip
atl1e: fix broken multicast by removing unnecessary crc inversion
gianfar: Fix DMA unmap invocations
net/ucc_geth: Fix oops in uec_get_ethtool_stats()
...

+526 -111
+4 -2
drivers/isdn/i4l/isdn_net.c
··· 1641 1641 /* slarp reply, send own ip/netmask; if values are nonsense remote 1642 1642 * should think we are unable to provide it with an address via SLARP */ 1643 1643 p += put_u32(p, CISCO_SLARP_REPLY); 1644 - p += put_u32(p, addr); // address 1645 - p += put_u32(p, mask); // netmask 1644 + *(__be32 *)p = addr; // address 1645 + p += 4; 1646 + *(__be32 *)p = mask; // netmask 1647 + p += 4; 1646 1648 p += put_u16(p, 0); // unused 1647 1649 1648 1650 isdn_net_write_super(lp, skb);
-4
drivers/net/atl1e/atl1e_hw.c
··· 163 163 * atl1e_hash_mc_addr 164 164 * purpose 165 165 * set hash value for a multicast address 166 - * hash calcu processing : 167 - * 1. calcu 32bit CRC for multicast address 168 - * 2. reverse crc with MSB to LSB 169 166 */ 170 167 u32 atl1e_hash_mc_addr(struct atl1e_hw *hw, u8 *mc_addr) 171 168 { ··· 171 174 int i; 172 175 173 176 crc32 = ether_crc_le(6, mc_addr); 174 - crc32 = ~crc32; 175 177 for (i = 0; i < 32; i++) 176 178 value |= (((crc32 >> i) & 1) << (31 - i)); 177 179
+3 -14
drivers/net/atlx/atl1.c
··· 3404 3404 { 3405 3405 struct atl1_adapter *adapter = netdev_priv(netdev); 3406 3406 3407 - wol->supported = WAKE_UCAST | WAKE_MCAST | WAKE_BCAST | WAKE_MAGIC; 3407 + wol->supported = WAKE_MAGIC; 3408 3408 wol->wolopts = 0; 3409 - if (adapter->wol & ATLX_WUFC_EX) 3410 - wol->wolopts |= WAKE_UCAST; 3411 - if (adapter->wol & ATLX_WUFC_MC) 3412 - wol->wolopts |= WAKE_MCAST; 3413 - if (adapter->wol & ATLX_WUFC_BC) 3414 - wol->wolopts |= WAKE_BCAST; 3415 3409 if (adapter->wol & ATLX_WUFC_MAG) 3416 3410 wol->wolopts |= WAKE_MAGIC; 3417 3411 return; ··· 3416 3422 { 3417 3423 struct atl1_adapter *adapter = netdev_priv(netdev); 3418 3424 3419 - if (wol->wolopts & (WAKE_PHY | WAKE_ARP | WAKE_MAGICSECURE)) 3425 + if (wol->wolopts & (WAKE_PHY | WAKE_UCAST | WAKE_MCAST | WAKE_BCAST | 3426 + WAKE_ARP | WAKE_MAGICSECURE)) 3420 3427 return -EOPNOTSUPP; 3421 3428 adapter->wol = 0; 3422 - if (wol->wolopts & WAKE_UCAST) 3423 - adapter->wol |= ATLX_WUFC_EX; 3424 - if (wol->wolopts & WAKE_MCAST) 3425 - adapter->wol |= ATLX_WUFC_MC; 3426 - if (wol->wolopts & WAKE_BCAST) 3427 - adapter->wol |= ATLX_WUFC_BC; 3428 3429 if (wol->wolopts & WAKE_MAGIC) 3429 3430 adapter->wol |= ATLX_WUFC_MAG; 3430 3431 return 0;
+10 -10
drivers/net/e100.c
··· 166 166 167 167 #define DRV_NAME "e100" 168 168 #define DRV_EXT "-NAPI" 169 - #define DRV_VERSION "3.5.23-k4"DRV_EXT 169 + #define DRV_VERSION "3.5.23-k6"DRV_EXT 170 170 #define DRV_DESCRIPTION "Intel(R) PRO/100 Network Driver" 171 171 #define DRV_COPYRIGHT "Copyright(c) 1999-2006 Intel Corporation" 172 172 #define PFX DRV_NAME ": " ··· 1804 1804 struct rfd *prev_rfd = (struct rfd *)rx->prev->skb->data; 1805 1805 put_unaligned_le32(rx->dma_addr, &prev_rfd->link); 1806 1806 pci_dma_sync_single_for_device(nic->pdev, rx->prev->dma_addr, 1807 - sizeof(struct rfd), PCI_DMA_TODEVICE); 1807 + sizeof(struct rfd), PCI_DMA_BIDIRECTIONAL); 1808 1808 } 1809 1809 1810 1810 return 0; ··· 1823 1823 1824 1824 /* Need to sync before taking a peek at cb_complete bit */ 1825 1825 pci_dma_sync_single_for_cpu(nic->pdev, rx->dma_addr, 1826 - sizeof(struct rfd), PCI_DMA_FROMDEVICE); 1826 + sizeof(struct rfd), PCI_DMA_BIDIRECTIONAL); 1827 1827 rfd_status = le16_to_cpu(rfd->status); 1828 1828 1829 1829 DPRINTK(RX_STATUS, DEBUG, "status=0x%04X\n", rfd_status); ··· 1850 1850 1851 1851 /* Get data */ 1852 1852 pci_unmap_single(nic->pdev, rx->dma_addr, 1853 - RFD_BUF_LEN, PCI_DMA_FROMDEVICE); 1853 + RFD_BUF_LEN, PCI_DMA_BIDIRECTIONAL); 1854 1854 1855 1855 /* If this buffer has the el bit, but we think the receiver 1856 1856 * is still running, check to see if it really stopped while ··· 1943 1943 new_before_last_rfd->command |= cpu_to_le16(cb_el); 1944 1944 pci_dma_sync_single_for_device(nic->pdev, 1945 1945 new_before_last_rx->dma_addr, sizeof(struct rfd), 1946 - PCI_DMA_TODEVICE); 1946 + PCI_DMA_BIDIRECTIONAL); 1947 1947 1948 1948 /* Now that we have a new stopping point, we can clear the old 1949 1949 * stopping point. We must sync twice to get the proper ··· 1951 1951 old_before_last_rfd->command &= ~cpu_to_le16(cb_el); 1952 1952 pci_dma_sync_single_for_device(nic->pdev, 1953 1953 old_before_last_rx->dma_addr, sizeof(struct rfd), 1954 - PCI_DMA_TODEVICE); 1954 + PCI_DMA_BIDIRECTIONAL); 1955 1955 old_before_last_rfd->size = cpu_to_le16(VLAN_ETH_FRAME_LEN); 1956 1956 pci_dma_sync_single_for_device(nic->pdev, 1957 1957 old_before_last_rx->dma_addr, sizeof(struct rfd), 1958 - PCI_DMA_TODEVICE); 1958 + PCI_DMA_BIDIRECTIONAL); 1959 1959 } 1960 1960 1961 1961 if(restart_required) { ··· 1978 1978 for(rx = nic->rxs, i = 0; i < count; rx++, i++) { 1979 1979 if(rx->skb) { 1980 1980 pci_unmap_single(nic->pdev, rx->dma_addr, 1981 - RFD_BUF_LEN, PCI_DMA_FROMDEVICE); 1981 + RFD_BUF_LEN, PCI_DMA_BIDIRECTIONAL); 1982 1982 dev_kfree_skb(rx->skb); 1983 1983 } 1984 1984 } ··· 2021 2021 before_last->command |= cpu_to_le16(cb_el); 2022 2022 before_last->size = 0; 2023 2023 pci_dma_sync_single_for_device(nic->pdev, rx->dma_addr, 2024 - sizeof(struct rfd), PCI_DMA_TODEVICE); 2024 + sizeof(struct rfd), PCI_DMA_BIDIRECTIONAL); 2025 2025 2026 2026 nic->rx_to_use = nic->rx_to_clean = nic->rxs; 2027 2027 nic->ru_running = RU_SUSPENDED; ··· 2222 2222 msleep(10); 2223 2223 2224 2224 pci_dma_sync_single_for_cpu(nic->pdev, nic->rx_to_clean->dma_addr, 2225 - RFD_BUF_LEN, PCI_DMA_FROMDEVICE); 2225 + RFD_BUF_LEN, PCI_DMA_BIDIRECTIONAL); 2226 2226 2227 2227 if(memcmp(nic->rx_to_clean->skb->data + sizeof(struct rfd), 2228 2228 skb->data, ETH_DATA_LEN))
+6 -2
drivers/net/e1000/e1000_ethtool.c
··· 1774 1774 1775 1775 /* this function will set ->supported = 0 and return 1 if wol is not 1776 1776 * supported by this hardware */ 1777 - if (e1000_wol_exclusion(adapter, wol)) 1777 + if (e1000_wol_exclusion(adapter, wol) || 1778 + !device_can_wakeup(&adapter->pdev->dev)) 1778 1779 return; 1779 1780 1780 1781 /* apply any specific unsupported masks here */ ··· 1812 1811 if (wol->wolopts & (WAKE_PHY | WAKE_ARP | WAKE_MAGICSECURE)) 1813 1812 return -EOPNOTSUPP; 1814 1813 1815 - if (e1000_wol_exclusion(adapter, wol)) 1814 + if (e1000_wol_exclusion(adapter, wol) || 1815 + !device_can_wakeup(&adapter->pdev->dev)) 1816 1816 return wol->wolopts ? -EOPNOTSUPP : 0; 1817 1817 1818 1818 switch (hw->device_id) { ··· 1839 1837 adapter->wol |= E1000_WUFC_BC; 1840 1838 if (wol->wolopts & WAKE_MAGIC) 1841 1839 adapter->wol |= E1000_WUFC_MAG; 1840 + 1841 + device_set_wakeup_enable(&adapter->pdev->dev, adapter->wol); 1842 1842 1843 1843 return 0; 1844 1844 }
+1
drivers/net/e1000/e1000_main.c
··· 1179 1179 1180 1180 /* initialize the wol settings based on the eeprom settings */ 1181 1181 adapter->wol = adapter->eeprom_wol; 1182 + device_set_wakeup_enable(&adapter->pdev->dev, adapter->wol); 1182 1183 1183 1184 /* print bus type/speed/width info */ 1184 1185 DPRINTK(PROBE, INFO, "(PCI%s:%s:%s) ",
+5
drivers/net/e1000e/e1000.h
··· 299 299 unsigned long led_status; 300 300 301 301 unsigned int flags; 302 + unsigned int flags2; 302 303 struct work_struct downshift_task; 303 304 struct work_struct update_phy_task; 304 305 }; ··· 307 306 struct e1000_info { 308 307 enum e1000_mac_type mac; 309 308 unsigned int flags; 309 + unsigned int flags2; 310 310 u32 pba; 311 311 s32 (*get_variants)(struct e1000_adapter *); 312 312 struct e1000_mac_operations *mac_ops; ··· 348 346 #define FLAG_TSO_FORCE (1 << 29) 349 347 #define FLAG_RX_RESTART_NOW (1 << 30) 350 348 #define FLAG_MSI_TEST_FAILED (1 << 31) 349 + 350 + /* CRC Stripping defines */ 351 + #define FLAG2_CRC_STRIPPING (1 << 0) 351 352 352 353 #define E1000_RX_DESC_PS(R, i) \ 353 354 (&(((union e1000_rx_desc_packet_split *)((R).desc))[i]))
+6 -2
drivers/net/e1000e/ethtool.c
··· 1713 1713 wol->supported = 0; 1714 1714 wol->wolopts = 0; 1715 1715 1716 - if (!(adapter->flags & FLAG_HAS_WOL)) 1716 + if (!(adapter->flags & FLAG_HAS_WOL) || 1717 + !device_can_wakeup(&adapter->pdev->dev)) 1717 1718 return; 1718 1719 1719 1720 wol->supported = WAKE_UCAST | WAKE_MCAST | ··· 1752 1751 if (wol->wolopts & WAKE_MAGICSECURE) 1753 1752 return -EOPNOTSUPP; 1754 1753 1755 - if (!(adapter->flags & FLAG_HAS_WOL)) 1754 + if (!(adapter->flags & FLAG_HAS_WOL) || 1755 + !device_can_wakeup(&adapter->pdev->dev)) 1756 1756 return wol->wolopts ? -EOPNOTSUPP : 0; 1757 1757 1758 1758 /* these settings will always override what we currently have */ ··· 1771 1769 adapter->wol |= E1000_WUFC_LNKC; 1772 1770 if (wol->wolopts & WAKE_ARP) 1773 1771 adapter->wol |= E1000_WUFC_ARP; 1772 + 1773 + device_set_wakeup_enable(&adapter->pdev->dev, adapter->wol); 1774 1774 1775 1775 return 0; 1776 1776 }
+23 -2
drivers/net/e1000e/netdev.c
··· 499 499 goto next_desc; 500 500 } 501 501 502 + /* adjust length to remove Ethernet CRC */ 503 + if (!(adapter->flags2 & FLAG2_CRC_STRIPPING)) 504 + length -= 4; 505 + 502 506 total_rx_bytes += length; 503 507 total_rx_packets++; 504 508 ··· 808 804 pci_dma_sync_single_for_device(pdev, ps_page->dma, 809 805 PAGE_SIZE, PCI_DMA_FROMDEVICE); 810 806 807 + /* remove the CRC */ 808 + if (!(adapter->flags2 & FLAG2_CRC_STRIPPING)) 809 + l1 -= 4; 810 + 811 811 skb_put(skb, l1); 812 812 goto copydone; 813 813 } /* if */ ··· 832 824 skb->data_len += length; 833 825 skb->truesize += length; 834 826 } 827 + 828 + /* strip the ethernet crc, problem is we're using pages now so 829 + * this whole operation can get a little cpu intensive 830 + */ 831 + if (!(adapter->flags2 & FLAG2_CRC_STRIPPING)) 832 + pskb_trim(skb, skb->len - 4); 835 833 836 834 copydone: 837 835 total_rx_bytes += skb->len; ··· 2315 2301 else 2316 2302 rctl |= E1000_RCTL_LPE; 2317 2303 2318 - /* Enable hardware CRC frame stripping */ 2319 - rctl |= E1000_RCTL_SECRC; 2304 + /* Some systems expect that the CRC is included in SMBUS traffic. The 2305 + * hardware strips the CRC before sending to both SMBUS (BMC) and to 2306 + * host memory when this is enabled 2307 + */ 2308 + if (adapter->flags2 & FLAG2_CRC_STRIPPING) 2309 + rctl |= E1000_RCTL_SECRC; 2320 2310 2321 2311 /* Setup buffer sizes */ 2322 2312 rctl &= ~E1000_RCTL_SZ_4096; ··· 4784 4766 adapter->ei = ei; 4785 4767 adapter->pba = ei->pba; 4786 4768 adapter->flags = ei->flags; 4769 + adapter->flags2 = ei->flags2; 4787 4770 adapter->hw.adapter = adapter; 4788 4771 adapter->hw.mac.type = ei->mac; 4789 4772 adapter->msg_enable = (1 << NETIF_MSG_DRV | NETIF_MSG_PROBE) - 1; ··· 4989 4970 4990 4971 /* initialize the wol settings based on the eeprom settings */ 4991 4972 adapter->wol = adapter->eeprom_wol; 4973 + device_set_wakeup_enable(&adapter->pdev->dev, adapter->wol); 4992 4974 4993 4975 /* reset the hardware with the new settings */ 4994 4976 e1000e_reset(adapter); ··· 5028 5008 err_sw_init: 5029 5009 if (adapter->hw.flash_address) 5030 5010 iounmap(adapter->hw.flash_address); 5011 + e1000e_reset_interrupt_capability(adapter); 5031 5012 err_flashmap: 5032 5013 iounmap(adapter->hw.hw_addr); 5033 5014 err_ioremap:
+25
drivers/net/e1000e/param.c
··· 151 151 */ 152 152 E1000_PARAM(WriteProtectNVM, "Write-protect NVM [WARNING: disabling this can lead to corrupted NVM]"); 153 153 154 + /* 155 + * Enable CRC Stripping 156 + * 157 + * Valid Range: 0, 1 158 + * 159 + * Default Value: 1 (enabled) 160 + */ 161 + E1000_PARAM(CrcStripping, "Enable CRC Stripping, disable if your BMC needs " \ 162 + "the CRC"); 163 + 154 164 struct e1000_option { 155 165 enum { enable_option, range_option, list_option } type; 156 166 const char *name; ··· 412 402 if ((adapter->flags & FLAG_HAS_SMART_POWER_DOWN) 413 403 && spd) 414 404 adapter->flags |= FLAG_SMART_POWER_DOWN; 405 + } 406 + } 407 + { /* CRC Stripping */ 408 + const struct e1000_option opt = { 409 + .type = enable_option, 410 + .name = "CRC Stripping", 411 + .err = "defaulting to enabled", 412 + .def = OPTION_ENABLED 413 + }; 414 + 415 + if (num_CrcStripping > bd) { 416 + unsigned int crc_stripping = CrcStripping[bd]; 417 + e1000_validate_option(&crc_stripping, &opt, adapter); 418 + if (crc_stripping == OPTION_ENABLED) 419 + adapter->flags2 |= FLAG2_CRC_STRIPPING; 415 420 } 416 421 } 417 422 { /* Kumeran Lock Loss Workaround */
+8 -7
drivers/net/gianfar.c
··· 1407 1407 if (bdp->status & TXBD_DEF) 1408 1408 dev->stats.collisions++; 1409 1409 1410 + /* Unmap the DMA memory */ 1411 + dma_unmap_single(&priv->dev->dev, bdp->bufPtr, 1412 + bdp->length, DMA_TO_DEVICE); 1413 + 1410 1414 /* Free the sk buffer associated with this TxBD */ 1411 1415 dev_kfree_skb_irq(priv->tx_skbuff[priv->skb_dirtytx]); 1412 1416 ··· 1670 1666 1671 1667 skb = priv->rx_skbuff[priv->skb_currx]; 1672 1668 1669 + dma_unmap_single(&priv->dev->dev, bdp->bufPtr, 1670 + priv->rx_buffer_size, DMA_FROM_DEVICE); 1671 + 1673 1672 /* We drop the frame if we failed to allocate a new buffer */ 1674 1673 if (unlikely(!newskb || !(bdp->status & RXBD_LAST) || 1675 1674 bdp->status & RXBD_ERR)) { ··· 1681 1674 if (unlikely(!newskb)) 1682 1675 newskb = skb; 1683 1676 1684 - if (skb) { 1685 - dma_unmap_single(&priv->dev->dev, 1686 - bdp->bufPtr, 1687 - priv->rx_buffer_size, 1688 - DMA_FROM_DEVICE); 1689 - 1677 + if (skb) 1690 1678 dev_kfree_skb_any(skb); 1691 - } 1692 1679 } else { 1693 1680 /* Increment the number of packets */ 1694 1681 dev->stats.rx_packets++;
+6 -2
drivers/net/igb/igb_ethtool.c
··· 1776 1776 1777 1777 /* this function will set ->supported = 0 and return 1 if wol is not 1778 1778 * supported by this hardware */ 1779 - if (igb_wol_exclusion(adapter, wol)) 1779 + if (igb_wol_exclusion(adapter, wol) || 1780 + !device_can_wakeup(&adapter->pdev->dev)) 1780 1781 return; 1781 1782 1782 1783 /* apply any specific unsupported masks here */ ··· 1806 1805 if (wol->wolopts & (WAKE_PHY | WAKE_ARP | WAKE_MAGICSECURE)) 1807 1806 return -EOPNOTSUPP; 1808 1807 1809 - if (igb_wol_exclusion(adapter, wol)) 1808 + if (igb_wol_exclusion(adapter, wol) || 1809 + !device_can_wakeup(&adapter->pdev->dev)) 1810 1810 return wol->wolopts ? -EOPNOTSUPP : 0; 1811 1811 1812 1812 switch (hw->device_id) { ··· 1826 1824 adapter->wol |= E1000_WUFC_BC; 1827 1825 if (wol->wolopts & WAKE_MAGIC) 1828 1826 adapter->wol |= E1000_WUFC_MAG; 1827 + 1828 + device_set_wakeup_enable(&adapter->pdev->dev, adapter->wol); 1829 1829 1830 1830 return 0; 1831 1831 }
+4 -4
drivers/net/igb/igb_main.c
··· 1019 1019 state &= ~PCIE_LINK_STATE_L0S; 1020 1020 pci_write_config_word(us_dev, pos + PCI_EXP_LNKCTL, 1021 1021 state); 1022 - printk(KERN_INFO "Disabling ASPM L0s upstream switch " 1023 - "port %x:%x.%x\n", us_dev->bus->number, 1024 - PCI_SLOT(us_dev->devfn), 1025 - PCI_FUNC(us_dev->devfn)); 1022 + dev_info(&pdev->dev, 1023 + "Disabling ASPM L0s upstream switch port %s\n", 1024 + pci_name(us_dev)); 1026 1025 } 1027 1026 default: 1028 1027 break; ··· 1243 1244 1244 1245 /* initialize the wol settings based on the eeprom settings */ 1245 1246 adapter->wol = adapter->eeprom_wol; 1247 + device_set_wakeup_enable(&adapter->pdev->dev, adapter->wol); 1246 1248 1247 1249 /* reset the hardware with the new settings */ 1248 1250 igb_reset(adapter);
+4 -4
drivers/net/mlx4/en_netdev.c
··· 656 656 /* Configure port */ 657 657 err = mlx4_SET_PORT_general(mdev->dev, priv->port, 658 658 priv->rx_skb_size + ETH_FCS_LEN, 659 - mdev->profile.tx_pause, 660 - mdev->profile.tx_ppp, 661 - mdev->profile.rx_pause, 662 - mdev->profile.rx_ppp); 659 + priv->prof->tx_pause, 660 + priv->prof->tx_ppp, 661 + priv->prof->rx_pause, 662 + priv->prof->rx_ppp); 663 663 if (err) { 664 664 mlx4_err(mdev, "Failed setting port general configurations" 665 665 " for port %d, with error %d\n", priv->port, err);
+16 -14
drivers/net/mlx4/en_params.c
··· 90 90 int mlx4_en_get_profile(struct mlx4_en_dev *mdev) 91 91 { 92 92 struct mlx4_en_profile *params = &mdev->profile; 93 + int i; 93 94 94 95 params->rx_moder_cnt = min_t(int, rx_moder_cnt, MLX4_EN_AUTO_CONF); 95 96 params->rx_moder_time = min_t(int, rx_moder_time, MLX4_EN_AUTO_CONF); ··· 98 97 params->rss_xor = (rss_xor != 0); 99 98 params->rss_mask = rss_mask & 0x1f; 100 99 params->num_lro = min_t(int, num_lro , MLX4_EN_MAX_LRO_DESCRIPTORS); 101 - params->rx_pause = pprx; 102 - params->rx_ppp = pfcrx; 103 - params->tx_pause = pptx; 104 - params->tx_ppp = pfctx; 105 - if (params->rx_ppp || params->tx_ppp) { 100 + for (i = 1; i <= MLX4_MAX_PORTS; i++) { 101 + params->prof[i].rx_pause = pprx; 102 + params->prof[i].rx_ppp = pfcrx; 103 + params->prof[i].tx_pause = pptx; 104 + params->prof[i].tx_ppp = pfctx; 105 + } 106 + if (pfcrx || pfctx) { 106 107 params->prof[1].tx_ring_num = MLX4_EN_TX_RING_NUM; 107 108 params->prof[2].tx_ring_num = MLX4_EN_TX_RING_NUM; 108 109 } else { ··· 410 407 struct mlx4_en_dev *mdev = priv->mdev; 411 408 int err; 412 409 413 - mdev->profile.tx_pause = pause->tx_pause != 0; 414 - mdev->profile.rx_pause = pause->rx_pause != 0; 410 + priv->prof->tx_pause = pause->tx_pause != 0; 411 + priv->prof->rx_pause = pause->rx_pause != 0; 415 412 err = mlx4_SET_PORT_general(mdev->dev, priv->port, 416 413 priv->rx_skb_size + ETH_FCS_LEN, 417 - mdev->profile.tx_pause, 418 - mdev->profile.tx_ppp, 419 - mdev->profile.rx_pause, 420 - mdev->profile.rx_ppp); 414 + priv->prof->tx_pause, 415 + priv->prof->tx_ppp, 416 + priv->prof->rx_pause, 417 + priv->prof->rx_ppp); 421 418 if (err) 422 419 mlx4_err(mdev, "Failed setting pause params to\n"); 423 420 ··· 428 425 struct ethtool_pauseparam *pause) 429 426 { 430 427 struct mlx4_en_priv *priv = netdev_priv(dev); 431 - struct mlx4_en_dev *mdev = priv->mdev; 432 428 433 - pause->tx_pause = mdev->profile.tx_pause; 434 - pause->rx_pause = mdev->profile.rx_pause; 429 + pause->tx_pause = priv->prof->tx_pause; 430 + pause->rx_pause = priv->prof->rx_pause; 435 431 } 436 432 437 433 static void mlx4_en_get_ringparam(struct net_device *dev,
+4 -4
drivers/net/mlx4/mlx4_en.h
··· 322 322 u32 rx_ring_num; 323 323 u32 tx_ring_size; 324 324 u32 rx_ring_size; 325 + u8 rx_pause; 326 + u8 rx_ppp; 327 + u8 tx_pause; 328 + u8 tx_ppp; 325 329 }; 326 330 327 331 struct mlx4_en_profile { ··· 337 333 int rx_moder_cnt; 338 334 int rx_moder_time; 339 335 int auto_moder; 340 - u8 rx_pause; 341 - u8 rx_ppp; 342 - u8 tx_pause; 343 - u8 tx_ppp; 344 336 u8 no_reset; 345 337 struct mlx4_en_port_profile prof[MLX4_MAX_PORTS + 1]; 346 338 };
+282 -8
drivers/net/niu.c
··· 33 33 34 34 #define DRV_MODULE_NAME "niu" 35 35 #define PFX DRV_MODULE_NAME ": " 36 - #define DRV_MODULE_VERSION "0.9" 37 - #define DRV_MODULE_RELDATE "May 4, 2008" 36 + #define DRV_MODULE_VERSION "1.0" 37 + #define DRV_MODULE_RELDATE "Nov 14, 2008" 38 38 39 39 static char version[] __devinitdata = 40 40 DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n"; ··· 406 406 } 407 407 408 408 /* Mode is always 10G fiber. */ 409 - static int serdes_init_niu(struct niu *np) 409 + static int serdes_init_niu_10g_fiber(struct niu *np) 410 410 { 411 411 struct niu_link_config *lp = &np->link_config; 412 412 u32 tx_cfg, rx_cfg; ··· 440 440 return err; 441 441 } 442 442 443 + return 0; 444 + } 445 + 446 + static int serdes_init_niu_1g_serdes(struct niu *np) 447 + { 448 + struct niu_link_config *lp = &np->link_config; 449 + u16 pll_cfg, pll_sts; 450 + int max_retry = 100; 451 + u64 sig, mask, val; 452 + u32 tx_cfg, rx_cfg; 453 + unsigned long i; 454 + int err; 455 + 456 + tx_cfg = (PLL_TX_CFG_ENTX | PLL_TX_CFG_SWING_1375MV | 457 + PLL_TX_CFG_RATE_HALF); 458 + rx_cfg = (PLL_RX_CFG_ENRX | PLL_RX_CFG_TERM_0P8VDDT | 459 + PLL_RX_CFG_ALIGN_ENA | PLL_RX_CFG_LOS_LTHRESH | 460 + PLL_RX_CFG_RATE_HALF); 461 + 462 + if (np->port == 0) 463 + rx_cfg |= PLL_RX_CFG_EQ_LP_ADAPTIVE; 464 + 465 + if (lp->loopback_mode == LOOPBACK_PHY) { 466 + u16 test_cfg = PLL_TEST_CFG_LOOPBACK_CML_DIS; 467 + 468 + mdio_write(np, np->port, NIU_ESR2_DEV_ADDR, 469 + ESR2_TI_PLL_TEST_CFG_L, test_cfg); 470 + 471 + tx_cfg |= PLL_TX_CFG_ENTEST; 472 + rx_cfg |= PLL_RX_CFG_ENTEST; 473 + } 474 + 475 + /* Initialize PLL for 1G */ 476 + pll_cfg = (PLL_CFG_ENPLL | PLL_CFG_MPY_8X); 477 + 478 + err = mdio_write(np, np->port, NIU_ESR2_DEV_ADDR, 479 + ESR2_TI_PLL_CFG_L, pll_cfg); 480 + if (err) { 481 + dev_err(np->device, PFX "NIU Port %d " 482 + "serdes_init_niu_1g_serdes: " 483 + "mdio write to ESR2_TI_PLL_CFG_L failed", np->port); 484 + return err; 485 + } 486 + 487 + pll_sts = PLL_CFG_ENPLL; 488 + 489 + err = mdio_write(np, np->port, NIU_ESR2_DEV_ADDR, 490 + ESR2_TI_PLL_STS_L, pll_sts); 491 + if (err) { 492 + dev_err(np->device, PFX "NIU Port %d " 493 + "serdes_init_niu_1g_serdes: " 494 + "mdio write to ESR2_TI_PLL_STS_L failed", np->port); 495 + return err; 496 + } 497 + 498 + udelay(200); 499 + 500 + /* Initialize all 4 lanes of the SERDES. */ 501 + for (i = 0; i < 4; i++) { 502 + err = esr2_set_tx_cfg(np, i, tx_cfg); 503 + if (err) 504 + return err; 505 + } 506 + 507 + for (i = 0; i < 4; i++) { 508 + err = esr2_set_rx_cfg(np, i, rx_cfg); 509 + if (err) 510 + return err; 511 + } 512 + 513 + switch (np->port) { 514 + case 0: 515 + val = (ESR_INT_SRDY0_P0 | ESR_INT_DET0_P0); 516 + mask = val; 517 + break; 518 + 519 + case 1: 520 + val = (ESR_INT_SRDY0_P1 | ESR_INT_DET0_P1); 521 + mask = val; 522 + break; 523 + 524 + default: 525 + return -EINVAL; 526 + } 527 + 528 + while (max_retry--) { 529 + sig = nr64(ESR_INT_SIGNALS); 530 + if ((sig & mask) == val) 531 + break; 532 + 533 + mdelay(500); 534 + } 535 + 536 + if ((sig & mask) != val) { 537 + dev_err(np->device, PFX "Port %u signal bits [%08x] are not " 538 + "[%08x]\n", np->port, (int) (sig & mask), (int) val); 539 + return -ENODEV; 540 + } 541 + 542 + return 0; 543 + } 544 + 545 + static int serdes_init_niu_10g_serdes(struct niu *np) 546 + { 547 + struct niu_link_config *lp = &np->link_config; 548 + u32 tx_cfg, rx_cfg, pll_cfg, pll_sts; 549 + int max_retry = 100; 550 + u64 sig, mask, val; 551 + unsigned long i; 552 + int err; 553 + 554 + tx_cfg = (PLL_TX_CFG_ENTX | PLL_TX_CFG_SWING_1375MV); 555 + rx_cfg = (PLL_RX_CFG_ENRX | PLL_RX_CFG_TERM_0P8VDDT | 556 + PLL_RX_CFG_ALIGN_ENA | PLL_RX_CFG_LOS_LTHRESH | 557 + PLL_RX_CFG_EQ_LP_ADAPTIVE); 558 + 559 + if (lp->loopback_mode == LOOPBACK_PHY) { 560 + u16 test_cfg = PLL_TEST_CFG_LOOPBACK_CML_DIS; 561 + 562 + mdio_write(np, np->port, NIU_ESR2_DEV_ADDR, 563 + ESR2_TI_PLL_TEST_CFG_L, test_cfg); 564 + 565 + tx_cfg |= PLL_TX_CFG_ENTEST; 566 + rx_cfg |= PLL_RX_CFG_ENTEST; 567 + } 568 + 569 + /* Initialize PLL for 10G */ 570 + pll_cfg = (PLL_CFG_ENPLL | PLL_CFG_MPY_10X); 571 + 572 + err = mdio_write(np, np->port, NIU_ESR2_DEV_ADDR, 573 + ESR2_TI_PLL_CFG_L, pll_cfg & 0xffff); 574 + if (err) { 575 + dev_err(np->device, PFX "NIU Port %d " 576 + "serdes_init_niu_10g_serdes: " 577 + "mdio write to ESR2_TI_PLL_CFG_L failed", np->port); 578 + return err; 579 + } 580 + 581 + pll_sts = PLL_CFG_ENPLL; 582 + 583 + err = mdio_write(np, np->port, NIU_ESR2_DEV_ADDR, 584 + ESR2_TI_PLL_STS_L, pll_sts & 0xffff); 585 + if (err) { 586 + dev_err(np->device, PFX "NIU Port %d " 587 + "serdes_init_niu_10g_serdes: " 588 + "mdio write to ESR2_TI_PLL_STS_L failed", np->port); 589 + return err; 590 + } 591 + 592 + udelay(200); 593 + 594 + /* Initialize all 4 lanes of the SERDES. */ 595 + for (i = 0; i < 4; i++) { 596 + err = esr2_set_tx_cfg(np, i, tx_cfg); 597 + if (err) 598 + return err; 599 + } 600 + 601 + for (i = 0; i < 4; i++) { 602 + err = esr2_set_rx_cfg(np, i, rx_cfg); 603 + if (err) 604 + return err; 605 + } 606 + 607 + /* check if serdes is ready */ 608 + 609 + switch (np->port) { 610 + case 0: 611 + mask = ESR_INT_SIGNALS_P0_BITS; 612 + val = (ESR_INT_SRDY0_P0 | 613 + ESR_INT_DET0_P0 | 614 + ESR_INT_XSRDY_P0 | 615 + ESR_INT_XDP_P0_CH3 | 616 + ESR_INT_XDP_P0_CH2 | 617 + ESR_INT_XDP_P0_CH1 | 618 + ESR_INT_XDP_P0_CH0); 619 + break; 620 + 621 + case 1: 622 + mask = ESR_INT_SIGNALS_P1_BITS; 623 + val = (ESR_INT_SRDY0_P1 | 624 + ESR_INT_DET0_P1 | 625 + ESR_INT_XSRDY_P1 | 626 + ESR_INT_XDP_P1_CH3 | 627 + ESR_INT_XDP_P1_CH2 | 628 + ESR_INT_XDP_P1_CH1 | 629 + ESR_INT_XDP_P1_CH0); 630 + break; 631 + 632 + default: 633 + return -EINVAL; 634 + } 635 + 636 + while (max_retry--) { 637 + sig = nr64(ESR_INT_SIGNALS); 638 + if ((sig & mask) == val) 639 + break; 640 + 641 + mdelay(500); 642 + } 643 + 644 + if ((sig & mask) != val) { 645 + pr_info(PFX "NIU Port %u signal bits [%08x] are not " 646 + "[%08x] for 10G...trying 1G\n", 647 + np->port, (int) (sig & mask), (int) val); 648 + 649 + /* 10G failed, try initializing at 1G */ 650 + err = serdes_init_niu_1g_serdes(np); 651 + if (!err) { 652 + np->flags &= ~NIU_FLAGS_10G; 653 + np->mac_xcvr = MAC_XCVR_PCS; 654 + } else { 655 + dev_err(np->device, PFX "Port %u 10G/1G SERDES " 656 + "Link Failed \n", np->port); 657 + return -ENODEV; 658 + } 659 + } 443 660 return 0; 444 661 } 445 662 ··· 2171 1954 .link_status = link_status_10g_serdes, 2172 1955 }; 2173 1956 1957 + static const struct niu_phy_ops phy_ops_10g_serdes_niu = { 1958 + .serdes_init = serdes_init_niu_10g_serdes, 1959 + .link_status = link_status_10g_serdes, 1960 + }; 1961 + 1962 + static const struct niu_phy_ops phy_ops_1g_serdes_niu = { 1963 + .serdes_init = serdes_init_niu_1g_serdes, 1964 + .link_status = link_status_1g_serdes, 1965 + }; 1966 + 2174 1967 static const struct niu_phy_ops phy_ops_1g_rgmii = { 2175 1968 .xcvr_init = xcvr_init_1g_rgmii, 2176 1969 .link_status = link_status_1g_rgmii, 2177 1970 }; 2178 1971 2179 1972 static const struct niu_phy_ops phy_ops_10g_fiber_niu = { 2180 - .serdes_init = serdes_init_niu, 1973 + .serdes_init = serdes_init_niu_10g_fiber, 2181 1974 .xcvr_init = xcvr_init_10g, 2182 1975 .link_status = link_status_10g, 2183 1976 }; ··· 2225 1998 u32 phy_addr_base; 2226 1999 }; 2227 2000 2228 - static const struct niu_phy_template phy_template_niu = { 2001 + static const struct niu_phy_template phy_template_niu_10g_fiber = { 2229 2002 .ops = &phy_ops_10g_fiber_niu, 2230 2003 .phy_addr_base = 16, 2004 + }; 2005 + 2006 + static const struct niu_phy_template phy_template_niu_10g_serdes = { 2007 + .ops = &phy_ops_10g_serdes_niu, 2008 + .phy_addr_base = 0, 2009 + }; 2010 + 2011 + static const struct niu_phy_template phy_template_niu_1g_serdes = { 2012 + .ops = &phy_ops_1g_serdes_niu, 2013 + .phy_addr_base = 0, 2231 2014 }; 2232 2015 2233 2016 static const struct niu_phy_template phy_template_10g_fiber = { ··· 2419 2182 u32 phy_addr_off = 0; 2420 2183 2421 2184 if (plat_type == PLAT_TYPE_NIU) { 2422 - tp = &phy_template_niu; 2423 - phy_addr_off += np->port; 2185 + switch (np->flags & 2186 + (NIU_FLAGS_10G | 2187 + NIU_FLAGS_FIBER | 2188 + NIU_FLAGS_XCVR_SERDES)) { 2189 + case NIU_FLAGS_10G | NIU_FLAGS_XCVR_SERDES: 2190 + /* 10G Serdes */ 2191 + tp = &phy_template_niu_10g_serdes; 2192 + break; 2193 + case NIU_FLAGS_XCVR_SERDES: 2194 + /* 1G Serdes */ 2195 + tp = &phy_template_niu_1g_serdes; 2196 + break; 2197 + case NIU_FLAGS_10G | NIU_FLAGS_FIBER: 2198 + /* 10G Fiber */ 2199 + default: 2200 + tp = &phy_template_niu_10g_fiber; 2201 + phy_addr_off += np->port; 2202 + break; 2203 + } 2424 2204 } else { 2425 2205 switch (np->flags & 2426 2206 (NIU_FLAGS_10G | ··· 7467 7213 np->flags |= NIU_FLAGS_10G; 7468 7214 np->flags &= ~NIU_FLAGS_FIBER; 7469 7215 np->mac_xcvr = MAC_XCVR_XPCS; 7216 + } else if (!strcmp(phy_prop, "xgsd") || !strcmp(phy_prop, "gsd")) { 7217 + /* 10G Serdes or 1G Serdes, default to 10G */ 7218 + np->flags |= NIU_FLAGS_10G; 7219 + np->flags &= ~NIU_FLAGS_FIBER; 7220 + np->flags |= NIU_FLAGS_XCVR_SERDES; 7221 + np->mac_xcvr = MAC_XCVR_XPCS; 7470 7222 } else { 7471 7223 return -EINVAL; 7472 7224 } ··· 8001 7741 u32 val; 8002 7742 int err; 8003 7743 7744 + num_10g = num_1g = 0; 7745 + 8004 7746 if (!strcmp(np->vpd.model, NIU_ALONSO_MDL_STR) || 8005 7747 !strcmp(np->vpd.model, NIU_KIMI_MDL_STR)) { 8006 7748 num_10g = 0; ··· 8019 7757 parent->num_ports = 2; 8020 7758 val = (phy_encode(PORT_TYPE_10G, 0) | 8021 7759 phy_encode(PORT_TYPE_10G, 1)); 7760 + } else if ((np->flags & NIU_FLAGS_XCVR_SERDES) && 7761 + (parent->plat_type == PLAT_TYPE_NIU)) { 7762 + /* this is the Monza case */ 7763 + if (np->flags & NIU_FLAGS_10G) { 7764 + val = (phy_encode(PORT_TYPE_10G, 0) | 7765 + phy_encode(PORT_TYPE_10G, 1)); 7766 + } else { 7767 + val = (phy_encode(PORT_TYPE_1G, 0) | 7768 + phy_encode(PORT_TYPE_1G, 1)); 7769 + } 8022 7770 } else { 8023 7771 err = fill_phy_probe_info(np, parent, info); 8024 7772 if (err) ··· 8928 8656 dev->name, 8929 8657 (np->flags & NIU_FLAGS_XMAC ? "XMAC" : "BMAC"), 8930 8658 (np->flags & NIU_FLAGS_10G ? "10G" : "1G"), 8931 - (np->flags & NIU_FLAGS_FIBER ? "FIBER" : "COPPER"), 8659 + (np->flags & NIU_FLAGS_FIBER ? "FIBER" : 8660 + (np->flags & NIU_FLAGS_XCVR_SERDES ? "SERDES" : 8661 + "COPPER")), 8932 8662 (np->mac_xcvr == MAC_XCVR_MII ? "MII" : 8933 8663 (np->mac_xcvr == MAC_XCVR_PCS ? "PCS" : "XPCS")), 8934 8664 np->vpd.phy_type);
+13
drivers/net/niu.h
··· 1048 1048 #define PLL_CFG_LD_SHIFT 8 1049 1049 #define PLL_CFG_MPY 0x0000001e 1050 1050 #define PLL_CFG_MPY_SHIFT 1 1051 + #define PLL_CFG_MPY_4X 0x0 1052 + #define PLL_CFG_MPY_5X 0x00000002 1053 + #define PLL_CFG_MPY_6X 0x00000004 1054 + #define PLL_CFG_MPY_8X 0x00000008 1055 + #define PLL_CFG_MPY_10X 0x0000000a 1056 + #define PLL_CFG_MPY_12X 0x0000000c 1057 + #define PLL_CFG_MPY_12P5X 0x0000000e 1051 1058 #define PLL_CFG_ENPLL 0x00000001 1052 1059 1053 1060 #define ESR2_TI_PLL_STS_L (ESR2_BASE + 0x002) ··· 1100 1093 #define PLL_TX_CFG_INVPAIR 0x00000080 1101 1094 #define PLL_TX_CFG_RATE 0x00000060 1102 1095 #define PLL_TX_CFG_RATE_SHIFT 5 1096 + #define PLL_TX_CFG_RATE_FULL 0x0 1097 + #define PLL_TX_CFG_RATE_HALF 0x20 1098 + #define PLL_TX_CFG_RATE_QUAD 0x40 1103 1099 #define PLL_TX_CFG_BUSWIDTH 0x0000001c 1104 1100 #define PLL_TX_CFG_BUSWIDTH_SHIFT 2 1105 1101 #define PLL_TX_CFG_ENTEST 0x00000002 ··· 1142 1132 #define PLL_RX_CFG_INVPAIR 0x00000080 1143 1133 #define PLL_RX_CFG_RATE 0x00000060 1144 1134 #define PLL_RX_CFG_RATE_SHIFT 5 1135 + #define PLL_RX_CFG_RATE_FULL 0x0 1136 + #define PLL_RX_CFG_RATE_HALF 0x20 1137 + #define PLL_RX_CFG_RATE_QUAD 0x40 1145 1138 #define PLL_RX_CFG_BUSWIDTH 0x0000001c 1146 1139 #define PLL_RX_CFG_BUSWIDTH_SHIFT 2 1147 1140 #define PLL_RX_CFG_ENTEST 0x00000002
+66
drivers/net/phy/marvell.c
··· 227 227 return 0; 228 228 } 229 229 230 + static int m88e1118_config_aneg(struct phy_device *phydev) 231 + { 232 + int err; 233 + 234 + err = phy_write(phydev, MII_BMCR, BMCR_RESET); 235 + if (err < 0) 236 + return err; 237 + 238 + err = phy_write(phydev, MII_M1011_PHY_SCR, 239 + MII_M1011_PHY_SCR_AUTO_CROSS); 240 + if (err < 0) 241 + return err; 242 + 243 + err = genphy_config_aneg(phydev); 244 + return 0; 245 + } 246 + 247 + static int m88e1118_config_init(struct phy_device *phydev) 248 + { 249 + int err; 250 + 251 + /* Change address */ 252 + err = phy_write(phydev, 0x16, 0x0002); 253 + if (err < 0) 254 + return err; 255 + 256 + /* Enable 1000 Mbit */ 257 + err = phy_write(phydev, 0x15, 0x1070); 258 + if (err < 0) 259 + return err; 260 + 261 + /* Change address */ 262 + err = phy_write(phydev, 0x16, 0x0003); 263 + if (err < 0) 264 + return err; 265 + 266 + /* Adjust LED Control */ 267 + err = phy_write(phydev, 0x10, 0x021e); 268 + if (err < 0) 269 + return err; 270 + 271 + /* Reset address */ 272 + err = phy_write(phydev, 0x16, 0x0); 273 + if (err < 0) 274 + return err; 275 + 276 + err = phy_write(phydev, MII_BMCR, BMCR_RESET); 277 + if (err < 0) 278 + return err; 279 + 280 + return 0; 281 + } 282 + 230 283 static int m88e1145_config_init(struct phy_device *phydev) 231 284 { 232 285 int err; ··· 467 414 .ack_interrupt = &marvell_ack_interrupt, 468 415 .config_intr = &marvell_config_intr, 469 416 .driver = { .owner = THIS_MODULE }, 417 + }, 418 + { 419 + .phy_id = 0x01410e10, 420 + .phy_id_mask = 0xfffffff0, 421 + .name = "Marvell 88E1118", 422 + .features = PHY_GBIT_FEATURES, 423 + .flags = PHY_HAS_INTERRUPT, 424 + .config_init = &m88e1118_config_init, 425 + .config_aneg = &m88e1118_config_aneg, 426 + .read_status = &genphy_read_status, 427 + .ack_interrupt = &marvell_ack_interrupt, 428 + .config_intr = &marvell_config_intr, 429 + .driver = {.owner = THIS_MODULE,}, 470 430 }, 471 431 { 472 432 .phy_id = 0x01410cd0,
+1 -1
drivers/net/phy/mdio_bus.c
··· 136 136 BUG_ON(bus->state != MDIOBUS_REGISTERED); 137 137 bus->state = MDIOBUS_UNREGISTERED; 138 138 139 - device_unregister(&bus->dev); 139 + device_del(&bus->dev); 140 140 for (i = 0; i < PHY_MAX_ADDR; i++) { 141 141 if (bus->phy_map[i]) 142 142 device_unregister(&bus->phy_map[i]->dev);
+2 -2
drivers/net/phy/phy_device.c
··· 227 227 if (r) 228 228 return ERR_PTR(r); 229 229 230 - /* If the phy_id is all Fs, there is no device there */ 231 - if (0xffffffff == phy_id) 230 + /* If the phy_id is all Fs or all 0s, there is no device there */ 231 + if ((0xffff == phy_id) || (0x00 == phy_id)) 232 232 return NULL; 233 233 234 234 dev = phy_device_create(bus, addr, phy_id);
+5 -14
drivers/net/qla3xxx.c
··· 1515 1515 linkState = LS_UP; 1516 1516 } else { 1517 1517 linkState = LS_DOWN; 1518 - if (netif_msg_link(qdev)) 1519 - printk(KERN_WARNING PFX 1520 - "%s: Link is down.\n", qdev->ndev->name); 1521 1518 } 1522 1519 return linkState; 1523 1520 } ··· 1578 1581 ql_mac_enable(qdev, 1); 1579 1582 } 1580 1583 1581 - if (netif_msg_link(qdev)) 1582 - printk(KERN_DEBUG PFX 1583 - "%s: Change port_link_state LS_DOWN to LS_UP.\n", 1584 - qdev->ndev->name); 1585 1584 qdev->port_link_state = LS_UP; 1586 1585 netif_start_queue(qdev->ndev); 1587 1586 netif_carrier_on(qdev->ndev); ··· 1648 1655 /* Fall Through */ 1649 1656 1650 1657 case LS_DOWN: 1651 - if (netif_msg_link(qdev)) 1652 - printk(KERN_DEBUG PFX 1653 - "%s: port_link_state = LS_DOWN.\n", 1654 - qdev->ndev->name); 1655 1658 if (curr_link_state == LS_UP) { 1656 1659 if (netif_msg_link(qdev)) 1657 - printk(KERN_DEBUG PFX 1658 - "%s: curr_link_state = LS_UP.\n", 1660 + printk(KERN_INFO PFX "%s: Link is up.\n", 1659 1661 qdev->ndev->name); 1660 1662 if (ql_is_auto_neg_complete(qdev)) 1661 1663 ql_finish_auto_neg(qdev); ··· 1658 1670 if (qdev->port_link_state == LS_UP) 1659 1671 ql_link_down_detect_clear(qdev); 1660 1672 1673 + qdev->port_link_state = LS_UP; 1661 1674 } 1662 1675 break; 1663 1676 ··· 1667 1678 * See if the link is currently down or went down and came 1668 1679 * back up 1669 1680 */ 1670 - if ((curr_link_state == LS_DOWN) || ql_link_down_detect(qdev)) { 1681 + if (curr_link_state == LS_DOWN) { 1671 1682 if (netif_msg_link(qdev)) 1672 1683 printk(KERN_INFO PFX "%s: Link is down.\n", 1673 1684 qdev->ndev->name); 1674 1685 qdev->port_link_state = LS_DOWN; 1675 1686 } 1687 + if (ql_link_down_detect(qdev)) 1688 + qdev->port_link_state = LS_DOWN; 1676 1689 break; 1677 1690 } 1678 1691 spin_unlock_irqrestore(&qdev->hw_lock, hw_flags);
+3 -3
drivers/net/ucc_geth_ethtool.c
··· 323 323 if (stats_mode & UCC_GETH_STATISTICS_GATHERING_MODE_HARDWARE) { 324 324 base = (u32 __iomem *)&ugeth->ug_regs->tx64; 325 325 for (i = 0; i < UEC_HW_STATS_LEN; i++) 326 - data[j++] = (u64)in_be32(&base[i]); 326 + data[j++] = in_be32(&base[i]); 327 327 } 328 328 if (stats_mode & UCC_GETH_STATISTICS_GATHERING_MODE_FIRMWARE_TX) { 329 329 base = (u32 __iomem *)ugeth->p_tx_fw_statistics_pram; 330 330 for (i = 0; i < UEC_TX_FW_STATS_LEN; i++) 331 - data[j++] = (u64)in_be32(&base[i]); 331 + data[j++] = base ? in_be32(&base[i]) : 0; 332 332 } 333 333 if (stats_mode & UCC_GETH_STATISTICS_GATHERING_MODE_FIRMWARE_RX) { 334 334 base = (u32 __iomem *)ugeth->p_rx_fw_statistics_pram; 335 335 for (i = 0; i < UEC_RX_FW_STATS_LEN; i++) 336 - data[j++] = (u64)in_be32(&base[i]); 336 + data[j++] = base ? in_be32(&base[i]) : 0; 337 337 } 338 338 } 339 339
+1 -1
drivers/net/via-velocity.c
··· 2296 2296 } 2297 2297 2298 2298 mac_set_cam_mask(regs, vptr->mCAMmask); 2299 - rx_mode = (RCR_AM | RCR_AB); 2299 + rx_mode = RCR_AM | RCR_AB | RCR_AP; 2300 2300 } 2301 2301 if (dev->mtu > 1500) 2302 2302 rx_mode |= RCR_AL;
+3 -2
include/linux/lockdep.h
··· 331 331 # define lock_set_subclass(l, s, i) do { } while (0) 332 332 # define lockdep_init() do { } while (0) 333 333 # define lockdep_info() do { } while (0) 334 - # define lockdep_init_map(lock, name, key, sub) do { (void)(key); } while (0) 334 + # define lockdep_init_map(lock, name, key, sub) \ 335 + do { (void)(name); (void)(key); } while (0) 335 336 # define lockdep_set_class(lock, key) do { (void)(key); } while (0) 336 337 # define lockdep_set_class_and_name(lock, key, name) \ 337 - do { (void)(key); } while (0) 338 + do { (void)(key); (void)(name); } while (0) 338 339 #define lockdep_set_class_and_subclass(lock, key, sub) \ 339 340 do { (void)(key); } while (0) 340 341 #define lockdep_set_subclass(lock, sub) do { } while (0)
+1 -1
include/net/sock.h
··· 815 815 */ 816 816 #define sock_lock_init_class_and_name(sk, sname, skey, name, key) \ 817 817 do { \ 818 - sk->sk_lock.owned = 0; \ 818 + sk->sk_lock.owned = 0; \ 819 819 init_waitqueue_head(&sk->sk_lock.wq); \ 820 820 spin_lock_init(&(sk)->sk_lock.slock); \ 821 821 debug_check_no_locks_freed((void *)&(sk)->sk_lock, \
+3 -1
net/core/rtnetlink.c
··· 878 878 if (ifm->ifi_change) 879 879 flags = (flags & ifm->ifi_change) | 880 880 (dev->flags & ~ifm->ifi_change); 881 - dev_change_flags(dev, flags); 881 + err = dev_change_flags(dev, flags); 882 + if (err < 0) 883 + goto errout; 882 884 } 883 885 884 886 if (tb[IFLA_TXQLEN])
-2
net/core/scm.c
··· 75 75 if (!fpl) 76 76 return -ENOMEM; 77 77 *fplp = fpl; 78 - INIT_LIST_HEAD(&fpl->list); 79 78 fpl->count = 0; 80 79 } 81 80 fpp = &fpl->fp[fpl->count]; ··· 300 301 301 302 new_fpl = kmalloc(sizeof(*fpl), GFP_KERNEL); 302 303 if (new_fpl) { 303 - INIT_LIST_HEAD(&new_fpl->list); 304 304 for (i=fpl->count-1; i>=0; i--) 305 305 get_file(fpl->fp[i]); 306 306 memcpy(new_fpl, fpl, sizeof(*fpl));
-2
net/core/sock.c
··· 136 136 static struct lock_class_key af_family_keys[AF_MAX]; 137 137 static struct lock_class_key af_family_slock_keys[AF_MAX]; 138 138 139 - #ifdef CONFIG_DEBUG_LOCK_ALLOC 140 139 /* 141 140 * Make lock validator output more readable. (we pre-construct these 142 141 * strings build-time, so that runtime initialization of socket ··· 186 187 "clock-AF_RXRPC" , "clock-AF_ISDN" , "clock-AF_PHONET" , 187 188 "clock-AF_MAX" 188 189 }; 189 - #endif 190 190 191 191 /* 192 192 * sk_callback_lock locking rules are per-address-family,
+9 -1
net/ipv4/ip_input.c
··· 209 209 210 210 hash = protocol & (MAX_INET_PROTOS - 1); 211 211 ipprot = rcu_dereference(inet_protos[hash]); 212 - if (ipprot != NULL && (net == &init_net || ipprot->netns_ok)) { 212 + if (ipprot != NULL) { 213 213 int ret; 214 + 215 + if (!net_eq(net, &init_net) && !ipprot->netns_ok) { 216 + if (net_ratelimit()) 217 + printk("%s: proto %d isn't netns-ready\n", 218 + __func__, protocol); 219 + kfree_skb(skb); 220 + goto out; 221 + } 214 222 215 223 if (!ipprot->no_policy) { 216 224 if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb)) {
+5
net/ipv6/datagram.c
··· 661 661 switch (rthdr->type) { 662 662 #if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE) 663 663 case IPV6_SRCRT_TYPE_2: 664 + if (rthdr->hdrlen != 2 || 665 + rthdr->segments_left != 1) { 666 + err = -EINVAL; 667 + goto exit_f; 668 + } 664 669 break; 665 670 #endif 666 671 default:
+5
net/ipv6/ipv6_sockglue.c
··· 366 366 } 367 367 368 368 /* routing header option needs extra check */ 369 + retv = -EINVAL; 369 370 if (optname == IPV6_RTHDR && opt && opt->srcrt) { 370 371 struct ipv6_rt_hdr *rthdr = opt->srcrt; 371 372 switch (rthdr->type) { 372 373 #if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE) 373 374 case IPV6_SRCRT_TYPE_2: 375 + if (rthdr->hdrlen != 2 || 376 + rthdr->segments_left != 1) 377 + goto sticky_done; 378 + 374 379 break; 375 380 #endif 376 381 default:
+2 -2
net/phonet/af_phonet.c
··· 144 144 struct phonethdr *ph; 145 145 int err; 146 146 147 - if (skb->len + 2 > 0xffff) { 148 - /* Phonet length field would overflow */ 147 + if (skb->len + 2 > 0xffff /* Phonet length field limit */ || 148 + skb->len + sizeof(struct phonethdr) > dev->mtu) { 149 149 err = -EMSGSIZE; 150 150 goto drop; 151 151 }