Commit 230f9bb701d37ae9b48e96456689452978f5c439

Authored by David S. Miller

Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6

Conflicts:
	drivers/net/usb/cdc_ether.c

All CDC ethernet devices of type USB_CLASS_COMM need to use
'&mbm_info'.

Signed-off-by: David S. Miller <davem@davemloft.net>

Showing 62 changed files Side-by-side Diff

... ... @@ -3655,6 +3655,7 @@
3655 3655 W: http://www.linuxfoundation.org/en/Net
3656 3656 W: http://patchwork.ozlabs.org/project/netdev/list/
3657 3657 T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.git
  3658 +T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6.git
3658 3659 S: Maintained
3659 3660 F: net/
3660 3661 F: include/net/
drivers/isdn/hardware/eicon/maintidi.c
... ... @@ -959,8 +959,9 @@
959 959 }
960 960 if (!strncmp("State\\Layer2 No1", path, pVar->path_length)) {
961 961 char* tmp = &pLib->lines[0].pInterface->Layer2[0];
962   - dword l2_state;
963   - diva_strace_read_uint (pVar, &l2_state);
  962 + dword l2_state;
  963 + if (diva_strace_read_uint(pVar, &l2_state))
  964 + return -1;
964 965  
965 966 switch (l2_state) {
966 967 case 0:
drivers/isdn/hardware/eicon/message.c
... ... @@ -2692,7 +2692,7 @@
2692 2692 if (!(fax_control_bits & T30_CONTROL_BIT_MORE_DOCUMENTS)
2693 2693 || (fax_feature_bits & T30_FEATURE_BIT_MORE_DOCUMENTS))
2694 2694 {
2695   - len = (byte)(&(((T30_INFO *) 0)->universal_6));
  2695 + len = offsetof(T30_INFO, universal_6);
2696 2696 fax_info_change = false;
2697 2697 if (ncpi->length >= 4)
2698 2698 {
... ... @@ -2754,7 +2754,7 @@
2754 2754 for (i = 0; i < w; i++)
2755 2755 ((T30_INFO *)(plci->fax_connect_info_buffer))->station_id[i] = fax_parms[4].info[1+i];
2756 2756 ((T30_INFO *)(plci->fax_connect_info_buffer))->head_line_len = 0;
2757   - len = (byte)(((T30_INFO *) 0)->station_id + 20);
  2757 + len = offsetof(T30_INFO, station_id) + 20;
2758 2758 w = fax_parms[5].length;
2759 2759 if (w > 20)
2760 2760 w = 20;
... ... @@ -2788,7 +2788,7 @@
2788 2788 }
2789 2789 else
2790 2790 {
2791   - len = (byte)(&(((T30_INFO *) 0)->universal_6));
  2791 + len = offsetof(T30_INFO, universal_6);
2792 2792 }
2793 2793 fax_info_change = true;
2794 2794  
... ... @@ -2892,7 +2892,7 @@
2892 2892 && (plci->nsf_control_bits & T30_NSF_CONTROL_BIT_ENABLE_NSF)
2893 2893 && (plci->nsf_control_bits & T30_NSF_CONTROL_BIT_NEGOTIATE_RESP))
2894 2894 {
2895   - len = ((byte)(((T30_INFO *) 0)->station_id + 20));
  2895 + len = offsetof(T30_INFO, station_id) + 20;
2896 2896 if (plci->fax_connect_info_length < len)
2897 2897 {
2898 2898 ((T30_INFO *)(plci->fax_connect_info_buffer))->station_id_len = 0;
... ... @@ -3802,7 +3802,7 @@
3802 3802 break;
3803 3803 }
3804 3804 ncpi = &m_parms[1];
3805   - len = ((byte)(((T30_INFO *) 0)->station_id + 20));
  3805 + len = offsetof(T30_INFO, station_id) + 20;
3806 3806 if (plci->fax_connect_info_length < len)
3807 3807 {
3808 3808 ((T30_INFO *)(plci->fax_connect_info_buffer))->station_id_len = 0;
... ... @@ -6844,7 +6844,7 @@
6844 6844 if ((plci->requested_options_conn | plci->requested_options | a->requested_options_table[plci->appl->Id-1])
6845 6845 & ((1L << PRIVATE_FAX_SUB_SEP_PWD) | (1L << PRIVATE_FAX_NONSTANDARD)))
6846 6846 {
6847   - i = ((word)(((T30_INFO *) 0)->station_id + 20)) + ((T30_INFO *)plci->NL.RBuffer->P)->head_line_len;
  6847 + i = offsetof(T30_INFO, station_id) + 20 + ((T30_INFO *)plci->NL.RBuffer->P)->head_line_len;
6848 6848 while (i < plci->NL.RBuffer->length)
6849 6849 plci->ncpi_buffer[++len] = plci->NL.RBuffer->P[i++];
6850 6850 }
... ... @@ -7236,7 +7236,7 @@
7236 7236 {
7237 7237 plci->RData[1].P = plci->RData[0].P;
7238 7238 plci->RData[1].PLength = plci->RData[0].PLength;
7239   - plci->RData[0].P = v120_header_buffer + (-((int) v120_header_buffer) & 3);
  7239 + plci->RData[0].P = v120_header_buffer + (-((unsigned long)v120_header_buffer) & 3);
7240 7240 if ((plci->NL.RBuffer->P[0] & V120_HEADER_EXTEND_BIT) || (plci->NL.RLength == 1))
7241 7241 plci->RData[0].PLength = 1;
7242 7242 else
... ... @@ -8473,7 +8473,7 @@
8473 8473 fax_control_bits |= T30_CONTROL_BIT_ACCEPT_SEL_POLLING;
8474 8474 }
8475 8475 len = nlc[0];
8476   - pos = ((byte)(((T30_INFO *) 0)->station_id + 20));
  8476 + pos = offsetof(T30_INFO, station_id) + 20;
8477 8477 if (pos < plci->fax_connect_info_length)
8478 8478 {
8479 8479 for (i = 1 + plci->fax_connect_info_buffer[pos]; i != 0; i--)
... ... @@ -8525,7 +8525,7 @@
8525 8525 }
8526 8526  
8527 8527 PUT_WORD(&(((T30_INFO *)&nlc[1])->control_bits_low), fax_control_bits);
8528   - len = ((byte)(((T30_INFO *) 0)->station_id + 20));
  8528 + len = offsetof(T30_INFO, station_id) + 20;
8529 8529 for (i = 0; i < len; i++)
8530 8530 plci->fax_connect_info_buffer[i] = nlc[1+i];
8531 8531 ((T30_INFO *) plci->fax_connect_info_buffer)->head_line_len = 0;
drivers/isdn/hisax/amd7930_fn.c
... ... @@ -594,6 +594,7 @@
594 594 if (cs->debug & L1_DEB_WARN)
595 595 debugl1(cs, "Amd7930: l1hw: l2l1 tx_skb exist this shouldn't happen");
596 596 skb_queue_tail(&cs->sq, skb);
  597 + spin_unlock_irqrestore(&cs->lock, flags);
597 598 break;
598 599 }
599 600 if (cs->debug & DEB_DLOG_HEX)
drivers/isdn/hisax/diva.c
... ... @@ -382,7 +382,7 @@
382 382 {
383 383 int to = 50;
384 384  
385   - while ((!(MemReadHSCX(cs, hscx, HSCX_STAR) & 0x44) == 0x40) && to) {
  385 + while (((MemReadHSCX(cs, hscx, HSCX_STAR) & 0x44) != 0x40) && to) {
386 386 udelay(1);
387 387 to--;
388 388 }
drivers/isdn/hisax/hfc_usb.c
... ... @@ -817,8 +817,8 @@
817 817 }
818 818 /* we have a complete hdlc packet */
819 819 if (finish) {
820   - if ((!fifo->skbuff->data[fifo->skbuff->len - 1])
821   - && (fifo->skbuff->len > 3)) {
  820 + if (fifo->skbuff->len > 3 &&
  821 + !fifo->skbuff->data[fifo->skbuff->len - 1]) {
822 822  
823 823 if (fifon == HFCUSB_D_RX) {
824 824 DBG(HFCUSB_DBG_DCHANNEL,
drivers/isdn/hisax/hscx_irq.c
... ... @@ -32,7 +32,7 @@
32 32 {
33 33 int to = 50;
34 34  
35   - while ((!(READHSCX(cs, hscx, HSCX_STAR) & 0x44) == 0x40) && to) {
  35 + while (((READHSCX(cs, hscx, HSCX_STAR) & 0x44) != 0x40) && to) {
36 36 udelay(1);
37 37 to--;
38 38 }
drivers/isdn/hisax/icc.c
... ... @@ -468,6 +468,7 @@
468 468 if (cs->debug & L1_DEB_WARN)
469 469 debugl1(cs, " l2l1 tx_skb exist this shouldn't happen");
470 470 skb_queue_tail(&cs->sq, skb);
  471 + spin_unlock_irqrestore(&cs->lock, flags);
471 472 break;
472 473 }
473 474 if (cs->debug & DEB_DLOG_HEX)
drivers/isdn/mISDN/stack.c
... ... @@ -364,7 +364,7 @@
364 364 static int
365 365 st_own_ctrl(struct mISDNchannel *ch, u_int cmd, void *arg)
366 366 {
367   - if (!ch->st || ch->st->layer1)
  367 + if (!ch->st || !ch->st->layer1)
368 368 return -EINVAL;
369 369 return ch->st->layer1->ctrl(ch->st->layer1, cmd, arg);
370 370 }
drivers/net/benet/be_cmds.h
... ... @@ -68,7 +68,7 @@
68 68 #define CQE_STATUS_COMPL_MASK 0xFFFF
69 69 #define CQE_STATUS_COMPL_SHIFT 0 /* bits 0 - 15 */
70 70 #define CQE_STATUS_EXTD_MASK 0xFFFF
71   -#define CQE_STATUS_EXTD_SHIFT 0 /* bits 0 - 15 */
  71 +#define CQE_STATUS_EXTD_SHIFT 16 /* bits 16 - 31 */
72 72  
73 73 struct be_mcc_compl {
74 74 u32 status; /* dword 0 */
drivers/net/davinci_emac.c
... ... @@ -2217,7 +2217,7 @@
2217 2217 struct emac_priv *priv = netdev_priv(ndev);
2218 2218  
2219 2219 emac_int_disable(priv);
2220   - emac_irq(ndev->irq, priv);
  2220 + emac_irq(ndev->irq, ndev);
2221 2221 emac_int_enable(priv);
2222 2222 }
2223 2223 #endif
... ... @@ -1438,18 +1438,30 @@
1438 1438 } else
1439 1439 DPRINTK(HW, DEBUG, "phy_addr = %d\n", nic->mii.phy_id);
1440 1440  
1441   - /* Isolate all the PHY ids */
1442   - for (addr = 0; addr < 32; addr++)
1443   - mdio_write(netdev, addr, MII_BMCR, BMCR_ISOLATE);
1444   - /* Select the discovered PHY */
1445   - bmcr &= ~BMCR_ISOLATE;
1446   - mdio_write(netdev, nic->mii.phy_id, MII_BMCR, bmcr);
1447   -
1448 1441 /* Get phy ID */
1449 1442 id_lo = mdio_read(netdev, nic->mii.phy_id, MII_PHYSID1);
1450 1443 id_hi = mdio_read(netdev, nic->mii.phy_id, MII_PHYSID2);
1451 1444 nic->phy = (u32)id_hi << 16 | (u32)id_lo;
1452 1445 DPRINTK(HW, DEBUG, "phy ID = 0x%08X\n", nic->phy);
  1446 +
  1447 + /* Select the phy and isolate the rest */
  1448 + for (addr = 0; addr < 32; addr++) {
  1449 + if (addr != nic->mii.phy_id) {
  1450 + mdio_write(netdev, addr, MII_BMCR, BMCR_ISOLATE);
  1451 + } else if (nic->phy != phy_82552_v) {
  1452 + bmcr = mdio_read(netdev, addr, MII_BMCR);
  1453 + mdio_write(netdev, addr, MII_BMCR,
  1454 + bmcr & ~BMCR_ISOLATE);
  1455 + }
  1456 + }
  1457 + /*
  1458 + * Workaround for 82552:
  1459 + * Clear the ISOLATE bit on selected phy_id last (mirrored on all
  1460 + * other phy_id's) using bmcr value from addr discovery loop above.
  1461 + */
  1462 + if (nic->phy == phy_82552_v)
  1463 + mdio_write(netdev, nic->mii.phy_id, MII_BMCR,
  1464 + bmcr & ~BMCR_ISOLATE);
1453 1465  
1454 1466 /* Handle National tx phys */
1455 1467 #define NCS_PHY_MODEL_MASK 0xFFF0FFFF
drivers/net/e1000e/defines.h
... ... @@ -76,6 +76,7 @@
76 76 /* Extended Device Control */
77 77 #define E1000_CTRL_EXT_SDP7_DATA 0x00000080 /* Value of SW Definable Pin 7 */
78 78 #define E1000_CTRL_EXT_EE_RST 0x00002000 /* Reinitialize from EEPROM */
  79 +#define E1000_CTRL_EXT_SPD_BYPS 0x00008000 /* Speed Select Bypass */
79 80 #define E1000_CTRL_EXT_RO_DIS 0x00020000 /* Relaxed Ordering disable */
80 81 #define E1000_CTRL_EXT_DMA_DYN_CLK_EN 0x00080000 /* DMA Dynamic Clock Gating */
81 82 #define E1000_CTRL_EXT_LINK_MODE_MASK 0x00C00000
... ... @@ -347,6 +348,7 @@
347 348 /* Extended Configuration Control and Size */
348 349 #define E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP 0x00000020
349 350 #define E1000_EXTCNF_CTRL_LCD_WRITE_ENABLE 0x00000001
  351 +#define E1000_EXTCNF_CTRL_OEM_WRITE_ENABLE 0x00000008
350 352 #define E1000_EXTCNF_CTRL_SWFLAG 0x00000020
351 353 #define E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH_MASK 0x00FF0000
352 354 #define E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH_SHIFT 16
drivers/net/e1000e/e1000.h
... ... @@ -141,6 +141,20 @@
141 141 #define HV_TNCRS_UPPER PHY_REG(778, 29) /* Transmit with no CRS */
142 142 #define HV_TNCRS_LOWER PHY_REG(778, 30)
143 143  
  144 +/* BM PHY Copper Specific Status */
  145 +#define BM_CS_STATUS 17
  146 +#define BM_CS_STATUS_LINK_UP 0x0400
  147 +#define BM_CS_STATUS_RESOLVED 0x0800
  148 +#define BM_CS_STATUS_SPEED_MASK 0xC000
  149 +#define BM_CS_STATUS_SPEED_1000 0x8000
  150 +
  151 +/* 82577 Mobile Phy Status Register */
  152 +#define HV_M_STATUS 26
  153 +#define HV_M_STATUS_AUTONEG_COMPLETE 0x1000
  154 +#define HV_M_STATUS_SPEED_MASK 0x0300
  155 +#define HV_M_STATUS_SPEED_1000 0x0200
  156 +#define HV_M_STATUS_LINK_UP 0x0040
  157 +
144 158 enum e1000_boards {
145 159 board_82571,
146 160 board_82572,
drivers/net/e1000e/hw.h
... ... @@ -903,6 +903,7 @@
903 903 struct e1000_dev_spec_ich8lan {
904 904 bool kmrn_lock_loss_workaround_enabled;
905 905 struct e1000_shadow_ram shadow_ram[E1000_ICH8_SHADOW_RAM_WORDS];
  906 + bool nvm_k1_enabled;
906 907 };
907 908  
908 909 struct e1000_hw {
drivers/net/e1000e/ich8lan.c
... ... @@ -124,11 +124,25 @@
124 124  
125 125 #define SW_FLAG_TIMEOUT 1000 /* SW Semaphore flag timeout in milliseconds */
126 126  
  127 +/* SMBus Address Phy Register */
  128 +#define HV_SMB_ADDR PHY_REG(768, 26)
  129 +#define HV_SMB_ADDR_PEC_EN 0x0200
  130 +#define HV_SMB_ADDR_VALID 0x0080
  131 +
  132 +/* Strapping Option Register - RO */
  133 +#define E1000_STRAP 0x0000C
  134 +#define E1000_STRAP_SMBUS_ADDRESS_MASK 0x00FE0000
  135 +#define E1000_STRAP_SMBUS_ADDRESS_SHIFT 17
  136 +
127 137 /* OEM Bits Phy Register */
128 138 #define HV_OEM_BITS PHY_REG(768, 25)
129 139 #define HV_OEM_BITS_LPLU 0x0004 /* Low Power Link Up */
  140 +#define HV_OEM_BITS_GBE_DIS 0x0040 /* Gigabit Disable */
130 141 #define HV_OEM_BITS_RESTART_AN 0x0400 /* Restart Auto-negotiation */
131 142  
  143 +#define E1000_NVM_K1_CONFIG 0x1B /* NVM K1 Config Word */
  144 +#define E1000_NVM_K1_ENABLE 0x1 /* NVM Enable K1 bit */
  145 +
132 146 /* ICH GbE Flash Hardware Sequencing Flash Status Register bit breakdown */
133 147 /* Offset 04h HSFSTS */
134 148 union ich8_hws_flash_status {
... ... @@ -208,6 +222,9 @@
208 222 static s32 e1000_led_on_pchlan(struct e1000_hw *hw);
209 223 static s32 e1000_led_off_pchlan(struct e1000_hw *hw);
210 224 static s32 e1000_set_lplu_state_pchlan(struct e1000_hw *hw, bool active);
  225 +static void e1000_lan_init_done_ich8lan(struct e1000_hw *hw);
  226 +static s32 e1000_k1_gig_workaround_hv(struct e1000_hw *hw, bool link);
  227 +static s32 e1000_configure_k1_ich8lan(struct e1000_hw *hw, bool k1_enable);
211 228  
212 229 static inline u16 __er16flash(struct e1000_hw *hw, unsigned long reg)
213 230 {
... ... @@ -483,14 +500,6 @@
483 500 goto out;
484 501 }
485 502  
486   - if (hw->mac.type == e1000_pchlan) {
487   - ret_val = e1000e_write_kmrn_reg(hw,
488   - E1000_KMRNCTRLSTA_K1_CONFIG,
489   - E1000_KMRNCTRLSTA_K1_ENABLE);
490   - if (ret_val)
491   - goto out;
492   - }
493   -
494 503 /*
495 504 * First we want to see if the MII Status Register reports
496 505 * link. If so, then we want to get the current speed/duplex
... ... @@ -500,6 +509,12 @@
500 509 if (ret_val)
501 510 goto out;
502 511  
  512 + if (hw->mac.type == e1000_pchlan) {
  513 + ret_val = e1000_k1_gig_workaround_hv(hw, link);
  514 + if (ret_val)
  515 + goto out;
  516 + }
  517 +
503 518 if (!link)
504 519 goto out; /* No link detected */
505 520  
... ... @@ -794,6 +809,326 @@
794 809 }
795 810  
796 811 /**
  812 + * e1000_sw_lcd_config_ich8lan - SW-based LCD Configuration
  813 + * @hw: pointer to the HW structure
  814 + *
  815 + * SW should configure the LCD from the NVM extended configuration region
  816 + * as a workaround for certain parts.
  817 + **/
  818 +static s32 e1000_sw_lcd_config_ich8lan(struct e1000_hw *hw)
  819 +{
  820 + struct e1000_phy_info *phy = &hw->phy;
  821 + u32 i, data, cnf_size, cnf_base_addr, sw_cfg_mask;
  822 + s32 ret_val;
  823 + u16 word_addr, reg_data, reg_addr, phy_page = 0;
  824 +
  825 + ret_val = hw->phy.ops.acquire_phy(hw);
  826 + if (ret_val)
  827 + return ret_val;
  828 +
  829 + /*
  830 + * Initialize the PHY from the NVM on ICH platforms. This
  831 + * is needed due to an issue where the NVM configuration is
  832 + * not properly autoloaded after power transitions.
  833 + * Therefore, after each PHY reset, we will load the
  834 + * configuration data out of the NVM manually.
  835 + */
  836 + if ((hw->mac.type == e1000_ich8lan && phy->type == e1000_phy_igp_3) ||
  837 + (hw->mac.type == e1000_pchlan)) {
  838 + struct e1000_adapter *adapter = hw->adapter;
  839 +
  840 + /* Check if SW needs to configure the PHY */
  841 + if ((adapter->pdev->device == E1000_DEV_ID_ICH8_IGP_M_AMT) ||
  842 + (adapter->pdev->device == E1000_DEV_ID_ICH8_IGP_M) ||
  843 + (hw->mac.type == e1000_pchlan))
  844 + sw_cfg_mask = E1000_FEXTNVM_SW_CONFIG_ICH8M;
  845 + else
  846 + sw_cfg_mask = E1000_FEXTNVM_SW_CONFIG;
  847 +
  848 + data = er32(FEXTNVM);
  849 + if (!(data & sw_cfg_mask))
  850 + goto out;
  851 +
  852 + /* Wait for basic configuration completes before proceeding */
  853 + e1000_lan_init_done_ich8lan(hw);
  854 +
  855 + /*
  856 + * Make sure HW does not configure LCD from PHY
  857 + * extended configuration before SW configuration
  858 + */
  859 + data = er32(EXTCNF_CTRL);
  860 + if (data & E1000_EXTCNF_CTRL_LCD_WRITE_ENABLE)
  861 + goto out;
  862 +
  863 + cnf_size = er32(EXTCNF_SIZE);
  864 + cnf_size &= E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH_MASK;
  865 + cnf_size >>= E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH_SHIFT;
  866 + if (!cnf_size)
  867 + goto out;
  868 +
  869 + cnf_base_addr = data & E1000_EXTCNF_CTRL_EXT_CNF_POINTER_MASK;
  870 + cnf_base_addr >>= E1000_EXTCNF_CTRL_EXT_CNF_POINTER_SHIFT;
  871 +
  872 + if (!(data & E1000_EXTCNF_CTRL_OEM_WRITE_ENABLE) &&
  873 + (hw->mac.type == e1000_pchlan)) {
  874 + /*
  875 + * HW configures the SMBus address and LEDs when the
  876 + * OEM and LCD Write Enable bits are set in the NVM.
  877 + * When both NVM bits are cleared, SW will configure
  878 + * them instead.
  879 + */
  880 + data = er32(STRAP);
  881 + data &= E1000_STRAP_SMBUS_ADDRESS_MASK;
  882 + reg_data = data >> E1000_STRAP_SMBUS_ADDRESS_SHIFT;
  883 + reg_data |= HV_SMB_ADDR_PEC_EN | HV_SMB_ADDR_VALID;
  884 + ret_val = e1000_write_phy_reg_hv_locked(hw, HV_SMB_ADDR,
  885 + reg_data);
  886 + if (ret_val)
  887 + goto out;
  888 +
  889 + data = er32(LEDCTL);
  890 + ret_val = e1000_write_phy_reg_hv_locked(hw,
  891 + HV_LED_CONFIG,
  892 + (u16)data);
  893 + if (ret_val)
  894 + goto out;
  895 + }
  896 + /* Configure LCD from extended configuration region. */
  897 +
  898 + /* cnf_base_addr is in DWORD */
  899 + word_addr = (u16)(cnf_base_addr << 1);
  900 +
  901 + for (i = 0; i < cnf_size; i++) {
  902 + ret_val = e1000_read_nvm(hw, (word_addr + i * 2), 1,
  903 + &reg_data);
  904 + if (ret_val)
  905 + goto out;
  906 +
  907 + ret_val = e1000_read_nvm(hw, (word_addr + i * 2 + 1),
  908 + 1, &reg_addr);
  909 + if (ret_val)
  910 + goto out;
  911 +
  912 + /* Save off the PHY page for future writes. */
  913 + if (reg_addr == IGP01E1000_PHY_PAGE_SELECT) {
  914 + phy_page = reg_data;
  915 + continue;
  916 + }
  917 +
  918 + reg_addr &= PHY_REG_MASK;
  919 + reg_addr |= phy_page;
  920 +
  921 + ret_val = phy->ops.write_phy_reg_locked(hw,
  922 + (u32)reg_addr,
  923 + reg_data);
  924 + if (ret_val)
  925 + goto out;
  926 + }
  927 + }
  928 +
  929 +out:
  930 + hw->phy.ops.release_phy(hw);
  931 + return ret_val;
  932 +}
  933 +
  934 +/**
  935 + * e1000_k1_gig_workaround_hv - K1 Si workaround
  936 + * @hw: pointer to the HW structure
  937 + * @link: link up bool flag
  938 + *
  939 + * If K1 is enabled for 1Gbps, the MAC might stall when transitioning
  940 + * from a lower speed. This workaround disables K1 whenever link is at 1Gig
  941 + * If link is down, the function will restore the default K1 setting located
  942 + * in the NVM.
  943 + **/
  944 +static s32 e1000_k1_gig_workaround_hv(struct e1000_hw *hw, bool link)
  945 +{
  946 + s32 ret_val = 0;
  947 + u16 status_reg = 0;
  948 + bool k1_enable = hw->dev_spec.ich8lan.nvm_k1_enabled;
  949 +
  950 + if (hw->mac.type != e1000_pchlan)
  951 + goto out;
  952 +
  953 + /* Wrap the whole flow with the sw flag */
  954 + ret_val = hw->phy.ops.acquire_phy(hw);
  955 + if (ret_val)
  956 + goto out;
  957 +
  958 + /* Disable K1 when link is 1Gbps, otherwise use the NVM setting */
  959 + if (link) {
  960 + if (hw->phy.type == e1000_phy_82578) {
  961 + ret_val = hw->phy.ops.read_phy_reg_locked(hw,
  962 + BM_CS_STATUS,
  963 + &status_reg);
  964 + if (ret_val)
  965 + goto release;
  966 +
  967 + status_reg &= BM_CS_STATUS_LINK_UP |
  968 + BM_CS_STATUS_RESOLVED |
  969 + BM_CS_STATUS_SPEED_MASK;
  970 +
  971 + if (status_reg == (BM_CS_STATUS_LINK_UP |
  972 + BM_CS_STATUS_RESOLVED |
  973 + BM_CS_STATUS_SPEED_1000))
  974 + k1_enable = false;
  975 + }
  976 +
  977 + if (hw->phy.type == e1000_phy_82577) {
  978 + ret_val = hw->phy.ops.read_phy_reg_locked(hw,
  979 + HV_M_STATUS,
  980 + &status_reg);
  981 + if (ret_val)
  982 + goto release;
  983 +
  984 + status_reg &= HV_M_STATUS_LINK_UP |
  985 + HV_M_STATUS_AUTONEG_COMPLETE |
  986 + HV_M_STATUS_SPEED_MASK;
  987 +
  988 + if (status_reg == (HV_M_STATUS_LINK_UP |
  989 + HV_M_STATUS_AUTONEG_COMPLETE |
  990 + HV_M_STATUS_SPEED_1000))
  991 + k1_enable = false;
  992 + }
  993 +
  994 + /* Link stall fix for link up */
  995 + ret_val = hw->phy.ops.write_phy_reg_locked(hw, PHY_REG(770, 19),
  996 + 0x0100);
  997 + if (ret_val)
  998 + goto release;
  999 +
  1000 + } else {
  1001 + /* Link stall fix for link down */
  1002 + ret_val = hw->phy.ops.write_phy_reg_locked(hw, PHY_REG(770, 19),
  1003 + 0x4100);
  1004 + if (ret_val)
  1005 + goto release;
  1006 + }
  1007 +
  1008 + ret_val = e1000_configure_k1_ich8lan(hw, k1_enable);
  1009 +
  1010 +release:
  1011 + hw->phy.ops.release_phy(hw);
  1012 +out:
  1013 + return ret_val;
  1014 +}
  1015 +
  1016 +/**
  1017 + * e1000_configure_k1_ich8lan - Configure K1 power state
  1018 + * @hw: pointer to the HW structure
  1019 + * @enable: K1 state to configure
  1020 + *
  1021 + * Configure the K1 power state based on the provided parameter.
  1022 + * Assumes semaphore already acquired.
  1023 + *
  1024 + * Success returns 0, Failure returns -E1000_ERR_PHY (-2)
  1025 + **/
  1026 +static s32 e1000_configure_k1_ich8lan(struct e1000_hw *hw, bool k1_enable)
  1027 +{
  1028 + s32 ret_val = 0;
  1029 + u32 ctrl_reg = 0;
  1030 + u32 ctrl_ext = 0;
  1031 + u32 reg = 0;
  1032 + u16 kmrn_reg = 0;
  1033 +
  1034 + ret_val = e1000e_read_kmrn_reg_locked(hw,
  1035 + E1000_KMRNCTRLSTA_K1_CONFIG,
  1036 + &kmrn_reg);
  1037 + if (ret_val)
  1038 + goto out;
  1039 +
  1040 + if (k1_enable)
  1041 + kmrn_reg |= E1000_KMRNCTRLSTA_K1_ENABLE;
  1042 + else
  1043 + kmrn_reg &= ~E1000_KMRNCTRLSTA_K1_ENABLE;
  1044 +
  1045 + ret_val = e1000e_write_kmrn_reg_locked(hw,
  1046 + E1000_KMRNCTRLSTA_K1_CONFIG,
  1047 + kmrn_reg);
  1048 + if (ret_val)
  1049 + goto out;
  1050 +
  1051 + udelay(20);
  1052 + ctrl_ext = er32(CTRL_EXT);
  1053 + ctrl_reg = er32(CTRL);
  1054 +
  1055 + reg = ctrl_reg & ~(E1000_CTRL_SPD_1000 | E1000_CTRL_SPD_100);
  1056 + reg |= E1000_CTRL_FRCSPD;
  1057 + ew32(CTRL, reg);
  1058 +
  1059 + ew32(CTRL_EXT, ctrl_ext | E1000_CTRL_EXT_SPD_BYPS);
  1060 + udelay(20);
  1061 + ew32(CTRL, ctrl_reg);
  1062 + ew32(CTRL_EXT, ctrl_ext);
  1063 + udelay(20);
  1064 +
  1065 +out:
  1066 + return ret_val;
  1067 +}
  1068 +
  1069 +/**
  1070 + * e1000_oem_bits_config_ich8lan - SW-based LCD Configuration
  1071 + * @hw: pointer to the HW structure
  1072 + * @d0_state: boolean if entering d0 or d3 device state
  1073 + *
  1074 + * SW will configure Gbe Disable and LPLU based on the NVM. The four bits are
  1075 + * collectively called OEM bits. The OEM Write Enable bit and SW Config bit
  1076 + * in NVM determines whether HW should configure LPLU and Gbe Disable.
  1077 + **/
  1078 +static s32 e1000_oem_bits_config_ich8lan(struct e1000_hw *hw, bool d0_state)
  1079 +{
  1080 + s32 ret_val = 0;
  1081 + u32 mac_reg;
  1082 + u16 oem_reg;
  1083 +
  1084 + if (hw->mac.type != e1000_pchlan)
  1085 + return ret_val;
  1086 +
  1087 + ret_val = hw->phy.ops.acquire_phy(hw);
  1088 + if (ret_val)
  1089 + return ret_val;
  1090 +
  1091 + mac_reg = er32(EXTCNF_CTRL);
  1092 + if (mac_reg & E1000_EXTCNF_CTRL_OEM_WRITE_ENABLE)
  1093 + goto out;
  1094 +
  1095 + mac_reg = er32(FEXTNVM);
  1096 + if (!(mac_reg & E1000_FEXTNVM_SW_CONFIG_ICH8M))
  1097 + goto out;
  1098 +
  1099 + mac_reg = er32(PHY_CTRL);
  1100 +
  1101 + ret_val = hw->phy.ops.read_phy_reg_locked(hw, HV_OEM_BITS, &oem_reg);
  1102 + if (ret_val)
  1103 + goto out;
  1104 +
  1105 + oem_reg &= ~(HV_OEM_BITS_GBE_DIS | HV_OEM_BITS_LPLU);
  1106 +
  1107 + if (d0_state) {
  1108 + if (mac_reg & E1000_PHY_CTRL_GBE_DISABLE)
  1109 + oem_reg |= HV_OEM_BITS_GBE_DIS;
  1110 +
  1111 + if (mac_reg & E1000_PHY_CTRL_D0A_LPLU)
  1112 + oem_reg |= HV_OEM_BITS_LPLU;
  1113 + } else {
  1114 + if (mac_reg & E1000_PHY_CTRL_NOND0A_GBE_DISABLE)
  1115 + oem_reg |= HV_OEM_BITS_GBE_DIS;
  1116 +
  1117 + if (mac_reg & E1000_PHY_CTRL_NOND0A_LPLU)
  1118 + oem_reg |= HV_OEM_BITS_LPLU;
  1119 + }
  1120 + /* Restart auto-neg to activate the bits */
  1121 + oem_reg |= HV_OEM_BITS_RESTART_AN;
  1122 + ret_val = hw->phy.ops.write_phy_reg_locked(hw, HV_OEM_BITS, oem_reg);
  1123 +
  1124 +out:
  1125 + hw->phy.ops.release_phy(hw);
  1126 +
  1127 + return ret_val;
  1128 +}
  1129 +
  1130 +
  1131 +/**
797 1132 * e1000_hv_phy_workarounds_ich8lan - A series of Phy workarounds to be
798 1133 * done after every PHY reset.
799 1134 **/
800 1135  
801 1136  
... ... @@ -833,10 +1168,20 @@
833 1168 ret_val = hw->phy.ops.acquire_phy(hw);
834 1169 if (ret_val)
835 1170 return ret_val;
  1171 +
836 1172 hw->phy.addr = 1;
837   - e1000e_write_phy_reg_mdic(hw, IGP01E1000_PHY_PAGE_SELECT, 0);
  1173 + ret_val = e1000e_write_phy_reg_mdic(hw, IGP01E1000_PHY_PAGE_SELECT, 0);
  1174 + if (ret_val)
  1175 + goto out;
838 1176 hw->phy.ops.release_phy(hw);
839 1177  
  1178 + /*
  1179 + * Configure the K1 Si workaround during phy reset assuming there is
  1180 + * link so that it disables K1 if link is in 1Gbps.
  1181 + */
  1182 + ret_val = e1000_k1_gig_workaround_hv(hw, true);
  1183 +
  1184 +out:
840 1185 return ret_val;
841 1186 }
842 1187  
... ... @@ -882,11 +1227,8 @@
882 1227 **/
883 1228 static s32 e1000_phy_hw_reset_ich8lan(struct e1000_hw *hw)
884 1229 {
885   - struct e1000_phy_info *phy = &hw->phy;
886   - u32 i;
887   - u32 data, cnf_size, cnf_base_addr, sw_cfg_mask;
888   - s32 ret_val;
889   - u16 reg, word_addr, reg_data, reg_addr, phy_page = 0;
  1230 + s32 ret_val = 0;
  1231 + u16 reg;
890 1232  
891 1233 ret_val = e1000e_phy_hw_reset_generic(hw);
892 1234 if (ret_val)
893 1235  
894 1236  
... ... @@ -905,81 +1247,16 @@
905 1247 if (hw->mac.type == e1000_pchlan)
906 1248 e1e_rphy(hw, BM_WUC, &reg);
907 1249  
908   - /*
909   - * Initialize the PHY from the NVM on ICH platforms. This
910   - * is needed due to an issue where the NVM configuration is
911   - * not properly autoloaded after power transitions.
912   - * Therefore, after each PHY reset, we will load the
913   - * configuration data out of the NVM manually.
914   - */
915   - if (hw->mac.type == e1000_ich8lan && phy->type == e1000_phy_igp_3) {
916   - struct e1000_adapter *adapter = hw->adapter;
  1250 + /* Configure the LCD with the extended configuration region in NVM */
  1251 + ret_val = e1000_sw_lcd_config_ich8lan(hw);
  1252 + if (ret_val)
  1253 + goto out;
917 1254  
918   - /* Check if SW needs configure the PHY */
919   - if ((adapter->pdev->device == E1000_DEV_ID_ICH8_IGP_M_AMT) ||
920   - (adapter->pdev->device == E1000_DEV_ID_ICH8_IGP_M))
921   - sw_cfg_mask = E1000_FEXTNVM_SW_CONFIG_ICH8M;
922   - else
923   - sw_cfg_mask = E1000_FEXTNVM_SW_CONFIG;
  1255 + /* Configure the LCD with the OEM bits in NVM */
  1256 + if (hw->mac.type == e1000_pchlan)
  1257 + ret_val = e1000_oem_bits_config_ich8lan(hw, true);
924 1258  
925   - data = er32(FEXTNVM);
926   - if (!(data & sw_cfg_mask))
927   - return 0;
928   -
929   - /* Wait for basic configuration completes before proceeding */
930   - e1000_lan_init_done_ich8lan(hw);
931   -
932   - /*
933   - * Make sure HW does not configure LCD from PHY
934   - * extended configuration before SW configuration
935   - */
936   - data = er32(EXTCNF_CTRL);
937   - if (data & E1000_EXTCNF_CTRL_LCD_WRITE_ENABLE)
938   - return 0;
939   -
940   - cnf_size = er32(EXTCNF_SIZE);
941   - cnf_size &= E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH_MASK;
942   - cnf_size >>= E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH_SHIFT;
943   - if (!cnf_size)
944   - return 0;
945   -
946   - cnf_base_addr = data & E1000_EXTCNF_CTRL_EXT_CNF_POINTER_MASK;
947   - cnf_base_addr >>= E1000_EXTCNF_CTRL_EXT_CNF_POINTER_SHIFT;
948   -
949   - /* Configure LCD from extended configuration region. */
950   -
951   - /* cnf_base_addr is in DWORD */
952   - word_addr = (u16)(cnf_base_addr << 1);
953   -
954   - for (i = 0; i < cnf_size; i++) {
955   - ret_val = e1000_read_nvm(hw,
956   - (word_addr + i * 2),
957   - 1,
958   - &reg_data);
959   - if (ret_val)
960   - return ret_val;
961   -
962   - ret_val = e1000_read_nvm(hw,
963   - (word_addr + i * 2 + 1),
964   - 1,
965   - &reg_addr);
966   - if (ret_val)
967   - return ret_val;
968   -
969   - /* Save off the PHY page for future writes. */
970   - if (reg_addr == IGP01E1000_PHY_PAGE_SELECT) {
971   - phy_page = reg_data;
972   - continue;
973   - }
974   -
975   - reg_addr |= phy_page;
976   -
977   - ret_val = e1e_wphy(hw, (u32)reg_addr, reg_data);
978   - if (ret_val)
979   - return ret_val;
980   - }
981   - }
982   -
  1259 +out:
983 1260 return 0;
984 1261 }
985 1262  
... ... @@ -2306,6 +2583,7 @@
2306 2583 **/
2307 2584 static s32 e1000_reset_hw_ich8lan(struct e1000_hw *hw)
2308 2585 {
  2586 + struct e1000_dev_spec_ich8lan *dev_spec = &hw->dev_spec.ich8lan;
2309 2587 u16 reg;
2310 2588 u32 ctrl, icr, kab;
2311 2589 s32 ret_val;
... ... @@ -2341,6 +2619,18 @@
2341 2619 ew32(PBS, E1000_PBS_16K);
2342 2620 }
2343 2621  
  2622 + if (hw->mac.type == e1000_pchlan) {
  2623 + /* Save the NVM K1 bit setting*/
  2624 + ret_val = e1000_read_nvm(hw, E1000_NVM_K1_CONFIG, 1, &reg);
  2625 + if (ret_val)
  2626 + return ret_val;
  2627 +
  2628 + if (reg & E1000_NVM_K1_ENABLE)
  2629 + dev_spec->nvm_k1_enabled = true;
  2630 + else
  2631 + dev_spec->nvm_k1_enabled = false;
  2632 + }
  2633 +
2344 2634 ctrl = er32(CTRL);
2345 2635  
2346 2636 if (!e1000_check_reset_block(hw)) {
... ... @@ -2386,6 +2676,15 @@
2386 2676 if (hw->mac.type == e1000_pchlan)
2387 2677 e1e_rphy(hw, BM_WUC, &reg);
2388 2678  
  2679 + ret_val = e1000_sw_lcd_config_ich8lan(hw);
  2680 + if (ret_val)
  2681 + goto out;
  2682 +
  2683 + if (hw->mac.type == e1000_pchlan) {
  2684 + ret_val = e1000_oem_bits_config_ich8lan(hw, true);
  2685 + if (ret_val)
  2686 + goto out;
  2687 + }
2389 2688 /*
2390 2689 * For PCH, this write will make sure that any noise
2391 2690 * will be detected as a CRC error and be dropped rather than show up
... ... @@ -2404,6 +2703,7 @@
2404 2703 if (hw->mac.type == e1000_pchlan)
2405 2704 ret_val = e1000_hv_phy_workarounds_ich8lan(hw);
2406 2705  
  2706 +out:
2407 2707 return ret_val;
2408 2708 }
2409 2709  
... ... @@ -2707,14 +3007,6 @@
2707 3007 ret_val = e1000e_get_speed_and_duplex_copper(hw, speed, duplex);
2708 3008 if (ret_val)
2709 3009 return ret_val;
2710   -
2711   - if ((hw->mac.type == e1000_pchlan) && (*speed == SPEED_1000)) {
2712   - ret_val = e1000e_write_kmrn_reg(hw,
2713   - E1000_KMRNCTRLSTA_K1_CONFIG,
2714   - E1000_KMRNCTRLSTA_K1_DISABLE);
2715   - if (ret_val)
2716   - return ret_val;
2717   - }
2718 3010  
2719 3011 if ((hw->mac.type == e1000_ich8lan) &&
2720 3012 (hw->phy.type == e1000_phy_igp_3) &&
drivers/net/e1000e/phy.c
... ... @@ -95,13 +95,6 @@
95 95 /* BM PHY Copper Specific Control 1 */
96 96 #define BM_CS_CTRL1 16
97 97  
98   -/* BM PHY Copper Specific Status */
99   -#define BM_CS_STATUS 17
100   -#define BM_CS_STATUS_LINK_UP 0x0400
101   -#define BM_CS_STATUS_RESOLVED 0x0800
102   -#define BM_CS_STATUS_SPEED_MASK 0xC000
103   -#define BM_CS_STATUS_SPEED_1000 0x8000
104   -
105 98 #define HV_MUX_DATA_CTRL PHY_REG(776, 16)
106 99 #define HV_MUX_DATA_CTRL_GEN_TO_MAC 0x0400
107 100 #define HV_MUX_DATA_CTRL_FORCE_SPEED 0x0004
... ... @@ -563,7 +556,7 @@
563 556 }
564 557  
565 558 /**
566   - * e1000_read_kmrn_reg_locked - Read kumeran register
  559 + * e1000e_read_kmrn_reg_locked - Read kumeran register
567 560 * @hw: pointer to the HW structure
568 561 * @offset: register offset to be read
569 562 * @data: pointer to the read data
... ... @@ -572,7 +565,7 @@
572 565 * information retrieved is stored in data.
573 566 * Assumes semaphore already acquired.
574 567 **/
575   -s32 e1000_read_kmrn_reg_locked(struct e1000_hw *hw, u32 offset, u16 *data)
  568 +s32 e1000e_read_kmrn_reg_locked(struct e1000_hw *hw, u32 offset, u16 *data)
576 569 {
577 570 return __e1000_read_kmrn_reg(hw, offset, data, true);
578 571 }
... ... @@ -631,7 +624,7 @@
631 624 }
632 625  
633 626 /**
634   - * e1000_write_kmrn_reg_locked - Write kumeran register
  627 + * e1000e_write_kmrn_reg_locked - Write kumeran register
635 628 * @hw: pointer to the HW structure
636 629 * @offset: register offset to write to
637 630 * @data: data to write at register offset
... ... @@ -639,7 +632,7 @@
639 632 * Write the data to PHY register at the offset using the kumeran interface.
640 633 * Assumes semaphore already acquired.
641 634 **/
642   -s32 e1000_write_kmrn_reg_locked(struct e1000_hw *hw, u32 offset, u16 data)
  635 +s32 e1000e_write_kmrn_reg_locked(struct e1000_hw *hw, u32 offset, u16 data)
643 636 {
644 637 return __e1000_write_kmrn_reg(hw, offset, data, true);
645 638 }
drivers/net/pcmcia/pcnet_cs.c
... ... @@ -1760,7 +1760,7 @@
1760 1760 PCMCIA_DEVICE_CIS_MANF_CARD(0xc00f, 0x0002, "cis/LA-PCM.cis"),
1761 1761 PCMCIA_DEVICE_CIS_PROD_ID12("KTI", "PE520 PLUS", 0xad180345, 0x9d58d392, "PE520.cis"),
1762 1762 PCMCIA_DEVICE_CIS_PROD_ID12("NDC", "Ethernet", 0x01c43ae1, 0x00b2e941, "cis/NE2K.cis"),
1763   - PCMCIA_DEVICE_CIS_PROD_ID12("PMX ", "PE-200", 0x34f3f1c8, 0x10b59f8c, "PE-200.cis"),
  1763 + PCMCIA_DEVICE_CIS_PROD_ID12("PMX ", "PE-200", 0x34f3f1c8, 0x10b59f8c, "cis/PE-200.cis"),
1764 1764 PCMCIA_DEVICE_CIS_PROD_ID12("TAMARACK", "Ethernet", 0xcf434fba, 0x00b2e941, "cis/tamarack.cis"),
1765 1765 PCMCIA_DEVICE_PROD_ID12("Ethernet", "CF Size PC Card", 0x00b2e941, 0x43ac239b),
1766 1766 PCMCIA_DEVICE_PROD_ID123("Fast Ethernet", "CF Size PC Card", "1.0",
... ... @@ -3379,7 +3379,7 @@
3379 3379 static void rtl_set_rx_max_size(void __iomem *ioaddr, unsigned int rx_buf_sz)
3380 3380 {
3381 3381 /* Low hurts. Let's disable the filtering. */
3382   - RTL_W16(RxMaxSize, rx_buf_sz);
  3382 + RTL_W16(RxMaxSize, rx_buf_sz + 1);
3383 3383 }
3384 3384  
3385 3385 static void rtl8169_set_magic_reg(void __iomem *ioaddr, unsigned mac_version)
... ... @@ -4651,6 +4651,8 @@
4651 4651 goto err_out_free_netdev;
4652 4652 }
4653 4653  
  4654 + netif_carrier_off(dev);
  4655 +
4654 4656 netif_napi_add(dev, &hw->napi, sky2_poll, NAPI_WEIGHT);
4655 4657  
4656 4658 err = request_irq(pdev->irq, sky2_intr,
drivers/net/tokenring/ibmtr.c
... ... @@ -1143,9 +1143,16 @@
1143 1143 } else {
1144 1144 char **prphase = printphase;
1145 1145 char **prerror = printerror;
  1146 + int pnr = err / 16 - 1;
  1147 + int enr = err % 16 - 1;
1146 1148 DPRINTK("TR Adapter misc open failure, error code = ");
1147   - printk("0x%x, Phase: %s, Error: %s\n",
1148   - err, prphase[err/16 -1], prerror[err%16 -1]);
  1149 + if (pnr < 0 || pnr >= ARRAY_SIZE(printphase) ||
  1150 + enr < 0 ||
  1151 + enr >= ARRAY_SIZE(printerror))
  1152 + printk("0x%x, invalid Phase/Error.", err);
  1153 + else
  1154 + printk("0x%x, Phase: %s, Error: %s\n", err,
  1155 + prphase[pnr], prerror[enr]);
1149 1156 printk(" retrying after %ds delay...\n",
1150 1157 TR_RETRY_INTERVAL/HZ);
1151 1158 }
drivers/net/usb/Kconfig
... ... @@ -174,7 +174,7 @@
174 174 * Ericsson Mobile Broadband Module (all variants)
175 175 * Motorola (DM100 and SB4100)
176 176 * Broadcom Cable Modem (reference design)
177   - * Toshiba (PCX1100U and F3507g)
  177 + * Toshiba (PCX1100U and F3507g/F3607gw)
178 178 * ...
179 179  
180 180 This driver creates an interface named "ethX", where X depends on
drivers/net/usb/cdc_ether.c
... ... @@ -552,18 +552,58 @@
552 552 USB_CDC_SUBCLASS_MDLM, USB_CDC_PROTO_NONE),
553 553 .driver_info = (unsigned long) &mbm_info,
554 554 }, {
555   - /* Ericsson F3307 */
  555 + /* Ericsson F3607gw ver 2 */
  556 + USB_DEVICE_AND_INTERFACE_INFO(0x0bdb, 0x1905, USB_CLASS_COMM,
  557 + USB_CDC_SUBCLASS_MDLM, USB_CDC_PROTO_NONE),
  558 + .driver_info = (unsigned long) &mbm_info,
  559 +}, {
  560 + /* Ericsson F3607gw ver 3 */
556 561 USB_DEVICE_AND_INTERFACE_INFO(0x0bdb, 0x1906, USB_CLASS_COMM,
557 562 USB_CDC_SUBCLASS_MDLM, USB_CDC_PROTO_NONE),
558 563 .driver_info = (unsigned long) &mbm_info,
559 564 }, {
  565 + /* Ericsson F3307 */
  566 + USB_DEVICE_AND_INTERFACE_INFO(0x0bdb, 0x190a, USB_CLASS_COMM,
  567 + USB_CDC_SUBCLASS_MDLM, USB_CDC_PROTO_NONE),
  568 + .driver_info = (unsigned long) &mbm_info,
  569 +}, {
  570 + /* Ericsson F3307 ver 2 */
  571 + USB_DEVICE_AND_INTERFACE_INFO(0x0bdb, 0x1909, USB_CLASS_COMM,
  572 + USB_CDC_SUBCLASS_MDLM, USB_CDC_PROTO_NONE),
  573 + .driver_info = (unsigned long) &mbm_info,
  574 +}, {
  575 + /* Ericsson C3607w */
  576 + USB_DEVICE_AND_INTERFACE_INFO(0x0bdb, 0x1049, USB_CLASS_COMM,
  577 + USB_CDC_SUBCLASS_MDLM, USB_CDC_PROTO_NONE),
  578 + .driver_info = (unsigned long) &mbm_info,
  579 +}, {
560 580 /* Toshiba F3507g */
561 581 USB_DEVICE_AND_INTERFACE_INFO(0x0930, 0x130b, USB_CLASS_COMM,
562 582 USB_CDC_SUBCLASS_MDLM, USB_CDC_PROTO_NONE),
563 583 .driver_info = (unsigned long) &mbm_info,
564 584 }, {
  585 + /* Toshiba F3607gw */
  586 + USB_DEVICE_AND_INTERFACE_INFO(0x0930, 0x130c, USB_CLASS_COMM,
  587 + USB_CDC_SUBCLASS_MDLM, USB_CDC_PROTO_NONE),
  588 + .driver_info = (unsigned long) &mbm_info,
  589 +}, {
  590 + /* Toshiba F3607gw ver 2 */
  591 + USB_DEVICE_AND_INTERFACE_INFO(0x0930, 0x1311, USB_CLASS_COMM,
  592 + USB_CDC_SUBCLASS_MDLM, USB_CDC_PROTO_NONE),
  593 + .driver_info = (unsigned long) &mbm_info,
  594 +}, {
565 595 /* Dell F3507g */
566 596 USB_DEVICE_AND_INTERFACE_INFO(0x413c, 0x8147, USB_CLASS_COMM,
  597 + USB_CDC_SUBCLASS_MDLM, USB_CDC_PROTO_NONE),
  598 + .driver_info = (unsigned long) &mbm_info,
  599 +}, {
  600 + /* Dell F3607gw */
  601 + USB_DEVICE_AND_INTERFACE_INFO(0x413c, 0x8183, USB_CLASS_COMM,
  602 + USB_CDC_SUBCLASS_MDLM, USB_CDC_PROTO_NONE),
  603 + .driver_info = (unsigned long) &mbm_info,
  604 +}, {
  605 + /* Dell F3607gw ver 2 */
  606 + USB_DEVICE_AND_INTERFACE_INFO(0x413c, 0x8184, USB_CLASS_COMM,
567 607 USB_CDC_SUBCLASS_MDLM, USB_CDC_PROTO_NONE),
568 608 .driver_info = (unsigned long) &mbm_info,
569 609 },
drivers/net/virtio_net.c
... ... @@ -996,7 +996,7 @@
996 996 VIRTIO_NET_F_CTRL_RX, VIRTIO_NET_F_CTRL_VLAN,
997 997 };
998 998  
999   -static struct virtio_driver virtio_net = {
  999 +static struct virtio_driver virtio_net_driver = {
1000 1000 .feature_table = features,
1001 1001 .feature_table_size = ARRAY_SIZE(features),
1002 1002 .driver.name = KBUILD_MODNAME,
1003 1003  
... ... @@ -1009,12 +1009,12 @@
1009 1009  
1010 1010 static int __init init(void)
1011 1011 {
1012   - return register_virtio_driver(&virtio_net);
  1012 + return register_virtio_driver(&virtio_net_driver);
1013 1013 }
1014 1014  
1015 1015 static void __exit fini(void)
1016 1016 {
1017   - unregister_virtio_driver(&virtio_net);
  1017 + unregister_virtio_driver(&virtio_net_driver);
1018 1018 }
1019 1019 module_init(init);
1020 1020 module_exit(fini);
drivers/net/wireless/ath/ath9k/rc.c
... ... @@ -679,7 +679,7 @@
679 679 return rate;
680 680  
681 681 if (rate_table->info[rate].valid_single_stream &&
682   - !(ath_rc_priv->ht_cap & WLAN_RC_DS_FLAG));
  682 + !(ath_rc_priv->ht_cap & WLAN_RC_DS_FLAG))
683 683 return rate;
684 684  
685 685 /* This should not happen */
drivers/net/wireless/b43/dma.c
... ... @@ -1157,8 +1157,9 @@
1157 1157 }
1158 1158  
1159 1159 static int dma_tx_fragment(struct b43_dmaring *ring,
1160   - struct sk_buff *skb)
  1160 + struct sk_buff **in_skb)
1161 1161 {
  1162 + struct sk_buff *skb = *in_skb;
1162 1163 const struct b43_dma_ops *ops = ring->ops;
1163 1164 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
1164 1165 u8 *header;
1165 1166  
... ... @@ -1224,8 +1225,14 @@
1224 1225 }
1225 1226  
1226 1227 memcpy(skb_put(bounce_skb, skb->len), skb->data, skb->len);
  1228 + memcpy(bounce_skb->cb, skb->cb, sizeof(skb->cb));
  1229 + bounce_skb->dev = skb->dev;
  1230 + skb_set_queue_mapping(bounce_skb, skb_get_queue_mapping(skb));
  1231 + info = IEEE80211_SKB_CB(bounce_skb);
  1232 +
1227 1233 dev_kfree_skb_any(skb);
1228 1234 skb = bounce_skb;
  1235 + *in_skb = bounce_skb;
1229 1236 meta->skb = skb;
1230 1237 meta->dmaaddr = map_descbuffer(ring, skb->data, skb->len, 1);
1231 1238 if (b43_dma_mapping_error(ring, meta->dmaaddr, skb->len, 1)) {
... ... @@ -1355,7 +1362,11 @@
1355 1362 * static, so we don't need to store it per frame. */
1356 1363 ring->queue_prio = skb_get_queue_mapping(skb);
1357 1364  
1358   - err = dma_tx_fragment(ring, skb);
  1365 + /* dma_tx_fragment might reallocate the skb, so invalidate pointers pointing
  1366 + * into the skb data or cb now. */
  1367 + hdr = NULL;
  1368 + info = NULL;
  1369 + err = dma_tx_fragment(ring, &skb);
1359 1370 if (unlikely(err == -ENOKEY)) {
1360 1371 /* Drop this packet, as we don't have the encryption key
1361 1372 * anymore and must not transmit it unencrypted. */
drivers/net/wireless/ipw2x00/ipw2100.c
... ... @@ -6325,8 +6325,10 @@
6325 6325  
6326 6326 fail:
6327 6327 if (dev) {
6328   - if (registered)
  6328 + if (registered) {
  6329 + unregister_ieee80211(priv->ieee);
6329 6330 unregister_netdev(dev);
  6331 + }
6330 6332  
6331 6333 ipw2100_hw_stop_adapter(priv);
6332 6334  
... ... @@ -6383,6 +6385,7 @@
6383 6385 /* Unregister the device first - this results in close()
6384 6386 * being called if the device is open. If we free storage
6385 6387 * first, then close() will crash. */
  6388 + unregister_ieee80211(priv->ieee);
6386 6389 unregister_netdev(dev);
6387 6390  
6388 6391 /* ipw2100_down will ensure that there is no more pending work
drivers/net/wireless/ipw2x00/ipw2200.c
... ... @@ -11822,6 +11822,7 @@
11822 11822 if (err) {
11823 11823 IPW_ERROR("Failed to register promiscuous network "
11824 11824 "device (error %d).\n", err);
  11825 + unregister_ieee80211(priv->ieee);
11825 11826 unregister_netdev(priv->net_dev);
11826 11827 goto out_remove_sysfs;
11827 11828 }
... ... @@ -11872,6 +11873,7 @@
11872 11873  
11873 11874 mutex_unlock(&priv->mutex);
11874 11875  
  11876 + unregister_ieee80211(priv->ieee);
11875 11877 unregister_netdev(priv->net_dev);
11876 11878  
11877 11879 if (priv->rxq) {
drivers/net/wireless/ipw2x00/libipw.h
... ... @@ -1020,6 +1020,7 @@
1020 1020 /* ieee80211.c */
1021 1021 extern void free_ieee80211(struct net_device *dev, int monitor);
1022 1022 extern struct net_device *alloc_ieee80211(int sizeof_priv, int monitor);
  1023 +extern void unregister_ieee80211(struct libipw_device *ieee);
1023 1024 extern int libipw_change_mtu(struct net_device *dev, int new_mtu);
1024 1025  
1025 1026 extern void libipw_networks_age(struct libipw_device *ieee,
drivers/net/wireless/ipw2x00/libipw_module.c
... ... @@ -235,16 +235,19 @@
235 235 libipw_networks_free(ieee);
236 236  
237 237 /* free cfg80211 resources */
238   - if (!monitor) {
239   - wiphy_unregister(ieee->wdev.wiphy);
240   - kfree(ieee->a_band.channels);
241   - kfree(ieee->bg_band.channels);
  238 + if (!monitor)
242 239 wiphy_free(ieee->wdev.wiphy);
243   - }
244 240  
245 241 free_netdev(dev);
246 242 }
247 243  
  244 +void unregister_ieee80211(struct libipw_device *ieee)
  245 +{
  246 + wiphy_unregister(ieee->wdev.wiphy);
  247 + kfree(ieee->a_band.channels);
  248 + kfree(ieee->bg_band.channels);
  249 +}
  250 +
248 251 #ifdef CONFIG_LIBIPW_DEBUG
249 252  
250 253 static int debug = 0;
... ... @@ -330,4 +333,5 @@
330 333  
331 334 EXPORT_SYMBOL(alloc_ieee80211);
332 335 EXPORT_SYMBOL(free_ieee80211);
  336 +EXPORT_SYMBOL(unregister_ieee80211);
drivers/net/wireless/libertas/if_usb.c
... ... @@ -511,7 +511,7 @@
511 511 /* Fill the receive configuration URB and initialise the Rx call back */
512 512 usb_fill_bulk_urb(cardp->rx_urb, cardp->udev,
513 513 usb_rcvbulkpipe(cardp->udev, cardp->ep_in),
514   - (void *) (skb->tail + (size_t) IPFIELD_ALIGN_OFFSET),
  514 + skb->data + IPFIELD_ALIGN_OFFSET,
515 515 MRVDRV_ETH_RX_PACKET_BUFFER_SIZE, callbackfn,
516 516 cardp);
517 517  
drivers/net/wireless/rt2x00/rt73usb.c
... ... @@ -2389,10 +2389,13 @@
2389 2389 { USB_DEVICE(0x13b1, 0x0023), USB_DEVICE_DATA(&rt73usb_ops) },
2390 2390 { USB_DEVICE(0x13b1, 0x0028), USB_DEVICE_DATA(&rt73usb_ops) },
2391 2391 /* MSI */
  2392 + { USB_DEVICE(0x0db0, 0x4600), USB_DEVICE_DATA(&rt73usb_ops) },
2392 2393 { USB_DEVICE(0x0db0, 0x6877), USB_DEVICE_DATA(&rt73usb_ops) },
2393 2394 { USB_DEVICE(0x0db0, 0x6874), USB_DEVICE_DATA(&rt73usb_ops) },
2394 2395 { USB_DEVICE(0x0db0, 0xa861), USB_DEVICE_DATA(&rt73usb_ops) },
2395 2396 { USB_DEVICE(0x0db0, 0xa874), USB_DEVICE_DATA(&rt73usb_ops) },
  2397 + /* Ovislink */
  2398 + { USB_DEVICE(0x1b75, 0x7318), USB_DEVICE_DATA(&rt73usb_ops) },
2396 2399 /* Ralink */
2397 2400 { USB_DEVICE(0x04bb, 0x093d), USB_DEVICE_DATA(&rt73usb_ops) },
2398 2401 { USB_DEVICE(0x148f, 0x2573), USB_DEVICE_DATA(&rt73usb_ops) },
... ... @@ -2420,6 +2423,8 @@
2420 2423 /* Planex */
2421 2424 { USB_DEVICE(0x2019, 0xab01), USB_DEVICE_DATA(&rt73usb_ops) },
2422 2425 { USB_DEVICE(0x2019, 0xab50), USB_DEVICE_DATA(&rt73usb_ops) },
  2426 + /* WideTell */
  2427 + { USB_DEVICE(0x7167, 0x3840), USB_DEVICE_DATA(&rt73usb_ops) },
2423 2428 /* Zcom */
2424 2429 { USB_DEVICE(0x0cde, 0x001c), USB_DEVICE_DATA(&rt73usb_ops) },
2425 2430 /* ZyXEL */
drivers/serial/serial_cs.c
... ... @@ -879,10 +879,10 @@
879 879 PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0175, 0x0000, "cis/DP83903.cis"),
880 880 PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0101, 0x0035, "cis/3CXEM556.cis"),
881 881 PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0101, 0x003d, "cis/3CXEM556.cis"),
882   - PCMCIA_DEVICE_CIS_PROD_ID12("Sierra Wireless", "AC850", 0xd85f6206, 0x42a2c018, "SW_8xx_SER.cis"), /* Sierra Wireless AC850 3G Network Adapter R1 */
883   - PCMCIA_DEVICE_CIS_MANF_CARD(0x0192, 0x0710, "SW_7xx_SER.cis"), /* Sierra Wireless AC710/AC750 GPRS Network Adapter R1 */
884   - PCMCIA_DEVICE_CIS_MANF_CARD(0x0192, 0xa555, "SW_555_SER.cis"), /* Sierra Aircard 555 CDMA 1xrtt Modem -- pre update */
885   - PCMCIA_DEVICE_CIS_MANF_CARD(0x013f, 0xa555, "SW_555_SER.cis"), /* Sierra Aircard 555 CDMA 1xrtt Modem -- post update */
  882 + PCMCIA_DEVICE_CIS_PROD_ID12("Sierra Wireless", "AC850", 0xd85f6206, 0x42a2c018, "cis/SW_8xx_SER.cis"), /* Sierra Wireless AC850 3G Network Adapter R1 */
  883 + PCMCIA_DEVICE_CIS_PROD_ID12("Sierra Wireless", "AC710/AC750", 0xd85f6206, 0x761b11e0, "cis/SW_7xx_SER.cis"), /* Sierra Wireless AC710/AC750 GPRS Network Adapter R1 */
  884 + PCMCIA_DEVICE_CIS_MANF_CARD(0x0192, 0xa555, "cis/SW_555_SER.cis"), /* Sierra Aircard 555 CDMA 1xrtt Modem -- pre update */
  885 + PCMCIA_DEVICE_CIS_MANF_CARD(0x013f, 0xa555, "cis/SW_555_SER.cis"), /* Sierra Aircard 555 CDMA 1xrtt Modem -- post update */
886 886 PCMCIA_DEVICE_CIS_PROD_ID12("MultiTech", "PCMCIA 56K DataFax", 0x842047ee, 0xc2efcf03, "cis/MT5634ZLX.cis"),
887 887 PCMCIA_DEVICE_CIS_PROD_ID12("ADVANTECH", "COMpad-32/85B-2", 0x96913a85, 0x27ab5437, "cis/COMpad2.cis"),
888 888 PCMCIA_DEVICE_CIS_PROD_ID12("ADVANTECH", "COMpad-32/85B-4", 0x96913a85, 0xcec8f102, "cis/COMpad4.cis"),
... ... @@ -69,11 +69,13 @@
69 69 fw-shipped-$(CONFIG_MYRI_SBUS) += myricom/lanai.bin
70 70 fw-shipped-$(CONFIG_PCMCIA_PCNET) += cis/LA-PCM.cis cis/PCMLM28.cis \
71 71 cis/DP83903.cis cis/NE2K.cis \
72   - cis/tamarack.cis
  72 + cis/tamarack.cis cis/PE-200.cis
73 73 fw-shipped-$(CONFIG_PCMCIA_3C589) += cis/3CXEM556.cis
74 74 fw-shipped-$(CONFIG_PCMCIA_3C574) += cis/3CCFEM556.cis
75 75 fw-shipped-$(CONFIG_SERIAL_8250_CS) += cis/MT5634ZLX.cis cis/RS-COM-2P.cis \
76   - cis/COMpad2.cis cis/COMpad4.cis
  76 + cis/COMpad2.cis cis/COMpad4.cis \
  77 + cis/SW_555_SER.cis cis/SW_7xx_SER.cis \
  78 + cis/SW_8xx_SER.cis
77 79 fw-shipped-$(CONFIG_PCMCIA_SMC91C92) += ositech/Xilinx7OD.bin
78 80 fw-shipped-$(CONFIG_SCSI_ADVANSYS) += advansys/mcode.bin advansys/38C1600.bin \
79 81 advansys/3550.bin advansys/38C0800.bin
... ... @@ -600,6 +600,7 @@
600 600 cis/DP83903.cis
601 601 cis/NE2K.cis
602 602 cis/tamarack.cis
  603 + cis/PE-200.cis
603 604  
604 605 Licence: GPL
605 606  
... ... @@ -633,6 +634,9 @@
633 634 cis/RS-COM-2P.cis
634 635 cis/COMpad2.cis
635 636 cis/COMpad4.cis
  637 + cis/SW_555_SER.cis
  638 + cis/SW_7xx_SER.cis
  639 + cis/SW_8xx_SER.cis
636 640  
637 641 Licence: GPL
638 642  
firmware/cis/PE-200.cis.ihex
  1 +:1000000001030000FF151E0401504D582020200060
  2 +:1000100050452D3230300045544845524E4554002D
  3 +:1000200052303100FF210206031A050101000101CF
  4 +:100030001B0EC181190155E051000F100F30FFFF59
  5 +:040040001400FF00A9
  6 +:00000001FF
  7 +#
  8 +# Replacement CIS for PE-200 ethernet card
  9 +#
firmware/cis/SW_555_SER.cis.ihex
  1 +:100000000101FF17034100FF20043F0110072102F7
  2 +:100010000200152A070053696572726120576972E0
  3 +:10002000656C657373004169724361726420353594
  4 +:1000300035004135353500526576203100FF1A050F
  5 +:1000400001030007731B0BE00118A360F8030730DE
  6 +:10005000BC3F1B08A10108A360F802071B08A2010E
  7 +:1000600008A360E803071B08A30108A360E80207D0
  8 +:0A0070001B04A40108231400FF0084
  9 +:00000001FF
  10 +#
  11 +# Replacement CIS for AC555 provided by Sierra Wireless
  12 +#
firmware/cis/SW_7xx_SER.cis.ihex
  1 +:100000000101FF17034100FF2004920110072102A4
  2 +:1000100002001537070053696572726120576972D3
  3 +:10002000656C6573730041433731302F4143373579
  4 +:10003000300047505253204E6574776F726B2041E9
  5 +:1000400064617074657200523100FF1A050103008B
  6 +:1000500007731B10E00119784D555D25A360F80367
  7 +:100060000730BC861B08A10108A360F802071B0823
  8 +:10007000A20108A360E803071B08A30108A360E826
  9 +:0C00800002071B04A40108231400FF0069
  10 +:00000001FF
  11 +#
  12 +# Replacement CIS for AC7xx provided by Sierra Wireless
  13 +#
firmware/cis/SW_8xx_SER.cis.ihex
  1 +:100000000101FF17034100FF2004920110072102A4
  2 +:100010000200152F070053696572726120576972DB
  3 +:10002000656C657373004143383530003347204EAB
  4 +:100030006574776F726B20416461707465720052F1
  5 +:100040003100FF1A0501030007731B10E001197846
  6 +:100050004D555D25A360F8480730BC861B08A101FB
  7 +:1000600008A360F847071B08A20108A360E8480737
  8 +:100070001B08A30108A360E847071B04A401082389
  9 +:040080001400FF0069
  10 +:00000001FF
  11 +#
  12 +# Replacement CIS for AC8xx provided by Sierra Wireless
  13 +#
include/linux/skbuff.h
... ... @@ -354,8 +354,8 @@
354 354 ipvs_property:1,
355 355 peeked:1,
356 356 nf_trace:1;
  357 + __be16 protocol:16;
357 358 kmemcheck_bitfield_end(flags1);
358   - __be16 protocol;
359 359  
360 360 void (*destructor)(struct sk_buff *skb);
361 361 #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
... ... @@ -367,7 +367,6 @@
367 367 #endif
368 368  
369 369 int iif;
370   - __u16 queue_mapping;
371 370 #ifdef CONFIG_NET_SCHED
372 371 __u16 tc_index; /* traffic control index */
373 372 #ifdef CONFIG_NET_CLS_ACT
... ... @@ -376,6 +375,7 @@
376 375 #endif
377 376  
378 377 kmemcheck_bitfield_begin(flags2);
  378 + __u16 queue_mapping:16;
379 379 #ifdef CONFIG_IPV6_NDISC_NODETYPE
380 380 __u8 ndisc_nodetype:2;
381 381 #endif
... ... @@ -1768,6 +1768,8 @@
1768 1768 int to_offset,
1769 1769 int size);
1770 1770 extern void skb_free_datagram(struct sock *sk, struct sk_buff *skb);
  1771 +extern void skb_free_datagram_locked(struct sock *sk,
  1772 + struct sk_buff *skb);
1771 1773 extern int skb_kill_datagram(struct sock *sk, struct sk_buff *skb,
1772 1774 unsigned int flags);
1773 1775 extern __wsum skb_checksum(const struct sk_buff *skb, int offset,
include/net/ip_fib.h
... ... @@ -213,7 +213,8 @@
213 213 extern const struct nla_policy rtm_ipv4_policy[];
214 214 extern void ip_fib_init(void);
215 215 extern int fib_validate_source(__be32 src, __be32 dst, u8 tos, int oif,
216   - struct net_device *dev, __be32 *spec_dst, u32 *itag);
  216 + struct net_device *dev, __be32 *spec_dst,
  217 + u32 *itag, u32 mark);
217 218 extern void fib_select_default(struct net *net, const struct flowi *flp,
218 219 struct fib_result *res);
219 220  
include/net/netfilter/nf_conntrack.h
... ... @@ -255,11 +255,9 @@
255 255 }
256 256  
257 257 /* These are for NAT. Icky. */
258   -/* Update TCP window tracking data when NAT mangles the packet */
259   -extern void nf_conntrack_tcp_update(const struct sk_buff *skb,
260   - unsigned int dataoff,
261   - struct nf_conn *ct, int dir,
262   - s16 offset);
  258 +extern s16 (*nf_ct_nat_offset)(const struct nf_conn *ct,
  259 + enum ip_conntrack_dir dir,
  260 + u32 seq);
263 261  
264 262 /* Fake conntrack entry for untracked connections */
265 263 extern struct nf_conn nf_conntrack_untracked;
include/net/netfilter/nf_nat_helper.h
... ... @@ -32,5 +32,9 @@
32 32 * to port ct->master->saved_proto. */
33 33 extern void nf_nat_follow_master(struct nf_conn *ct,
34 34 struct nf_conntrack_expect *this);
  35 +
  36 +extern s16 nf_nat_get_offset(const struct nf_conn *ct,
  37 + enum ip_conntrack_dir dir,
  38 + u32 seq);
35 39 #endif
... ... @@ -377,12 +377,16 @@
377 377 struct net_bridge_port *p;
378 378 int err = 0;
379 379  
380   - if (dev->flags & IFF_LOOPBACK || dev->type != ARPHRD_ETHER)
  380 + /* Don't allow bridging non-ethernet like devices */
  381 + if ((dev->flags & IFF_LOOPBACK) ||
  382 + dev->type != ARPHRD_ETHER || dev->addr_len != ETH_ALEN)
381 383 return -EINVAL;
382 384  
  385 + /* No bridging of bridges */
383 386 if (dev->netdev_ops->ndo_start_xmit == br_dev_xmit)
384 387 return -ELOOP;
385 388  
  389 + /* Device is already being bridged */
386 390 if (dev->br_port != NULL)
387 391 return -EBUSY;
388 392  
... ... @@ -224,7 +224,16 @@
224 224 consume_skb(skb);
225 225 sk_mem_reclaim_partial(sk);
226 226 }
  227 +EXPORT_SYMBOL(skb_free_datagram);
227 228  
  229 +void skb_free_datagram_locked(struct sock *sk, struct sk_buff *skb)
  230 +{
  231 + lock_sock(sk);
  232 + skb_free_datagram(sk, skb);
  233 + release_sock(sk);
  234 +}
  235 +EXPORT_SYMBOL(skb_free_datagram_locked);
  236 +
228 237 /**
229 238 * skb_kill_datagram - Free a datagram skbuff forcibly
230 239 * @sk: socket
... ... @@ -753,6 +762,5 @@
753 762 EXPORT_SYMBOL(datagram_poll);
754 763 EXPORT_SYMBOL(skb_copy_and_csum_datagram_iovec);
755 764 EXPORT_SYMBOL(skb_copy_datagram_iovec);
756   -EXPORT_SYMBOL(skb_free_datagram);
757 765 EXPORT_SYMBOL(skb_recv_datagram);
net/decnet/sysctl_net_decnet.c
... ... @@ -263,11 +263,10 @@
263 263 return -ENODEV;
264 264  
265 265 rv = -ENODEV;
266   - if (dev->dn_ptr != NULL) {
  266 + if (dev->dn_ptr != NULL)
267 267 rv = dn_dev_set_default(dev, 1);
268   - if (rv)
269   - dev_put(dev);
270   - }
  268 + if (rv)
  269 + dev_put(dev);
271 270 }
272 271  
273 272 return rv;
net/ipv4/fib_frontend.c
... ... @@ -229,14 +229,17 @@
229 229 */
230 230  
231 231 int fib_validate_source(__be32 src, __be32 dst, u8 tos, int oif,
232   - struct net_device *dev, __be32 *spec_dst, u32 *itag)
  232 + struct net_device *dev, __be32 *spec_dst,
  233 + u32 *itag, u32 mark)
233 234 {
234 235 struct in_device *in_dev;
235 236 struct flowi fl = { .nl_u = { .ip4_u =
236 237 { .daddr = src,
237 238 .saddr = dst,
238 239 .tos = tos } },
  240 + .mark = mark,
239 241 .iif = oif };
  242 +
240 243 struct fib_result res;
241 244 int no_addr, rpf;
242 245 int ret;
... ... @@ -1476,7 +1476,7 @@
1476 1476  
1477 1477 ether_setup(dev);
1478 1478  
1479   - dev->netdev_ops = &ipgre_netdev_ops;
  1479 + dev->netdev_ops = &ipgre_tap_netdev_ops;
1480 1480 dev->destructor = free_netdev;
1481 1481  
1482 1482 dev->iflink = 0;
1483 1483  
1484 1484  
1485 1485  
1486 1486  
... ... @@ -1537,25 +1537,29 @@
1537 1537 if (t->dev != dev)
1538 1538 return -EEXIST;
1539 1539 } else {
1540   - unsigned nflags = 0;
1541   -
1542 1540 t = nt;
1543 1541  
1544   - if (ipv4_is_multicast(p.iph.daddr))
1545   - nflags = IFF_BROADCAST;
1546   - else if (p.iph.daddr)
1547   - nflags = IFF_POINTOPOINT;
  1542 + if (dev->type != ARPHRD_ETHER) {
  1543 + unsigned nflags = 0;
1548 1544  
1549   - if ((dev->flags ^ nflags) &
1550   - (IFF_POINTOPOINT | IFF_BROADCAST))
1551   - return -EINVAL;
  1545 + if (ipv4_is_multicast(p.iph.daddr))
  1546 + nflags = IFF_BROADCAST;
  1547 + else if (p.iph.daddr)
  1548 + nflags = IFF_POINTOPOINT;
1552 1549  
  1550 + if ((dev->flags ^ nflags) &
  1551 + (IFF_POINTOPOINT | IFF_BROADCAST))
  1552 + return -EINVAL;
  1553 + }
  1554 +
1553 1555 ipgre_tunnel_unlink(ign, t);
1554 1556 t->parms.iph.saddr = p.iph.saddr;
1555 1557 t->parms.iph.daddr = p.iph.daddr;
1556 1558 t->parms.i_key = p.i_key;
1557   - memcpy(dev->dev_addr, &p.iph.saddr, 4);
1558   - memcpy(dev->broadcast, &p.iph.daddr, 4);
  1559 + if (dev->type != ARPHRD_ETHER) {
  1560 + memcpy(dev->dev_addr, &p.iph.saddr, 4);
  1561 + memcpy(dev->broadcast, &p.iph.daddr, 4);
  1562 + }
1559 1563 ipgre_tunnel_link(ign, t);
1560 1564 netdev_state_change(dev);
1561 1565 }
net/ipv4/netfilter/nf_nat_core.c
... ... @@ -750,6 +750,8 @@
750 750 BUG_ON(nfnetlink_parse_nat_setup_hook != NULL);
751 751 rcu_assign_pointer(nfnetlink_parse_nat_setup_hook,
752 752 nfnetlink_parse_nat_setup);
  753 + BUG_ON(nf_ct_nat_offset != NULL);
  754 + rcu_assign_pointer(nf_ct_nat_offset, nf_nat_get_offset);
753 755 return 0;
754 756  
755 757 cleanup_extend:
... ... @@ -764,6 +766,7 @@
764 766 nf_ct_extend_unregister(&nat_extend);
765 767 rcu_assign_pointer(nf_nat_seq_adjust_hook, NULL);
766 768 rcu_assign_pointer(nfnetlink_parse_nat_setup_hook, NULL);
  769 + rcu_assign_pointer(nf_ct_nat_offset, NULL);
767 770 synchronize_net();
768 771 }
769 772  
net/ipv4/netfilter/nf_nat_helper.c
... ... @@ -73,6 +73,28 @@
73 73 DUMP_OFFSET(this_way);
74 74 }
75 75  
  76 +/* Get the offset value, for conntrack */
  77 +s16 nf_nat_get_offset(const struct nf_conn *ct,
  78 + enum ip_conntrack_dir dir,
  79 + u32 seq)
  80 +{
  81 + struct nf_conn_nat *nat = nfct_nat(ct);
  82 + struct nf_nat_seq *this_way;
  83 + s16 offset;
  84 +
  85 + if (!nat)
  86 + return 0;
  87 +
  88 + this_way = &nat->seq[dir];
  89 + spin_lock_bh(&nf_nat_seqofs_lock);
  90 + offset = after(seq, this_way->correction_pos)
  91 + ? this_way->offset_after : this_way->offset_before;
  92 + spin_unlock_bh(&nf_nat_seqofs_lock);
  93 +
  94 + return offset;
  95 +}
  96 +EXPORT_SYMBOL_GPL(nf_nat_get_offset);
  97 +
