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 | ||