diff options
Diffstat (limited to 'drivers/net')
| -rw-r--r-- | drivers/net/bonding/bond_main.c | 18 | ||||
| -rw-r--r-- | drivers/net/can/sja1000/plx_pci.c | 4 | ||||
| -rw-r--r-- | drivers/net/e1000e/e1000.h | 4 | ||||
| -rw-r--r-- | drivers/net/e1000e/ich8lan.c | 65 | ||||
| -rw-r--r-- | drivers/net/e1000e/netdev.c | 80 | ||||
| -rw-r--r-- | drivers/net/forcedeth.c | 3 | ||||
| -rw-r--r-- | drivers/net/gianfar.c | 9 | ||||
| -rw-r--r-- | drivers/net/gianfar_ethtool.c | 26 | ||||
| -rw-r--r-- | drivers/net/ixgbe/ixgbe_main.c | 4 | ||||
| -rw-r--r-- | drivers/net/rionet.c | 23 | ||||
| -rw-r--r-- | drivers/net/sh_eth.c | 1 | ||||
| -rw-r--r-- | drivers/net/usb/cdc_ncm.c | 47 | ||||
| -rw-r--r-- | drivers/net/via-velocity.c | 4 | ||||
| -rw-r--r-- | drivers/net/vmxnet3/vmxnet3_drv.c | 34 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-pci.c | 25 | ||||
| -rw-r--r-- | drivers/net/wireless/rt2x00/rt2800usb.c | 20 | ||||
| -rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00usb.c | 17 | ||||
| -rw-r--r-- | drivers/net/wireless/wl12xx/acx.c | 6 | ||||
| -rw-r--r-- | drivers/net/wireless/wl12xx/testmode.c | 5 |
19 files changed, 289 insertions, 106 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 38a83acd502e..43f2ea541088 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
| @@ -3419,9 +3419,27 @@ static int bond_xmit_hash_policy_l2(struct sk_buff *skb, int count) | |||
| 3419 | static int bond_open(struct net_device *bond_dev) | 3419 | static int bond_open(struct net_device *bond_dev) |
| 3420 | { | 3420 | { |
| 3421 | struct bonding *bond = netdev_priv(bond_dev); | 3421 | struct bonding *bond = netdev_priv(bond_dev); |
| 3422 | struct slave *slave; | ||
| 3423 | int i; | ||
| 3422 | 3424 | ||
| 3423 | bond->kill_timers = 0; | 3425 | bond->kill_timers = 0; |
| 3424 | 3426 | ||
| 3427 | /* reset slave->backup and slave->inactive */ | ||
| 3428 | read_lock(&bond->lock); | ||
| 3429 | if (bond->slave_cnt > 0) { | ||
| 3430 | read_lock(&bond->curr_slave_lock); | ||
| 3431 | bond_for_each_slave(bond, slave, i) { | ||
| 3432 | if ((bond->params.mode == BOND_MODE_ACTIVEBACKUP) | ||
| 3433 | && (slave != bond->curr_active_slave)) { | ||
| 3434 | bond_set_slave_inactive_flags(slave); | ||
| 3435 | } else { | ||
| 3436 | bond_set_slave_active_flags(slave); | ||
| 3437 | } | ||
| 3438 | } | ||
| 3439 | read_unlock(&bond->curr_slave_lock); | ||
| 3440 | } | ||
| 3441 | read_unlock(&bond->lock); | ||
| 3442 | |||
| 3425 | INIT_DELAYED_WORK(&bond->mcast_work, bond_resend_igmp_join_requests_delayed); | 3443 | INIT_DELAYED_WORK(&bond->mcast_work, bond_resend_igmp_join_requests_delayed); |
| 3426 | 3444 | ||
| 3427 | if (bond_is_lb(bond)) { | 3445 | if (bond_is_lb(bond)) { |
diff --git a/drivers/net/can/sja1000/plx_pci.c b/drivers/net/can/sja1000/plx_pci.c index 231385b8e08f..c7f3d4ea1167 100644 --- a/drivers/net/can/sja1000/plx_pci.c +++ b/drivers/net/can/sja1000/plx_pci.c | |||
| @@ -408,7 +408,7 @@ static void plx_pci_del_card(struct pci_dev *pdev) | |||
| 408 | struct sja1000_priv *priv; | 408 | struct sja1000_priv *priv; |
| 409 | int i = 0; | 409 | int i = 0; |
| 410 | 410 | ||
| 411 | for (i = 0; i < card->channels; i++) { | 411 | for (i = 0; i < PLX_PCI_MAX_CHAN; i++) { |
| 412 | dev = card->net_dev[i]; | 412 | dev = card->net_dev[i]; |
| 413 | if (!dev) | 413 | if (!dev) |
| 414 | continue; | 414 | continue; |
| @@ -536,7 +536,6 @@ static int __devinit plx_pci_add_card(struct pci_dev *pdev, | |||
| 536 | if (err) { | 536 | if (err) { |
| 537 | dev_err(&pdev->dev, "Registering device failed " | 537 | dev_err(&pdev->dev, "Registering device failed " |
| 538 | "(err=%d)\n", err); | 538 | "(err=%d)\n", err); |
| 539 | free_sja1000dev(dev); | ||
| 540 | goto failure_cleanup; | 539 | goto failure_cleanup; |
| 541 | } | 540 | } |
| 542 | 541 | ||
| @@ -549,6 +548,7 @@ static int __devinit plx_pci_add_card(struct pci_dev *pdev, | |||
| 549 | dev_err(&pdev->dev, "Channel #%d not detected\n", | 548 | dev_err(&pdev->dev, "Channel #%d not detected\n", |
| 550 | i + 1); | 549 | i + 1); |
| 551 | free_sja1000dev(dev); | 550 | free_sja1000dev(dev); |
| 551 | card->net_dev[i] = NULL; | ||
| 552 | } | 552 | } |
| 553 | } | 553 | } |
| 554 | 554 | ||
diff --git a/drivers/net/e1000e/e1000.h b/drivers/net/e1000e/e1000.h index 35916f485028..8533ad7f3559 100644 --- a/drivers/net/e1000e/e1000.h +++ b/drivers/net/e1000e/e1000.h | |||
| @@ -155,6 +155,9 @@ struct e1000_info; | |||
| 155 | #define HV_M_STATUS_SPEED_1000 0x0200 | 155 | #define HV_M_STATUS_SPEED_1000 0x0200 |
| 156 | #define HV_M_STATUS_LINK_UP 0x0040 | 156 | #define HV_M_STATUS_LINK_UP 0x0040 |
| 157 | 157 | ||
| 158 | #define E1000_ICH_FWSM_PCIM2PCI 0x01000000 /* ME PCIm-to-PCI active */ | ||
| 159 | #define E1000_ICH_FWSM_PCIM2PCI_COUNT 2000 | ||
| 160 | |||
| 158 | /* Time to wait before putting the device into D3 if there's no link (in ms). */ | 161 | /* Time to wait before putting the device into D3 if there's no link (in ms). */ |
| 159 | #define LINK_TIMEOUT 100 | 162 | #define LINK_TIMEOUT 100 |
| 160 | 163 | ||
| @@ -454,6 +457,7 @@ struct e1000_info { | |||
| 454 | #define FLAG2_DISABLE_AIM (1 << 8) | 457 | #define FLAG2_DISABLE_AIM (1 << 8) |
| 455 | #define FLAG2_CHECK_PHY_HANG (1 << 9) | 458 | #define FLAG2_CHECK_PHY_HANG (1 << 9) |
| 456 | #define FLAG2_NO_DISABLE_RX (1 << 10) | 459 | #define FLAG2_NO_DISABLE_RX (1 << 10) |
| 460 | #define FLAG2_PCIM2PCI_ARBITER_WA (1 << 11) | ||
| 457 | 461 | ||
| 458 | #define E1000_RX_DESC_PS(R, i) \ | 462 | #define E1000_RX_DESC_PS(R, i) \ |
| 459 | (&(((union e1000_rx_desc_packet_split *)((R).desc))[i])) | 463 | (&(((union e1000_rx_desc_packet_split *)((R).desc))[i])) |
diff --git a/drivers/net/e1000e/ich8lan.c b/drivers/net/e1000e/ich8lan.c index 4e36978b8fd8..54add27c8f76 100644 --- a/drivers/net/e1000e/ich8lan.c +++ b/drivers/net/e1000e/ich8lan.c | |||
| @@ -137,8 +137,9 @@ | |||
| 137 | #define HV_PM_CTRL PHY_REG(770, 17) | 137 | #define HV_PM_CTRL PHY_REG(770, 17) |
| 138 | 138 | ||
| 139 | /* PHY Low Power Idle Control */ | 139 | /* PHY Low Power Idle Control */ |
| 140 | #define I82579_LPI_CTRL PHY_REG(772, 20) | 140 | #define I82579_LPI_CTRL PHY_REG(772, 20) |
| 141 | #define I82579_LPI_CTRL_ENABLE_MASK 0x6000 | 141 | #define I82579_LPI_CTRL_ENABLE_MASK 0x6000 |
| 142 | #define I82579_LPI_CTRL_FORCE_PLL_LOCK_COUNT 0x80 | ||
| 142 | 143 | ||
| 143 | /* EMI Registers */ | 144 | /* EMI Registers */ |
| 144 | #define I82579_EMI_ADDR 0x10 | 145 | #define I82579_EMI_ADDR 0x10 |
| @@ -163,6 +164,11 @@ | |||
| 163 | #define HV_KMRN_MODE_CTRL PHY_REG(769, 16) | 164 | #define HV_KMRN_MODE_CTRL PHY_REG(769, 16) |
| 164 | #define HV_KMRN_MDIO_SLOW 0x0400 | 165 | #define HV_KMRN_MDIO_SLOW 0x0400 |
| 165 | 166 | ||
| 167 | /* KMRN FIFO Control and Status */ | ||
| 168 | #define HV_KMRN_FIFO_CTRLSTA PHY_REG(770, 16) | ||
| 169 | #define HV_KMRN_FIFO_CTRLSTA_PREAMBLE_MASK 0x7000 | ||
| 170 | #define HV_KMRN_FIFO_CTRLSTA_PREAMBLE_SHIFT 12 | ||
| 171 | |||
| 166 | /* ICH GbE Flash Hardware Sequencing Flash Status Register bit breakdown */ | 172 | /* ICH GbE Flash Hardware Sequencing Flash Status Register bit breakdown */ |
| 167 | /* Offset 04h HSFSTS */ | 173 | /* Offset 04h HSFSTS */ |
| 168 | union ich8_hws_flash_status { | 174 | union ich8_hws_flash_status { |
| @@ -657,6 +663,7 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw) | |||
| 657 | struct e1000_mac_info *mac = &hw->mac; | 663 | struct e1000_mac_info *mac = &hw->mac; |
| 658 | s32 ret_val; | 664 | s32 ret_val; |
| 659 | bool link; | 665 | bool link; |
| 666 | u16 phy_reg; | ||
| 660 | 667 | ||
| 661 | /* | 668 | /* |
| 662 | * We only want to go out to the PHY registers to see if Auto-Neg | 669 | * We only want to go out to the PHY registers to see if Auto-Neg |
| @@ -689,16 +696,35 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw) | |||
| 689 | 696 | ||
| 690 | mac->get_link_status = false; | 697 | mac->get_link_status = false; |
| 691 | 698 | ||
| 692 | if (hw->phy.type == e1000_phy_82578) { | 699 | switch (hw->mac.type) { |
| 693 | ret_val = e1000_link_stall_workaround_hv(hw); | 700 | case e1000_pch2lan: |
| 694 | if (ret_val) | ||
| 695 | goto out; | ||
| 696 | } | ||
| 697 | |||
| 698 | if (hw->mac.type == e1000_pch2lan) { | ||
| 699 | ret_val = e1000_k1_workaround_lv(hw); | 701 | ret_val = e1000_k1_workaround_lv(hw); |
| 700 | if (ret_val) | 702 | if (ret_val) |
| 701 | goto out; | 703 | goto out; |
| 704 | /* fall-thru */ | ||
| 705 | case e1000_pchlan: | ||
| 706 | if (hw->phy.type == e1000_phy_82578) { | ||
| 707 | ret_val = e1000_link_stall_workaround_hv(hw); | ||
| 708 | if (ret_val) | ||
| 709 | goto out; | ||
| 710 | } | ||
| 711 | |||
| 712 | /* | ||
| 713 | * Workaround for PCHx parts in half-duplex: | ||
| 714 | * Set the number of preambles removed from the packet | ||
| 715 | * when it is passed from the PHY to the MAC to prevent | ||
| 716 | * the MAC from misinterpreting the packet type. | ||
| 717 | */ | ||
| 718 | e1e_rphy(hw, HV_KMRN_FIFO_CTRLSTA, &phy_reg); | ||
| 719 | phy_reg &= ~HV_KMRN_FIFO_CTRLSTA_PREAMBLE_MASK; | ||
| 720 | |||
| 721 | if ((er32(STATUS) & E1000_STATUS_FD) != E1000_STATUS_FD) | ||
| 722 | phy_reg |= (1 << HV_KMRN_FIFO_CTRLSTA_PREAMBLE_SHIFT); | ||
| 723 | |||
| 724 | e1e_wphy(hw, HV_KMRN_FIFO_CTRLSTA, phy_reg); | ||
| 725 | break; | ||
| 726 | default: | ||
| 727 | break; | ||
| 702 | } | 728 | } |
| 703 | 729 | ||
| 704 | /* | 730 | /* |
| @@ -788,6 +814,11 @@ static s32 e1000_get_variants_ich8lan(struct e1000_adapter *adapter) | |||
| 788 | (adapter->hw.phy.type == e1000_phy_igp_3)) | 814 | (adapter->hw.phy.type == e1000_phy_igp_3)) |
| 789 | adapter->flags |= FLAG_LSC_GIG_SPEED_DROP; | 815 | adapter->flags |= FLAG_LSC_GIG_SPEED_DROP; |
| 790 | 816 | ||
| 817 | /* Enable workaround for 82579 w/ ME enabled */ | ||
| 818 | if ((adapter->hw.mac.type == e1000_pch2lan) && | ||
| 819 | (er32(FWSM) & E1000_ICH_FWSM_FW_VALID)) | ||
| 820 | adapter->flags2 |= FLAG2_PCIM2PCI_ARBITER_WA; | ||
| 821 | |||
| 791 | /* Disable EEE by default until IEEE802.3az spec is finalized */ | 822 | /* Disable EEE by default until IEEE802.3az spec is finalized */ |
| 792 | if (adapter->flags2 & FLAG2_HAS_EEE) | 823 | if (adapter->flags2 & FLAG2_HAS_EEE) |
| 793 | adapter->hw.dev_spec.ich8lan.eee_disable = true; | 824 | adapter->hw.dev_spec.ich8lan.eee_disable = true; |
| @@ -1355,7 +1386,7 @@ static s32 e1000_hv_phy_workarounds_ich8lan(struct e1000_hw *hw) | |||
| 1355 | return ret_val; | 1386 | return ret_val; |
| 1356 | 1387 | ||
| 1357 | /* Preamble tuning for SSC */ | 1388 | /* Preamble tuning for SSC */ |
| 1358 | ret_val = e1e_wphy(hw, PHY_REG(770, 16), 0xA204); | 1389 | ret_val = e1e_wphy(hw, HV_KMRN_FIFO_CTRLSTA, 0xA204); |
| 1359 | if (ret_val) | 1390 | if (ret_val) |
| 1360 | return ret_val; | 1391 | return ret_val; |
| 1361 | } | 1392 | } |
| @@ -1645,6 +1676,7 @@ static s32 e1000_k1_workaround_lv(struct e1000_hw *hw) | |||
| 1645 | s32 ret_val = 0; | 1676 | s32 ret_val = 0; |
| 1646 | u16 status_reg = 0; | 1677 | u16 status_reg = 0; |
| 1647 | u32 mac_reg; | 1678 | u32 mac_reg; |
| 1679 | u16 phy_reg; | ||
| 1648 | 1680 | ||
| 1649 | if (hw->mac.type != e1000_pch2lan) | 1681 | if (hw->mac.type != e1000_pch2lan) |
| 1650 | goto out; | 1682 | goto out; |
| @@ -1659,12 +1691,19 @@ static s32 e1000_k1_workaround_lv(struct e1000_hw *hw) | |||
| 1659 | mac_reg = er32(FEXTNVM4); | 1691 | mac_reg = er32(FEXTNVM4); |
| 1660 | mac_reg &= ~E1000_FEXTNVM4_BEACON_DURATION_MASK; | 1692 | mac_reg &= ~E1000_FEXTNVM4_BEACON_DURATION_MASK; |
| 1661 | 1693 | ||
| 1662 | if (status_reg & HV_M_STATUS_SPEED_1000) | 1694 | ret_val = e1e_rphy(hw, I82579_LPI_CTRL, &phy_reg); |
| 1695 | if (ret_val) | ||
| 1696 | goto out; | ||
| 1697 | |||
| 1698 | if (status_reg & HV_M_STATUS_SPEED_1000) { | ||
| 1663 | mac_reg |= E1000_FEXTNVM4_BEACON_DURATION_8USEC; | 1699 | mac_reg |= E1000_FEXTNVM4_BEACON_DURATION_8USEC; |
| 1664 | else | 1700 | phy_reg &= ~I82579_LPI_CTRL_FORCE_PLL_LOCK_COUNT; |
| 1701 | } else { | ||
| 1665 | mac_reg |= E1000_FEXTNVM4_BEACON_DURATION_16USEC; | 1702 | mac_reg |= E1000_FEXTNVM4_BEACON_DURATION_16USEC; |
| 1666 | 1703 | phy_reg |= I82579_LPI_CTRL_FORCE_PLL_LOCK_COUNT; | |
| 1704 | } | ||
| 1667 | ew32(FEXTNVM4, mac_reg); | 1705 | ew32(FEXTNVM4, mac_reg); |
| 1706 | ret_val = e1e_wphy(hw, I82579_LPI_CTRL, phy_reg); | ||
| 1668 | } | 1707 | } |
| 1669 | 1708 | ||
| 1670 | out: | 1709 | out: |
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c index 362f70382cdd..2198e615f241 100644 --- a/drivers/net/e1000e/netdev.c +++ b/drivers/net/e1000e/netdev.c | |||
| @@ -519,6 +519,63 @@ static void e1000_rx_checksum(struct e1000_adapter *adapter, u32 status_err, | |||
| 519 | } | 519 | } |
| 520 | 520 | ||
| 521 | /** | 521 | /** |
| 522 | * e1000e_update_tail_wa - helper function for e1000e_update_[rt]dt_wa() | ||
| 523 | * @hw: pointer to the HW structure | ||
| 524 | * @tail: address of tail descriptor register | ||
| 525 | * @i: value to write to tail descriptor register | ||
| 526 | * | ||
| 527 | * When updating the tail register, the ME could be accessing Host CSR | ||
| 528 | * registers at the same time. Normally, this is handled in h/w by an | ||
| 529 | * arbiter but on some parts there is a bug that acknowledges Host accesses | ||
| 530 | * later than it should which could result in the descriptor register to | ||
| 531 | * have an incorrect value. Workaround this by checking the FWSM register | ||
| 532 | * which has bit 24 set while ME is accessing Host CSR registers, wait | ||
| 533 | * if it is set and try again a number of times. | ||
| 534 | **/ | ||
| 535 | static inline s32 e1000e_update_tail_wa(struct e1000_hw *hw, u8 __iomem * tail, | ||
| 536 | unsigned int i) | ||
| 537 | { | ||
| 538 | unsigned int j = 0; | ||
| 539 | |||
| 540 | while ((j++ < E1000_ICH_FWSM_PCIM2PCI_COUNT) && | ||
| 541 | (er32(FWSM) & E1000_ICH_FWSM_PCIM2PCI)) | ||
| 542 | udelay(50); | ||
| 543 | |||
| 544 | writel(i, tail); | ||
| 545 | |||
| 546 | if ((j == E1000_ICH_FWSM_PCIM2PCI_COUNT) && (i != readl(tail))) | ||
| 547 | return E1000_ERR_SWFW_SYNC; | ||
| 548 | |||
| 549 | return 0; | ||
| 550 | } | ||
| 551 | |||
| 552 | static void e1000e_update_rdt_wa(struct e1000_adapter *adapter, unsigned int i) | ||
| 553 | { | ||
| 554 | u8 __iomem *tail = (adapter->hw.hw_addr + adapter->rx_ring->tail); | ||
| 555 | struct e1000_hw *hw = &adapter->hw; | ||
| 556 | |||
| 557 | if (e1000e_update_tail_wa(hw, tail, i)) { | ||
| 558 | u32 rctl = er32(RCTL); | ||
| 559 | ew32(RCTL, rctl & ~E1000_RCTL_EN); | ||
| 560 | e_err("ME firmware caused invalid RDT - resetting\n"); | ||
| 561 | schedule_work(&adapter->reset_task); | ||
| 562 | } | ||
| 563 | } | ||
| 564 | |||
| 565 | static void e1000e_update_tdt_wa(struct e1000_adapter *adapter, unsigned int i) | ||
| 566 | { | ||
| 567 | u8 __iomem *tail = (adapter->hw.hw_addr + adapter->tx_ring->tail); | ||
| 568 | struct e1000_hw *hw = &adapter->hw; | ||
| 569 | |||
| 570 | if (e1000e_update_tail_wa(hw, tail, i)) { | ||
| 571 | u32 tctl = er32(TCTL); | ||
| 572 | ew32(TCTL, tctl & ~E1000_TCTL_EN); | ||
| 573 | e_err("ME firmware caused invalid TDT - resetting\n"); | ||
| 574 | schedule_work(&adapter->reset_task); | ||
| 575 | } | ||
| 576 | } | ||
| 577 | |||
| 578 | /** | ||
| 522 | * e1000_alloc_rx_buffers - Replace used receive buffers; legacy & extended | 579 | * e1000_alloc_rx_buffers - Replace used receive buffers; legacy & extended |
| 523 | * @adapter: address of board private structure | 580 | * @adapter: address of board private structure |
| 524 | **/ | 581 | **/ |
| @@ -573,7 +630,10 @@ map_skb: | |||
| 573 | * such as IA-64). | 630 | * such as IA-64). |
| 574 | */ | 631 | */ |
| 575 | wmb(); | 632 | wmb(); |
| 576 | writel(i, adapter->hw.hw_addr + rx_ring->tail); | 633 | if (adapter->flags2 & FLAG2_PCIM2PCI_ARBITER_WA) |
| 634 | e1000e_update_rdt_wa(adapter, i); | ||
| 635 | else | ||
| 636 | writel(i, adapter->hw.hw_addr + rx_ring->tail); | ||
| 577 | } | 637 | } |
| 578 | i++; | 638 | i++; |
| 579 | if (i == rx_ring->count) | 639 | if (i == rx_ring->count) |
| @@ -673,7 +733,11 @@ static void e1000_alloc_rx_buffers_ps(struct e1000_adapter *adapter, | |||
| 673 | * such as IA-64). | 733 | * such as IA-64). |
| 674 | */ | 734 | */ |
| 675 | wmb(); | 735 | wmb(); |
| 676 | writel(i << 1, adapter->hw.hw_addr + rx_ring->tail); | 736 | if (adapter->flags2 & FLAG2_PCIM2PCI_ARBITER_WA) |
| 737 | e1000e_update_rdt_wa(adapter, i << 1); | ||
| 738 | else | ||
| 739 | writel(i << 1, | ||
| 740 | adapter->hw.hw_addr + rx_ring->tail); | ||
| 677 | } | 741 | } |
| 678 | 742 | ||
| 679 | i++; | 743 | i++; |
| @@ -756,7 +820,10 @@ check_page: | |||
| 756 | * applicable for weak-ordered memory model archs, | 820 | * applicable for weak-ordered memory model archs, |
| 757 | * such as IA-64). */ | 821 | * such as IA-64). */ |
| 758 | wmb(); | 822 | wmb(); |
| 759 | writel(i, adapter->hw.hw_addr + rx_ring->tail); | 823 | if (adapter->flags2 & FLAG2_PCIM2PCI_ARBITER_WA) |
| 824 | e1000e_update_rdt_wa(adapter, i); | ||
| 825 | else | ||
| 826 | writel(i, adapter->hw.hw_addr + rx_ring->tail); | ||
| 760 | } | 827 | } |
| 761 | } | 828 | } |
| 762 | 829 | ||
| @@ -4689,7 +4756,12 @@ static void e1000_tx_queue(struct e1000_adapter *adapter, | |||
| 4689 | wmb(); | 4756 | wmb(); |
| 4690 | 4757 | ||
| 4691 | tx_ring->next_to_use = i; | 4758 | tx_ring->next_to_use = i; |
| 4692 | writel(i, adapter->hw.hw_addr + tx_ring->tail); | 4759 | |
| 4760 | if (adapter->flags2 & FLAG2_PCIM2PCI_ARBITER_WA) | ||
| 4761 | e1000e_update_tdt_wa(adapter, i); | ||
| 4762 | else | ||
| 4763 | writel(i, adapter->hw.hw_addr + tx_ring->tail); | ||
| 4764 | |||
| 4693 | /* | 4765 | /* |
| 4694 | * we need this if more than one processor can write to our tail | 4766 | * we need this if more than one processor can write to our tail |
| 4695 | * at a time, it synchronizes IO on IA64/Altix systems | 4767 | * at a time, it synchronizes IO on IA64/Altix systems |
diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c index e55df308a3af..6d5fbd4d4256 100644 --- a/drivers/net/forcedeth.c +++ b/drivers/net/forcedeth.c | |||
| @@ -5615,7 +5615,8 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i | |||
| 5615 | goto out_error; | 5615 | goto out_error; |
| 5616 | } | 5616 | } |
| 5617 | 5617 | ||
| 5618 | nv_vlan_mode(dev, dev->features); | 5618 | if (id->driver_data & DEV_HAS_VLAN) |
| 5619 | nv_vlan_mode(dev, dev->features); | ||
| 5619 | 5620 | ||
| 5620 | netif_carrier_off(dev); | 5621 | netif_carrier_off(dev); |
| 5621 | 5622 | ||
diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c index 2659daad783d..31d5c574e5a9 100644 --- a/drivers/net/gianfar.c +++ b/drivers/net/gianfar.c | |||
| @@ -2710,8 +2710,13 @@ static int gfar_process_frame(struct net_device *dev, struct sk_buff *skb, | |||
| 2710 | /* Tell the skb what kind of packet this is */ | 2710 | /* Tell the skb what kind of packet this is */ |
| 2711 | skb->protocol = eth_type_trans(skb, dev); | 2711 | skb->protocol = eth_type_trans(skb, dev); |
| 2712 | 2712 | ||
| 2713 | /* Set vlan tag */ | 2713 | /* |
| 2714 | if (fcb->flags & RXFCB_VLN) | 2714 | * There's need to check for NETIF_F_HW_VLAN_RX here. |
| 2715 | * Even if vlan rx accel is disabled, on some chips | ||
| 2716 | * RXFCB_VLN is pseudo randomly set. | ||
| 2717 | */ | ||
| 2718 | if (dev->features & NETIF_F_HW_VLAN_RX && | ||
| 2719 | fcb->flags & RXFCB_VLN) | ||
| 2715 | __vlan_hwaccel_put_tag(skb, fcb->vlctl); | 2720 | __vlan_hwaccel_put_tag(skb, fcb->vlctl); |
| 2716 | 2721 | ||
| 2717 | /* Send the packet up the stack */ | 2722 | /* Send the packet up the stack */ |
diff --git a/drivers/net/gianfar_ethtool.c b/drivers/net/gianfar_ethtool.c index 6e350692d118..25a8c2adb001 100644 --- a/drivers/net/gianfar_ethtool.c +++ b/drivers/net/gianfar_ethtool.c | |||
| @@ -686,10 +686,21 @@ static int gfar_ethflow_to_filer_table(struct gfar_private *priv, u64 ethflow, u | |||
| 686 | { | 686 | { |
| 687 | unsigned int last_rule_idx = priv->cur_filer_idx; | 687 | unsigned int last_rule_idx = priv->cur_filer_idx; |
| 688 | unsigned int cmp_rqfpr; | 688 | unsigned int cmp_rqfpr; |
| 689 | unsigned int local_rqfpr[MAX_FILER_IDX + 1]; | 689 | unsigned int *local_rqfpr; |
| 690 | unsigned int local_rqfcr[MAX_FILER_IDX + 1]; | 690 | unsigned int *local_rqfcr; |
| 691 | int i = 0x0, k = 0x0; | 691 | int i = 0x0, k = 0x0; |
| 692 | int j = MAX_FILER_IDX, l = 0x0; | 692 | int j = MAX_FILER_IDX, l = 0x0; |
| 693 | int ret = 1; | ||
| 694 | |||
| 695 | local_rqfpr = kmalloc(sizeof(unsigned int) * (MAX_FILER_IDX + 1), | ||
| 696 | GFP_KERNEL); | ||
| 697 | local_rqfcr = kmalloc(sizeof(unsigned int) * (MAX_FILER_IDX + 1), | ||
| 698 | GFP_KERNEL); | ||
| 699 | if (!local_rqfpr || !local_rqfcr) { | ||
| 700 | pr_err("Out of memory\n"); | ||
| 701 | ret = 0; | ||
| 702 | goto err; | ||
| 703 | } | ||
| 693 | 704 | ||
| 694 | switch (class) { | 705 | switch (class) { |
| 695 | case TCP_V4_FLOW: | 706 | case TCP_V4_FLOW: |
| @@ -706,7 +717,8 @@ static int gfar_ethflow_to_filer_table(struct gfar_private *priv, u64 ethflow, u | |||
| 706 | break; | 717 | break; |
| 707 | default: | 718 | default: |
| 708 | pr_err("Right now this class is not supported\n"); | 719 | pr_err("Right now this class is not supported\n"); |
| 709 | return 0; | 720 | ret = 0; |
| 721 | goto err; | ||
| 710 | } | 722 | } |
| 711 | 723 | ||
| 712 | for (i = 0; i < MAX_FILER_IDX + 1; i++) { | 724 | for (i = 0; i < MAX_FILER_IDX + 1; i++) { |
| @@ -721,7 +733,8 @@ static int gfar_ethflow_to_filer_table(struct gfar_private *priv, u64 ethflow, u | |||
| 721 | 733 | ||
| 722 | if (i == MAX_FILER_IDX + 1) { | 734 | if (i == MAX_FILER_IDX + 1) { |
| 723 | pr_err("No parse rule found, can't create hash rules\n"); | 735 | pr_err("No parse rule found, can't create hash rules\n"); |
| 724 | return 0; | 736 | ret = 0; |
| 737 | goto err; | ||
| 725 | } | 738 | } |
| 726 | 739 | ||
| 727 | /* If a match was found, then it begins the starting of a cluster rule | 740 | /* If a match was found, then it begins the starting of a cluster rule |
| @@ -765,7 +778,10 @@ static int gfar_ethflow_to_filer_table(struct gfar_private *priv, u64 ethflow, u | |||
| 765 | priv->cur_filer_idx = priv->cur_filer_idx - 1; | 778 | priv->cur_filer_idx = priv->cur_filer_idx - 1; |
| 766 | } | 779 | } |
| 767 | 780 | ||
| 768 | return 1; | 781 | err: |
| 782 | kfree(local_rqfcr); | ||
| 783 | kfree(local_rqfpr); | ||
| 784 | return ret; | ||
| 769 | } | 785 | } |
| 770 | 786 | ||
| 771 | static int gfar_set_hash_opts(struct gfar_private *priv, struct ethtool_rxnfc *cmd) | 787 | static int gfar_set_hash_opts(struct gfar_private *priv, struct ethtool_rxnfc *cmd) |
diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c index e86297b32733..22790394318a 100644 --- a/drivers/net/ixgbe/ixgbe_main.c +++ b/drivers/net/ixgbe/ixgbe_main.c | |||
| @@ -1459,8 +1459,10 @@ static void ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector, | |||
| 1459 | if (ixgbe_rx_is_fcoe(adapter, rx_desc)) { | 1459 | if (ixgbe_rx_is_fcoe(adapter, rx_desc)) { |
| 1460 | ddp_bytes = ixgbe_fcoe_ddp(adapter, rx_desc, skb, | 1460 | ddp_bytes = ixgbe_fcoe_ddp(adapter, rx_desc, skb, |
| 1461 | staterr); | 1461 | staterr); |
| 1462 | if (!ddp_bytes) | 1462 | if (!ddp_bytes) { |
| 1463 | dev_kfree_skb_any(skb); | ||
| 1463 | goto next_desc; | 1464 | goto next_desc; |
| 1465 | } | ||
| 1464 | } | 1466 | } |
| 1465 | #endif /* IXGBE_FCOE */ | 1467 | #endif /* IXGBE_FCOE */ |
| 1466 | ixgbe_receive_skb(q_vector, skb, staterr, rx_ring, rx_desc); | 1468 | ixgbe_receive_skb(q_vector, skb, staterr, rx_ring, rx_desc); |
diff --git a/drivers/net/rionet.c b/drivers/net/rionet.c index 86ac38c96bcf..3bb131137033 100644 --- a/drivers/net/rionet.c +++ b/drivers/net/rionet.c | |||
| @@ -80,13 +80,13 @@ static int rionet_capable = 1; | |||
| 80 | */ | 80 | */ |
| 81 | static struct rio_dev **rionet_active; | 81 | static struct rio_dev **rionet_active; |
| 82 | 82 | ||
| 83 | #define is_rionet_capable(pef, src_ops, dst_ops) \ | 83 | #define is_rionet_capable(src_ops, dst_ops) \ |
| 84 | ((pef & RIO_PEF_INB_MBOX) && \ | 84 | ((src_ops & RIO_SRC_OPS_DATA_MSG) && \ |
| 85 | (pef & RIO_PEF_INB_DOORBELL) && \ | 85 | (dst_ops & RIO_DST_OPS_DATA_MSG) && \ |
| 86 | (src_ops & RIO_SRC_OPS_DOORBELL) && \ | 86 | (src_ops & RIO_SRC_OPS_DOORBELL) && \ |
| 87 | (dst_ops & RIO_DST_OPS_DOORBELL)) | 87 | (dst_ops & RIO_DST_OPS_DOORBELL)) |
| 88 | #define dev_rionet_capable(dev) \ | 88 | #define dev_rionet_capable(dev) \ |
| 89 | is_rionet_capable(dev->pef, dev->src_ops, dev->dst_ops) | 89 | is_rionet_capable(dev->src_ops, dev->dst_ops) |
| 90 | 90 | ||
| 91 | #define RIONET_MAC_MATCH(x) (*(u32 *)x == 0x00010001) | 91 | #define RIONET_MAC_MATCH(x) (*(u32 *)x == 0x00010001) |
| 92 | #define RIONET_GET_DESTID(x) (*(u16 *)(x + 4)) | 92 | #define RIONET_GET_DESTID(x) (*(u16 *)(x + 4)) |
| @@ -282,7 +282,6 @@ static int rionet_open(struct net_device *ndev) | |||
| 282 | { | 282 | { |
| 283 | int i, rc = 0; | 283 | int i, rc = 0; |
| 284 | struct rionet_peer *peer, *tmp; | 284 | struct rionet_peer *peer, *tmp; |
| 285 | u32 pwdcsr; | ||
| 286 | struct rionet_private *rnet = netdev_priv(ndev); | 285 | struct rionet_private *rnet = netdev_priv(ndev); |
| 287 | 286 | ||
| 288 | if (netif_msg_ifup(rnet)) | 287 | if (netif_msg_ifup(rnet)) |
| @@ -332,13 +331,8 @@ static int rionet_open(struct net_device *ndev) | |||
| 332 | continue; | 331 | continue; |
| 333 | } | 332 | } |
| 334 | 333 | ||
| 335 | /* | 334 | /* Send a join message */ |
| 336 | * If device has initialized inbound doorbells, | 335 | rio_send_doorbell(peer->rdev, RIONET_DOORBELL_JOIN); |
| 337 | * send a join message | ||
| 338 | */ | ||
| 339 | rio_read_config_32(peer->rdev, RIO_WRITE_PORT_CSR, &pwdcsr); | ||
| 340 | if (pwdcsr & RIO_DOORBELL_AVAIL) | ||
| 341 | rio_send_doorbell(peer->rdev, RIONET_DOORBELL_JOIN); | ||
| 342 | } | 336 | } |
| 343 | 337 | ||
| 344 | out: | 338 | out: |
| @@ -492,7 +486,7 @@ static int rionet_setup_netdev(struct rio_mport *mport, struct net_device *ndev) | |||
| 492 | static int rionet_probe(struct rio_dev *rdev, const struct rio_device_id *id) | 486 | static int rionet_probe(struct rio_dev *rdev, const struct rio_device_id *id) |
| 493 | { | 487 | { |
| 494 | int rc = -ENODEV; | 488 | int rc = -ENODEV; |
| 495 | u32 lpef, lsrc_ops, ldst_ops; | 489 | u32 lsrc_ops, ldst_ops; |
| 496 | struct rionet_peer *peer; | 490 | struct rionet_peer *peer; |
| 497 | struct net_device *ndev = NULL; | 491 | struct net_device *ndev = NULL; |
| 498 | 492 | ||
| @@ -515,12 +509,11 @@ static int rionet_probe(struct rio_dev *rdev, const struct rio_device_id *id) | |||
| 515 | * on later probes | 509 | * on later probes |
| 516 | */ | 510 | */ |
| 517 | if (!rionet_check) { | 511 | if (!rionet_check) { |
| 518 | rio_local_read_config_32(rdev->net->hport, RIO_PEF_CAR, &lpef); | ||
| 519 | rio_local_read_config_32(rdev->net->hport, RIO_SRC_OPS_CAR, | 512 | rio_local_read_config_32(rdev->net->hport, RIO_SRC_OPS_CAR, |
| 520 | &lsrc_ops); | 513 | &lsrc_ops); |
| 521 | rio_local_read_config_32(rdev->net->hport, RIO_DST_OPS_CAR, | 514 | rio_local_read_config_32(rdev->net->hport, RIO_DST_OPS_CAR, |
| 522 | &ldst_ops); | 515 | &ldst_ops); |
| 523 | if (!is_rionet_capable(lpef, lsrc_ops, ldst_ops)) { | 516 | if (!is_rionet_capable(lsrc_ops, ldst_ops)) { |
| 524 | printk(KERN_ERR | 517 | printk(KERN_ERR |
| 525 | "%s: local device is not network capable\n", | 518 | "%s: local device is not network capable\n", |
| 526 | DRV_NAME); | 519 | DRV_NAME); |
diff --git a/drivers/net/sh_eth.c b/drivers/net/sh_eth.c index ad35c210b839..190f619e4215 100644 --- a/drivers/net/sh_eth.c +++ b/drivers/net/sh_eth.c | |||
| @@ -21,6 +21,7 @@ | |||
| 21 | */ | 21 | */ |
| 22 | 22 | ||
| 23 | #include <linux/init.h> | 23 | #include <linux/init.h> |
| 24 | #include <linux/interrupt.h> | ||
| 24 | #include <linux/dma-mapping.h> | 25 | #include <linux/dma-mapping.h> |
| 25 | #include <linux/etherdevice.h> | 26 | #include <linux/etherdevice.h> |
| 26 | #include <linux/delay.h> | 27 | #include <linux/delay.h> |
diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c index a03336e086d5..f06fb78383a1 100644 --- a/drivers/net/usb/cdc_ncm.c +++ b/drivers/net/usb/cdc_ncm.c | |||
| @@ -228,23 +228,40 @@ static u8 cdc_ncm_setup(struct cdc_ncm_ctx *ctx) | |||
| 228 | if (ctx->rx_max != le32_to_cpu(ctx->ncm_parm.dwNtbInMaxSize)) { | 228 | if (ctx->rx_max != le32_to_cpu(ctx->ncm_parm.dwNtbInMaxSize)) { |
| 229 | 229 | ||
| 230 | if (flags & USB_CDC_NCM_NCAP_NTB_INPUT_SIZE) { | 230 | if (flags & USB_CDC_NCM_NCAP_NTB_INPUT_SIZE) { |
| 231 | struct usb_cdc_ncm_ndp_input_size ndp_in_sz; | 231 | struct usb_cdc_ncm_ndp_input_size *ndp_in_sz; |
| 232 | |||
| 233 | ndp_in_sz = kzalloc(sizeof(*ndp_in_sz), GFP_KERNEL); | ||
| 234 | if (!ndp_in_sz) { | ||
| 235 | err = -ENOMEM; | ||
| 236 | goto size_err; | ||
| 237 | } | ||
| 238 | |||
| 232 | err = usb_control_msg(ctx->udev, | 239 | err = usb_control_msg(ctx->udev, |
| 233 | usb_sndctrlpipe(ctx->udev, 0), | 240 | usb_sndctrlpipe(ctx->udev, 0), |
| 234 | USB_CDC_SET_NTB_INPUT_SIZE, | 241 | USB_CDC_SET_NTB_INPUT_SIZE, |
| 235 | USB_TYPE_CLASS | USB_DIR_OUT | 242 | USB_TYPE_CLASS | USB_DIR_OUT |
| 236 | | USB_RECIP_INTERFACE, | 243 | | USB_RECIP_INTERFACE, |
| 237 | 0, iface_no, &ndp_in_sz, 8, 1000); | 244 | 0, iface_no, ndp_in_sz, 8, 1000); |
| 245 | kfree(ndp_in_sz); | ||
| 238 | } else { | 246 | } else { |
| 239 | __le32 dwNtbInMaxSize = cpu_to_le32(ctx->rx_max); | 247 | __le32 *dwNtbInMaxSize; |
| 248 | dwNtbInMaxSize = kzalloc(sizeof(*dwNtbInMaxSize), | ||
| 249 | GFP_KERNEL); | ||
| 250 | if (!dwNtbInMaxSize) { | ||
| 251 | err = -ENOMEM; | ||
| 252 | goto size_err; | ||
| 253 | } | ||
| 254 | *dwNtbInMaxSize = cpu_to_le32(ctx->rx_max); | ||
| 255 | |||
| 240 | err = usb_control_msg(ctx->udev, | 256 | err = usb_control_msg(ctx->udev, |
| 241 | usb_sndctrlpipe(ctx->udev, 0), | 257 | usb_sndctrlpipe(ctx->udev, 0), |
| 242 | USB_CDC_SET_NTB_INPUT_SIZE, | 258 | USB_CDC_SET_NTB_INPUT_SIZE, |
| 243 | USB_TYPE_CLASS | USB_DIR_OUT | 259 | USB_TYPE_CLASS | USB_DIR_OUT |
| 244 | | USB_RECIP_INTERFACE, | 260 | | USB_RECIP_INTERFACE, |
| 245 | 0, iface_no, &dwNtbInMaxSize, 4, 1000); | 261 | 0, iface_no, dwNtbInMaxSize, 4, 1000); |
| 262 | kfree(dwNtbInMaxSize); | ||
| 246 | } | 263 | } |
| 247 | 264 | size_err: | |
| 248 | if (err < 0) | 265 | if (err < 0) |
| 249 | pr_debug("Setting NTB Input Size failed\n"); | 266 | pr_debug("Setting NTB Input Size failed\n"); |
| 250 | } | 267 | } |
| @@ -325,19 +342,29 @@ static u8 cdc_ncm_setup(struct cdc_ncm_ctx *ctx) | |||
| 325 | 342 | ||
| 326 | /* set Max Datagram Size (MTU) */ | 343 | /* set Max Datagram Size (MTU) */ |
| 327 | if (flags & USB_CDC_NCM_NCAP_MAX_DATAGRAM_SIZE) { | 344 | if (flags & USB_CDC_NCM_NCAP_MAX_DATAGRAM_SIZE) { |
| 328 | __le16 max_datagram_size; | 345 | __le16 *max_datagram_size; |
| 329 | u16 eth_max_sz = le16_to_cpu(ctx->ether_desc->wMaxSegmentSize); | 346 | u16 eth_max_sz = le16_to_cpu(ctx->ether_desc->wMaxSegmentSize); |
| 347 | |||
| 348 | max_datagram_size = kzalloc(sizeof(*max_datagram_size), | ||
| 349 | GFP_KERNEL); | ||
| 350 | if (!max_datagram_size) { | ||
| 351 | err = -ENOMEM; | ||
| 352 | goto max_dgram_err; | ||
| 353 | } | ||
| 354 | |||
| 330 | err = usb_control_msg(ctx->udev, usb_rcvctrlpipe(ctx->udev, 0), | 355 | err = usb_control_msg(ctx->udev, usb_rcvctrlpipe(ctx->udev, 0), |
| 331 | USB_CDC_GET_MAX_DATAGRAM_SIZE, | 356 | USB_CDC_GET_MAX_DATAGRAM_SIZE, |
| 332 | USB_TYPE_CLASS | USB_DIR_IN | 357 | USB_TYPE_CLASS | USB_DIR_IN |
| 333 | | USB_RECIP_INTERFACE, | 358 | | USB_RECIP_INTERFACE, |
| 334 | 0, iface_no, &max_datagram_size, | 359 | 0, iface_no, max_datagram_size, |
| 335 | 2, 1000); | 360 | 2, 1000); |
| 336 | if (err < 0) { | 361 | if (err < 0) { |
| 337 | pr_debug("GET_MAX_DATAGRAM_SIZE failed, use size=%u\n", | 362 | pr_debug("GET_MAX_DATAGRAM_SIZE failed, use size=%u\n", |
| 338 | CDC_NCM_MIN_DATAGRAM_SIZE); | 363 | CDC_NCM_MIN_DATAGRAM_SIZE); |
| 364 | kfree(max_datagram_size); | ||
| 339 | } else { | 365 | } else { |
| 340 | ctx->max_datagram_size = le16_to_cpu(max_datagram_size); | 366 | ctx->max_datagram_size = |
| 367 | le16_to_cpu(*max_datagram_size); | ||
| 341 | /* Check Eth descriptor value */ | 368 | /* Check Eth descriptor value */ |
| 342 | if (eth_max_sz < CDC_NCM_MAX_DATAGRAM_SIZE) { | 369 | if (eth_max_sz < CDC_NCM_MAX_DATAGRAM_SIZE) { |
| 343 | if (ctx->max_datagram_size > eth_max_sz) | 370 | if (ctx->max_datagram_size > eth_max_sz) |
| @@ -360,8 +387,10 @@ static u8 cdc_ncm_setup(struct cdc_ncm_ctx *ctx) | |||
| 360 | USB_TYPE_CLASS | USB_DIR_OUT | 387 | USB_TYPE_CLASS | USB_DIR_OUT |
| 361 | | USB_RECIP_INTERFACE, | 388 | | USB_RECIP_INTERFACE, |
| 362 | 0, | 389 | 0, |
| 363 | iface_no, &max_datagram_size, | 390 | iface_no, max_datagram_size, |
| 364 | 2, 1000); | 391 | 2, 1000); |
| 392 | kfree(max_datagram_size); | ||
| 393 | max_dgram_err: | ||
| 365 | if (err < 0) | 394 | if (err < 0) |
| 366 | pr_debug("SET_MAX_DATAGRAM_SIZE failed\n"); | 395 | pr_debug("SET_MAX_DATAGRAM_SIZE failed\n"); |
| 367 | } | 396 | } |
diff --git a/drivers/net/via-velocity.c b/drivers/net/via-velocity.c index deb1eca13c9f..7c5336c5c37f 100644 --- a/drivers/net/via-velocity.c +++ b/drivers/net/via-velocity.c | |||
| @@ -515,10 +515,6 @@ static void velocity_init_cam_filter(struct velocity_info *vptr) | |||
| 515 | mac_set_cam_mask(regs, vptr->mCAMmask); | 515 | mac_set_cam_mask(regs, vptr->mCAMmask); |
| 516 | 516 | ||
| 517 | /* Enable VCAMs */ | 517 | /* Enable VCAMs */ |
| 518 | |||
| 519 | if (test_bit(0, vptr->active_vlans)) | ||
| 520 | WORD_REG_BITS_ON(MCFG_RTGOPT, ®s->MCFG); | ||
| 521 | |||
| 522 | for_each_set_bit(vid, vptr->active_vlans, VLAN_N_VID) { | 518 | for_each_set_bit(vid, vptr->active_vlans, VLAN_N_VID) { |
| 523 | mac_set_vlan_cam(regs, i, (u8 *) &vid); | 519 | mac_set_vlan_cam(regs, i, (u8 *) &vid); |
| 524 | vptr->vCAMmask[i / 8] |= 0x1 << (i % 8); | 520 | vptr->vCAMmask[i / 8] |= 0x1 << (i % 8); |
diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c index 1cbacb389652..0959583feb27 100644 --- a/drivers/net/vmxnet3/vmxnet3_drv.c +++ b/drivers/net/vmxnet3/vmxnet3_drv.c | |||
| @@ -1929,14 +1929,17 @@ static void | |||
| 1929 | vmxnet3_vlan_rx_add_vid(struct net_device *netdev, u16 vid) | 1929 | vmxnet3_vlan_rx_add_vid(struct net_device *netdev, u16 vid) |
| 1930 | { | 1930 | { |
| 1931 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); | 1931 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); |
| 1932 | u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; | ||
| 1933 | unsigned long flags; | ||
| 1934 | 1932 | ||
| 1935 | VMXNET3_SET_VFTABLE_ENTRY(vfTable, vid); | 1933 | if (!(netdev->flags & IFF_PROMISC)) { |
| 1936 | spin_lock_irqsave(&adapter->cmd_lock, flags); | 1934 | u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; |
| 1937 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, | 1935 | unsigned long flags; |
| 1938 | VMXNET3_CMD_UPDATE_VLAN_FILTERS); | 1936 | |
| 1939 | spin_unlock_irqrestore(&adapter->cmd_lock, flags); | 1937 | VMXNET3_SET_VFTABLE_ENTRY(vfTable, vid); |
| 1938 | spin_lock_irqsave(&adapter->cmd_lock, flags); | ||
| 1939 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, | ||
| 1940 | VMXNET3_CMD_UPDATE_VLAN_FILTERS); | ||
| 1941 | spin_unlock_irqrestore(&adapter->cmd_lock, flags); | ||
| 1942 | } | ||
| 1940 | 1943 | ||
| 1941 | set_bit(vid, adapter->active_vlans); | 1944 | set_bit(vid, adapter->active_vlans); |
| 1942 | } | 1945 | } |
| @@ -1946,14 +1949,17 @@ static void | |||
| 1946 | vmxnet3_vlan_rx_kill_vid(struct net_device *netdev, u16 vid) | 1949 | vmxnet3_vlan_rx_kill_vid(struct net_device *netdev, u16 vid) |
| 1947 | { | 1950 | { |
| 1948 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); | 1951 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); |
| 1949 | u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; | ||
| 1950 | unsigned long flags; | ||
| 1951 | 1952 | ||
| 1952 | VMXNET3_CLEAR_VFTABLE_ENTRY(vfTable, vid); | 1953 | if (!(netdev->flags & IFF_PROMISC)) { |
| 1953 | spin_lock_irqsave(&adapter->cmd_lock, flags); | 1954 | u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; |
| 1954 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, | 1955 | unsigned long flags; |
| 1955 | VMXNET3_CMD_UPDATE_VLAN_FILTERS); | 1956 | |
| 1956 | spin_unlock_irqrestore(&adapter->cmd_lock, flags); | 1957 | VMXNET3_CLEAR_VFTABLE_ENTRY(vfTable, vid); |
| 1958 | spin_lock_irqsave(&adapter->cmd_lock, flags); | ||
| 1959 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, | ||
| 1960 | VMXNET3_CMD_UPDATE_VLAN_FILTERS); | ||
| 1961 | spin_unlock_irqrestore(&adapter->cmd_lock, flags); | ||
| 1962 | } | ||
| 1957 | 1963 | ||
| 1958 | clear_bit(vid, adapter->active_vlans); | 1964 | clear_bit(vid, adapter->active_vlans); |
| 1959 | } | 1965 | } |
diff --git a/drivers/net/wireless/iwlwifi/iwl-pci.c b/drivers/net/wireless/iwlwifi/iwl-pci.c index 69d4ec467dca..2fdbffa079c1 100644 --- a/drivers/net/wireless/iwlwifi/iwl-pci.c +++ b/drivers/net/wireless/iwlwifi/iwl-pci.c | |||
| @@ -478,27 +478,22 @@ out_no_pci: | |||
| 478 | return err; | 478 | return err; |
| 479 | } | 479 | } |
| 480 | 480 | ||
| 481 | static void iwl_pci_down(struct iwl_bus *bus) | ||
| 482 | { | ||
| 483 | struct iwl_pci_bus *pci_bus = (struct iwl_pci_bus *) bus->bus_specific; | ||
| 484 | |||
| 485 | pci_disable_msi(pci_bus->pci_dev); | ||
| 486 | pci_iounmap(pci_bus->pci_dev, pci_bus->hw_base); | ||
| 487 | pci_release_regions(pci_bus->pci_dev); | ||
| 488 | pci_disable_device(pci_bus->pci_dev); | ||
| 489 | pci_set_drvdata(pci_bus->pci_dev, NULL); | ||
| 490 | |||
| 491 | kfree(bus); | ||
| 492 | } | ||
| 493 | |||
| 494 | static void __devexit iwl_pci_remove(struct pci_dev *pdev) | 481 | static void __devexit iwl_pci_remove(struct pci_dev *pdev) |
| 495 | { | 482 | { |
| 496 | struct iwl_priv *priv = pci_get_drvdata(pdev); | 483 | struct iwl_priv *priv = pci_get_drvdata(pdev); |
| 497 | void *bus_specific = priv->bus->bus_specific; | 484 | struct iwl_bus *bus = priv->bus; |
| 485 | struct iwl_pci_bus *pci_bus = IWL_BUS_GET_PCI_BUS(bus); | ||
| 486 | struct pci_dev *pci_dev = IWL_BUS_GET_PCI_DEV(bus); | ||
| 498 | 487 | ||
| 499 | iwl_remove(priv); | 488 | iwl_remove(priv); |
| 500 | 489 | ||
| 501 | iwl_pci_down(bus_specific); | 490 | pci_disable_msi(pci_dev); |
| 491 | pci_iounmap(pci_dev, pci_bus->hw_base); | ||
| 492 | pci_release_regions(pci_dev); | ||
| 493 | pci_disable_device(pci_dev); | ||
| 494 | pci_set_drvdata(pci_dev, NULL); | ||
| 495 | |||
| 496 | kfree(bus); | ||
| 502 | } | 497 | } |
| 503 | 498 | ||
| 504 | #ifdef CONFIG_PM | 499 | #ifdef CONFIG_PM |
diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c index 939563162fb3..dbf501ca317f 100644 --- a/drivers/net/wireless/rt2x00/rt2800usb.c +++ b/drivers/net/wireless/rt2x00/rt2800usb.c | |||
| @@ -464,6 +464,15 @@ static bool rt2800usb_txdone_entry_check(struct queue_entry *entry, u32 reg) | |||
| 464 | int wcid, ack, pid; | 464 | int wcid, ack, pid; |
| 465 | int tx_wcid, tx_ack, tx_pid; | 465 | int tx_wcid, tx_ack, tx_pid; |
| 466 | 466 | ||
| 467 | if (test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags) || | ||
| 468 | !test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags)) { | ||
| 469 | WARNING(entry->queue->rt2x00dev, | ||
| 470 | "Data pending for entry %u in queue %u\n", | ||
| 471 | entry->entry_idx, entry->queue->qid); | ||
| 472 | cond_resched(); | ||
| 473 | return false; | ||
| 474 | } | ||
| 475 | |||
| 467 | wcid = rt2x00_get_field32(reg, TX_STA_FIFO_WCID); | 476 | wcid = rt2x00_get_field32(reg, TX_STA_FIFO_WCID); |
| 468 | ack = rt2x00_get_field32(reg, TX_STA_FIFO_TX_ACK_REQUIRED); | 477 | ack = rt2x00_get_field32(reg, TX_STA_FIFO_TX_ACK_REQUIRED); |
| 469 | pid = rt2x00_get_field32(reg, TX_STA_FIFO_PID_TYPE); | 478 | pid = rt2x00_get_field32(reg, TX_STA_FIFO_PID_TYPE); |
| @@ -529,12 +538,11 @@ static void rt2800usb_txdone(struct rt2x00_dev *rt2x00dev) | |||
| 529 | entry = rt2x00queue_get_entry(queue, Q_INDEX_DONE); | 538 | entry = rt2x00queue_get_entry(queue, Q_INDEX_DONE); |
| 530 | if (rt2800usb_txdone_entry_check(entry, reg)) | 539 | if (rt2800usb_txdone_entry_check(entry, reg)) |
| 531 | break; | 540 | break; |
| 541 | entry = NULL; | ||
| 532 | } | 542 | } |
| 533 | 543 | ||
| 534 | if (!entry || rt2x00queue_empty(queue)) | 544 | if (entry) |
| 535 | break; | 545 | rt2800_txdone_entry(entry, reg); |
| 536 | |||
| 537 | rt2800_txdone_entry(entry, reg); | ||
| 538 | } | 546 | } |
| 539 | } | 547 | } |
| 540 | 548 | ||
| @@ -558,8 +566,10 @@ static void rt2800usb_work_txdone(struct work_struct *work) | |||
| 558 | while (!rt2x00queue_empty(queue)) { | 566 | while (!rt2x00queue_empty(queue)) { |
| 559 | entry = rt2x00queue_get_entry(queue, Q_INDEX_DONE); | 567 | entry = rt2x00queue_get_entry(queue, Q_INDEX_DONE); |
| 560 | 568 | ||
| 561 | if (test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags)) | 569 | if (test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags) || |
| 570 | !test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags)) | ||
| 562 | break; | 571 | break; |
| 572 | |||
| 563 | if (test_bit(ENTRY_DATA_IO_FAILED, &entry->flags)) | 573 | if (test_bit(ENTRY_DATA_IO_FAILED, &entry->flags)) |
| 564 | rt2x00lib_txdone_noinfo(entry, TXDONE_FAILURE); | 574 | rt2x00lib_txdone_noinfo(entry, TXDONE_FAILURE); |
| 565 | else if (rt2x00queue_status_timeout(entry)) | 575 | else if (rt2x00queue_status_timeout(entry)) |
diff --git a/drivers/net/wireless/rt2x00/rt2x00usb.c b/drivers/net/wireless/rt2x00/rt2x00usb.c index b6b4542c2460..7fbb55c9da82 100644 --- a/drivers/net/wireless/rt2x00/rt2x00usb.c +++ b/drivers/net/wireless/rt2x00/rt2x00usb.c | |||
| @@ -262,23 +262,20 @@ static void rt2x00usb_interrupt_txdone(struct urb *urb) | |||
| 262 | struct queue_entry *entry = (struct queue_entry *)urb->context; | 262 | struct queue_entry *entry = (struct queue_entry *)urb->context; |
| 263 | struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; | 263 | struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; |
| 264 | 264 | ||
| 265 | if (!test_and_clear_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags)) | 265 | if (!test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags)) |
| 266 | return; | 266 | return; |
| 267 | |||
| 268 | if (rt2x00dev->ops->lib->tx_dma_done) | ||
| 269 | rt2x00dev->ops->lib->tx_dma_done(entry); | ||
| 270 | |||
| 271 | /* | ||
| 272 | * Report the frame as DMA done | ||
| 273 | */ | ||
| 274 | rt2x00lib_dmadone(entry); | ||
| 275 | |||
| 276 | /* | 267 | /* |
| 277 | * Check if the frame was correctly uploaded | 268 | * Check if the frame was correctly uploaded |
| 278 | */ | 269 | */ |
| 279 | if (urb->status) | 270 | if (urb->status) |
| 280 | set_bit(ENTRY_DATA_IO_FAILED, &entry->flags); | 271 | set_bit(ENTRY_DATA_IO_FAILED, &entry->flags); |
| 272 | /* | ||
| 273 | * Report the frame as DMA done | ||
| 274 | */ | ||
| 275 | rt2x00lib_dmadone(entry); | ||
| 281 | 276 | ||
| 277 | if (rt2x00dev->ops->lib->tx_dma_done) | ||
| 278 | rt2x00dev->ops->lib->tx_dma_done(entry); | ||
| 282 | /* | 279 | /* |
| 283 | * Schedule the delayed work for reading the TX status | 280 | * Schedule the delayed work for reading the TX status |
| 284 | * from the device. | 281 | * from the device. |
diff --git a/drivers/net/wireless/wl12xx/acx.c b/drivers/net/wireless/wl12xx/acx.c index 7e33f1f4f3d4..34f6ab53e519 100644 --- a/drivers/net/wireless/wl12xx/acx.c +++ b/drivers/net/wireless/wl12xx/acx.c | |||
| @@ -77,8 +77,6 @@ int wl1271_acx_sleep_auth(struct wl1271 *wl, u8 sleep_auth) | |||
| 77 | auth->sleep_auth = sleep_auth; | 77 | auth->sleep_auth = sleep_auth; |
| 78 | 78 | ||
| 79 | ret = wl1271_cmd_configure(wl, ACX_SLEEP_AUTH, auth, sizeof(*auth)); | 79 | ret = wl1271_cmd_configure(wl, ACX_SLEEP_AUTH, auth, sizeof(*auth)); |
| 80 | if (ret < 0) | ||
| 81 | return ret; | ||
| 82 | 80 | ||
| 83 | out: | 81 | out: |
| 84 | kfree(auth); | 82 | kfree(auth); |
| @@ -624,10 +622,8 @@ int wl1271_acx_cca_threshold(struct wl1271 *wl) | |||
| 624 | 622 | ||
| 625 | ret = wl1271_cmd_configure(wl, ACX_CCA_THRESHOLD, | 623 | ret = wl1271_cmd_configure(wl, ACX_CCA_THRESHOLD, |
| 626 | detection, sizeof(*detection)); | 624 | detection, sizeof(*detection)); |
| 627 | if (ret < 0) { | 625 | if (ret < 0) |
| 628 | wl1271_warning("failed to set cca threshold: %d", ret); | 626 | wl1271_warning("failed to set cca threshold: %d", ret); |
| 629 | return ret; | ||
| 630 | } | ||
| 631 | 627 | ||
| 632 | out: | 628 | out: |
| 633 | kfree(detection); | 629 | kfree(detection); |
diff --git a/drivers/net/wireless/wl12xx/testmode.c b/drivers/net/wireless/wl12xx/testmode.c index 5d5e1ef87206..88add68bd9ac 100644 --- a/drivers/net/wireless/wl12xx/testmode.c +++ b/drivers/net/wireless/wl12xx/testmode.c | |||
| @@ -139,12 +139,15 @@ static int wl1271_tm_cmd_interrogate(struct wl1271 *wl, struct nlattr *tb[]) | |||
| 139 | 139 | ||
| 140 | if (ret < 0) { | 140 | if (ret < 0) { |
| 141 | wl1271_warning("testmode cmd interrogate failed: %d", ret); | 141 | wl1271_warning("testmode cmd interrogate failed: %d", ret); |
| 142 | kfree(cmd); | ||
| 142 | return ret; | 143 | return ret; |
| 143 | } | 144 | } |
| 144 | 145 | ||
| 145 | skb = cfg80211_testmode_alloc_reply_skb(wl->hw->wiphy, sizeof(*cmd)); | 146 | skb = cfg80211_testmode_alloc_reply_skb(wl->hw->wiphy, sizeof(*cmd)); |
| 146 | if (!skb) | 147 | if (!skb) { |
| 148 | kfree(cmd); | ||
| 147 | return -ENOMEM; | 149 | return -ENOMEM; |
| 150 | } | ||
| 148 | 151 | ||
| 149 | NLA_PUT(skb, WL1271_TM_ATTR_DATA, sizeof(*cmd), cmd); | 152 | NLA_PUT(skb, WL1271_TM_ATTR_DATA, sizeof(*cmd), cmd); |
| 150 | 153 | ||