76 98 /* Frobs data inside this packet, which is linear. */
77 99 static void mangle_contents(struct sk_buff *skb,
78 100 unsigned int dataoff,
... ... @@ -189,11 +211,6 @@
189 211 adjust_tcp_sequence(ntohl(tcph->seq),
190 212 (int)rep_len - (int)match_len,
191 213 ct, ctinfo);
192   - /* Tell TCP window tracking about seq change */
193   - nf_conntrack_tcp_update(skb, ip_hdrlen(skb),
194   - ct, CTINFO2DIR(ctinfo),
195   - (int)rep_len - (int)match_len);
196   -
197 214 nf_conntrack_event_cache(IPCT_NATSEQADJ, ct);
198 215 }
199 216 return 1;
... ... @@ -415,12 +432,7 @@
415 432 tcph->seq = newseq;
416 433 tcph->ack_seq = newack;
417 434  
418   - if (!nf_nat_sack_adjust(skb, tcph, ct, ctinfo))
419   - return 0;
420   -
421   - nf_conntrack_tcp_update(skb, ip_hdrlen(skb), ct, dir, seqoff);
422   -
423   - return 1;
  435 + return nf_nat_sack_adjust(skb, tcph, ct, ctinfo);
424 436 }
425 437  
426 438 /* Setup NAT on this expected conntrack so it follows master. */
... ... @@ -1851,7 +1851,7 @@
1851 1851 goto e_inval;
1852 1852 spec_dst = inet_select_addr(dev, 0, RT_SCOPE_LINK);
1853 1853 } else if (fib_validate_source(saddr, 0, tos, 0,
1854   - dev, &spec_dst, &itag) < 0)
  1854 + dev, &spec_dst, &itag, 0) < 0)
1855 1855 goto e_inval;
1856 1856  
1857 1857 rth = dst_alloc(&ipv4_dst_ops);
... ... @@ -1964,7 +1964,7 @@
1964 1964  
1965 1965  
1966 1966 err = fib_validate_source(saddr, daddr, tos, FIB_RES_OIF(*res),
1967   - in_dev->dev, &spec_dst, &itag);
  1967 + in_dev->dev, &spec_dst, &itag, skb->mark);
1968 1968 if (err < 0) {
1969 1969 ip_handle_martian_source(in_dev->dev, in_dev, skb, daddr,
1970 1970 saddr);
... ... @@ -2138,7 +2138,7 @@
2138 2138 int result;
2139 2139 result = fib_validate_source(saddr, daddr, tos,
2140 2140 net->loopback_dev->ifindex,
2141   - dev, &spec_dst, &itag);
  2141 + dev, &spec_dst, &itag, skb->mark);
2142 2142 if (result < 0)
2143 2143 goto martian_source;
2144 2144 if (result)
... ... @@ -2167,7 +2167,7 @@
2167 2167 spec_dst = inet_select_addr(dev, 0, RT_SCOPE_LINK);
2168 2168 else {
2169 2169 err = fib_validate_source(saddr, 0, tos, 0, dev, &spec_dst,
2170   - &itag);
  2170 + &itag, skb->mark);
2171 2171 if (err < 0)
2172 2172 goto martian_source;
2173 2173 if (err)
... ... @@ -1005,9 +1005,7 @@
1005 1005 err = ulen;
1006 1006  
1007 1007 out_free:
1008   - lock_sock(sk);
1009   - skb_free_datagram(sk, skb);
1010   - release_sock(sk);
  1008 + skb_free_datagram_locked(sk, skb);
1011 1009 out:
1012 1010 return err;
1013 1011  
... ... @@ -288,9 +288,7 @@
288 288 err = ulen;
289 289  
290 290 out_free:
291   - lock_sock(sk);
292   - skb_free_datagram(sk, skb);
293   - release_sock(sk);
  291 + skb_free_datagram_locked(sk, skb);
294 292 out:
295 293 return err;
296 294  
net/mac80211/agg-tx.c
... ... @@ -666,26 +666,25 @@
666 666  
667 667 state = &sta->ampdu_mlme.tid_state_tx[tid];
668 668  
  669 + del_timer_sync(&sta->ampdu_mlme.tid_tx[tid]->addba_resp_timer);
  670 +
669 671 spin_lock_bh(&sta->lock);
670 672  
671   - if (!(*state & HT_ADDBA_REQUESTED_MSK)) {
672   - spin_unlock_bh(&sta->lock);
673   - return;
674   - }
  673 + if (!(*state & HT_ADDBA_REQUESTED_MSK))
  674 + goto timer_still_needed;
675 675  
676 676 if (mgmt->u.action.u.addba_resp.dialog_token !=
677 677 sta->ampdu_mlme.tid_tx[tid]->dialog_token) {
678   - spin_unlock_bh(&sta->lock);
679 678 #ifdef CONFIG_MAC80211_HT_DEBUG
680 679 printk(KERN_DEBUG "wrong addBA response token, tid %d\n", tid);
681 680 #endif /* CONFIG_MAC80211_HT_DEBUG */
682   - return;
  681 + goto timer_still_needed;
683 682 }
684 683  
685   - del_timer_sync(&sta->ampdu_mlme.tid_tx[tid]->addba_resp_timer);
686 684 #ifdef CONFIG_MAC80211_HT_DEBUG
687 685 printk(KERN_DEBUG "switched off addBA timer for tid %d \n", tid);
688 686 #endif /* CONFIG_MAC80211_HT_DEBUG */
  687 +
689 688 if (le16_to_cpu(mgmt->u.action.u.addba_resp.status)
690 689 == WLAN_STATUS_SUCCESS) {
691 690 u8 curstate = *state;
... ... @@ -699,6 +698,12 @@
699 698 } else {
700 699 ___ieee80211_stop_tx_ba_session(sta, tid, WLAN_BACK_INITIATOR);
701 700 }
  701 +
  702 + goto out;
  703 +
  704 + timer_still_needed:
  705 + add_timer(&sta->ampdu_mlme.tid_tx[tid]->addba_resp_timer);
  706 + out:
702 707 spin_unlock_bh(&sta->lock);
703 708 }
... ... @@ -72,6 +72,9 @@
72 72 struct ieee80211_sub_if_data *sdata;
73 73 int ret;
74 74  
  75 + if (netif_running(dev))
  76 + return -EBUSY;
  77 +
75 78 if (!nl80211_type_check(type))
76 79 return -EINVAL;
77 80  
... ... @@ -80,9 +83,6 @@
80 83 ret = ieee80211_if_change_type(sdata, type);
81 84 if (ret)
82 85 return ret;
83   -
84   - if (netif_running(sdata->dev))
85   - return -EBUSY;
86 86  
87 87 if (ieee80211_vif_is_mesh(&sdata->vif) && params->mesh_id_len)
88 88 ieee80211_sdata_set_mesh_id(sdata,
... ... @@ -153,7 +153,7 @@
153 153 if (net_ratelimit())
154 154 printk(KERN_DEBUG "delba from %pM (%s) tid %d reason code %d\n",
155 155 mgmt->sa, initiator ? "initiator" : "recipient", tid,
156   - mgmt->u.action.u.delba.reason_code);
  156 + le16_to_cpu(mgmt->u.action.u.delba.reason_code));
157 157 #endif /* CONFIG_MAC80211_HT_DEBUG */
158 158  
159 159 if (initiator == WLAN_BACK_INITIATOR)
... ... @@ -73,6 +73,7 @@
73 73 struct ieee80211_mgmt *mgmt;
74 74 u8 *pos;
75 75 struct ieee80211_supported_band *sband;
  76 + struct cfg80211_bss *bss;
76 77 u32 bss_change;
77 78 u8 supp_rates[IEEE80211_MAX_SUPP_RATES];
78 79  
... ... @@ -177,8 +178,9 @@
177 178 mod_timer(&ifibss->timer,
178 179 round_jiffies(jiffies + IEEE80211_IBSS_MERGE_INTERVAL));
179 180  
180   - cfg80211_inform_bss_frame(local->hw.wiphy, local->hw.conf.channel,
181   - mgmt, skb->len, 0, GFP_KERNEL);
  181 + bss = cfg80211_inform_bss_frame(local->hw.wiphy, local->hw.conf.channel,
  182 + mgmt, skb->len, 0, GFP_KERNEL);
  183 + cfg80211_put_bss(bss);
182 184 cfg80211_ibss_joined(sdata->dev, ifibss->bssid, GFP_KERNEL);
183 185 }
184 186  
net/netfilter/nf_conntrack_core.c
... ... @@ -1350,6 +1350,11 @@
1350 1350 return ret;
1351 1351 }
1352 1352  
  1353 +s16 (*nf_ct_nat_offset)(const struct nf_conn *ct,
  1354 + enum ip_conntrack_dir dir,
  1355 + u32 seq);
  1356 +EXPORT_SYMBOL_GPL(nf_ct_nat_offset);
  1357 +
1353 1358 int nf_conntrack_init(struct net *net)
1354 1359 {
1355 1360 int ret;
... ... @@ -1367,6 +1372,9 @@
1367 1372 /* For use by REJECT target */
1368 1373 rcu_assign_pointer(ip_ct_attach, nf_conntrack_attach);
1369 1374 rcu_assign_pointer(nf_ct_destroy, destroy_conntrack);
  1375 +
  1376 + /* Howto get NAT offsets */
  1377 + rcu_assign_pointer(nf_ct_nat_offset, NULL);
1370 1378 }
1371 1379 return 0;
1372 1380  
net/netfilter/nf_conntrack_proto_tcp.c
... ... @@ -492,6 +492,21 @@
492 492 }
493 493 }
494 494  
  495 +#ifdef CONFIG_NF_NAT_NEEDED
  496 +static inline s16 nat_offset(const struct nf_conn *ct,
  497 + enum ip_conntrack_dir dir,
  498 + u32 seq)
  499 +{
  500 + typeof(nf_ct_nat_offset) get_offset = rcu_dereference(nf_ct_nat_offset);
  501 +
  502 + return get_offset != NULL ? get_offset(ct, dir, seq) : 0;
  503 +}
  504 +#define NAT_OFFSET(pf, ct, dir, seq) \
  505 + (pf == NFPROTO_IPV4 ? nat_offset(ct, dir, seq) : 0)
  506 +#else
  507 +#define NAT_OFFSET(pf, ct, dir, seq) 0
  508 +#endif
  509 +
495 510 static bool tcp_in_window(const struct nf_conn *ct,
496 511 struct ip_ct_tcp *state,
497 512 enum ip_conntrack_dir dir,
... ... @@ -506,6 +521,7 @@
506 521 struct ip_ct_tcp_state *receiver = &state->seen[!dir];
507 522 const struct nf_conntrack_tuple *tuple = &ct->tuplehash[dir].tuple;
508 523 __u32 seq, ack, sack, end, win, swin;
  524 + s16 receiver_offset;
509 525 bool res;
510 526  
511 527 /*
512 528  
... ... @@ -519,11 +535,16 @@
519 535 if (receiver->flags & IP_CT_TCP_FLAG_SACK_PERM)
520 536 tcp_sack(skb, dataoff, tcph, &sack);
521 537  
  538 + /* Take into account NAT sequence number mangling */
  539 + receiver_offset = NAT_OFFSET(pf, ct, !dir, ack - 1);
  540 + ack -= receiver_offset;
  541 + sack -= receiver_offset;
  542 +
522 543 pr_debug("tcp_in_window: START\n");
523 544 pr_debug("tcp_in_window: ");
524 545 nf_ct_dump_tuple(tuple);
525   - pr_debug("seq=%u ack=%u sack=%u win=%u end=%u\n",
526   - seq, ack, sack, win, end);
  546 + pr_debug("seq=%u ack=%u+(%d) sack=%u+(%d) win=%u end=%u\n",
  547 + seq, ack, receiver_offset, sack, receiver_offset, win, end);
527 548 pr_debug("tcp_in_window: sender end=%u maxend=%u maxwin=%u scale=%i "
528 549 "receiver end=%u maxend=%u maxwin=%u scale=%i\n",
529 550 sender->td_end, sender->td_maxend, sender->td_maxwin,
... ... @@ -613,8 +634,8 @@
613 634  
614 635 pr_debug("tcp_in_window: ");
615 636 nf_ct_dump_tuple(tuple);
616   - pr_debug("seq=%u ack=%u sack =%u win=%u end=%u\n",
617   - seq, ack, sack, win, end);
  637 + pr_debug("seq=%u ack=%u+(%d) sack=%u+(%d) win=%u end=%u\n",
  638 + seq, ack, receiver_offset, sack, receiver_offset, win, end);
618 639 pr_debug("tcp_in_window: sender end=%u maxend=%u maxwin=%u scale=%i "
619 640 "receiver end=%u maxend=%u maxwin=%u scale=%i\n",
620 641 sender->td_end, sender->td_maxend, sender->td_maxwin,
... ... @@ -700,7 +721,7 @@
700 721 before(seq, sender->td_maxend + 1) ?
701 722 after(end, sender->td_end - receiver->td_maxwin - 1) ?
702 723 before(sack, receiver->td_end + 1) ?
703   - after(ack, receiver->td_end - MAXACKWINDOW(sender)) ? "BUG"
  724 + after(sack, receiver->td_end - MAXACKWINDOW(sender) - 1) ? "BUG"
704 725 : "ACK is under the lower bound (possible overly delayed ACK)"
705 726 : "ACK is over the upper bound (ACKed data not seen yet)"
706 727 : "SEQ is under the lower bound (already ACKed data retransmitted)"
... ... @@ -714,39 +735,6 @@
714 735  
715 736 return res;
716 737 }
717   -
718   -#ifdef CONFIG_NF_NAT_NEEDED
719   -/* Update sender->td_end after NAT successfully mangled the packet */
720   -/* Caller must linearize skb at tcp header. */
721   -void nf_conntrack_tcp_update(const struct sk_buff *skb,
722   - unsigned int dataoff,
723   - struct nf_conn *ct, int dir,
724   - s16 offset)
725   -{
726   - const struct tcphdr *tcph = (const void *)skb->data + dataoff;
727   - const struct ip_ct_tcp_state *sender = &ct->proto.tcp.seen[dir];
728   - const struct ip_ct_tcp_state *receiver = &ct->proto.tcp.seen[!dir];
729   - __u32 end;
730   -
731   - end = segment_seq_plus_len(ntohl(tcph->seq), skb->len, dataoff, tcph);
732   -
733   - spin_lock_bh(&ct->lock);
734   - /*
735   - * We have to worry for the ack in the reply packet only...
736   - */
737   - if (ct->proto.tcp.seen[dir].td_end + offset == end)
738   - ct->proto.tcp.seen[dir].td_end = end;
739   - ct->proto.tcp.last_end = end;
740   - spin_unlock_bh(&ct->lock);
741   - pr_debug("tcp_update: sender end=%u maxend=%u maxwin=%u scale=%i "
742   - "receiver end=%u maxend=%u maxwin=%u scale=%i\n",
743   - sender->td_end, sender->td_maxend, sender->td_maxwin,
744   - sender->td_scale,
745   - receiver->td_end, receiver->td_maxend, receiver->td_maxwin,
746   - receiver->td_scale);
747   -}
748   -EXPORT_SYMBOL_GPL(nf_conntrack_tcp_update);
749   -#endif
750 738  
751 739 #define TH_FIN 0x01
752 740 #define TH_SYN 0x02
net/rose/rose_route.c
... ... @@ -578,18 +578,18 @@
578 578  
579 579 /*
580 580 * Check that the device given is a valid AX.25 interface that is "up".
  581 + * called whith RTNL
581 582 */
582   -static struct net_device *rose_ax25_dev_get(char *devname)
  583 +static struct net_device *rose_ax25_dev_find(char *devname)
583 584 {
584 585 struct net_device *dev;
585 586  
586   - if ((dev = dev_get_by_name(&init_net, devname)) == NULL)
  587 + if ((dev = __dev_get_by_name(&init_net, devname)) == NULL)
587 588 return NULL;
588 589  
589 590 if ((dev->flags & IFF_UP) && dev->type == ARPHRD_AX25)
590 591 return dev;
591 592  
592   - dev_put(dev);
593 593 return NULL;
594 594 }
595 595  
596 596  
597 597  
598 598  
599 599  
600 600  
... ... @@ -720,27 +720,23 @@
720 720 case SIOCADDRT:
721 721 if (copy_from_user(&rose_route, arg, sizeof(struct rose_route_struct)))
722 722 return -EFAULT;
723   - if ((dev = rose_ax25_dev_get(rose_route.device)) == NULL)
  723 + if ((dev = rose_ax25_dev_find(rose_route.device)) == NULL)
724 724 return -EINVAL;
725   - if (rose_dev_exists(&rose_route.address)) { /* Can't add routes to ourself */
726   - dev_put(dev);
  725 + if (rose_dev_exists(&rose_route.address)) /* Can't add routes to ourself */
727 726 return -EINVAL;
728   - }
729 727 if (rose_route.mask > 10) /* Mask can't be more than 10 digits */
730 728 return -EINVAL;
731 729 if (rose_route.ndigis > AX25_MAX_DIGIS)
732 730 return -EINVAL;
733 731 err = rose_add_node(&rose_route, dev);
734   - dev_put(dev);
735 732 return err;
736 733  
737 734 case SIOCDELRT:
738 735 if (copy_from_user(&rose_route, arg, sizeof(struct rose_route_struct)))
739 736 return -EFAULT;
740   - if ((dev = rose_ax25_dev_get(rose_route.device)) == NULL)
  737 + if ((dev = rose_ax25_dev_find(rose_route.device)) == NULL)
741 738 return -EINVAL;
742 739 err = rose_del_node(&rose_route, dev);
743   - dev_put(dev);
744 740 return err;
745 741  
746 742 case SIOCRSCLRRT:
net/sunrpc/svcsock.c
... ... @@ -111,7 +111,7 @@
111 111 rqstp->rq_xprt_ctxt = NULL;
112 112  
113 113 dprintk("svc: service %p, releasing skb %p\n", rqstp, skb);
114   - skb_free_datagram(svsk->sk_sk, skb);
  114 + skb_free_datagram_locked(svsk->sk_sk, skb);
115 115 }
116 116 }
117 117  
... ... @@ -578,7 +578,7 @@
578 578 "svc: received unknown control message %d/%d; "
579 579 "dropping RPC reply datagram\n",
580 580 cmh->cmsg_level, cmh->cmsg_type);
581   - skb_free_datagram(svsk->sk_sk, skb);
  581 + skb_free_datagram_locked(svsk->sk_sk, skb);
582 582 return 0;
583 583 }
584 584  
585 585  
586 586  
... ... @@ -588,18 +588,18 @@
588 588 if (csum_partial_copy_to_xdr(&rqstp->rq_arg, skb)) {
589 589 local_bh_enable();
590 590 /* checksum error */
591   - skb_free_datagram(svsk->sk_sk, skb);
  591 + skb_free_datagram_locked(svsk->sk_sk, skb);
592 592 return 0;
593 593 }
594 594 local_bh_enable();
595   - skb_free_datagram(svsk->sk_sk, skb);
  595 + skb_free_datagram_locked(svsk->sk_sk, skb);
596 596 } else {
597 597 /* we can use it in-place */
598 598 rqstp->rq_arg.head[0].iov_base = skb->data +
599 599 sizeof(struct udphdr);
600 600 rqstp->rq_arg.head[0].iov_len = len;
601 601 if (skb_checksum_complete(skb)) {
602   - skb_free_datagram(svsk->sk_sk, skb);
  602 + skb_free_datagram_locked(svsk->sk_sk, skb);
603 603 return 0;
604 604 }
605 605 rqstp->rq_xprt_ctxt = skb;
... ... @@ -165,7 +165,7 @@
165 165 struct cfg80211_registered_device *rdev =
166 166 container_of(work, struct cfg80211_registered_device, conn_work);
167 167 struct wireless_dev *wdev;
168   - u8 bssid[ETH_ALEN];
  168 + u8 bssid_buf[ETH_ALEN], *bssid = NULL;
169 169  
170 170 rtnl_lock();
171 171 cfg80211_lock_rdev(rdev);
... ... @@ -181,7 +181,10 @@
181 181 wdev_unlock(wdev);
182 182 continue;
183 183 }
184   - memcpy(bssid, wdev->conn->params.bssid, ETH_ALEN);
  184 + if (wdev->conn->params.bssid) {
  185 + memcpy(bssid_buf, wdev->conn->params.bssid, ETH_ALEN);
  186 + bssid = bssid_buf;
  187 + }
185 188 if (cfg80211_conn_do_work(wdev))
186 189 __cfg80211_connect_result(
187 190 wdev->netdev, bssid,