aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/include/asm/cpm2.h5
-rw-r--r--drivers/net/Kconfig6
-rw-r--r--drivers/net/atl1e/atl1e_main.c3
-rw-r--r--drivers/net/atlx/atl1.c1
-rw-r--r--drivers/net/bnx2x.h2
-rw-r--r--drivers/net/bnx2x_main.c220
-rw-r--r--drivers/net/e100.c4
-rw-r--r--drivers/net/forcedeth.c4
-rw-r--r--drivers/net/fs_enet/fs_enet-main.c8
-rw-r--r--drivers/net/fs_enet/mac-scc.c8
-rw-r--r--drivers/net/gianfar.c22
-rw-r--r--drivers/net/gianfar.h1
-rw-r--r--drivers/net/ibm_newemac/core.c6
-rw-r--r--drivers/net/ibmveth.c5
-rw-r--r--drivers/net/igb/e1000_82575.c1
-rw-r--r--drivers/net/igb/e1000_hw.h1
-rw-r--r--drivers/net/igb/igb_ethtool.c17
-rw-r--r--drivers/net/igb/igb_main.c25
-rw-r--r--drivers/net/ixgbe/ixgbe_main.c8
-rw-r--r--drivers/net/mv643xx_eth.c35
-rw-r--r--drivers/net/myri10ge/myri10ge.c2
-rw-r--r--drivers/net/r8169.c2
-rw-r--r--drivers/net/skfp/ess.c6
-rw-r--r--drivers/net/smc91x.c2
-rw-r--r--drivers/net/usb/hso.c3
-rw-r--r--drivers/net/usb/mcs7830.c47
-rw-r--r--drivers/net/wan/sbni.c8
-rw-r--r--drivers/net/wd.c2
-rw-r--r--drivers/net/wireless/ath5k/base.c23
-rw-r--r--drivers/net/wireless/ath5k/base.h1
-rw-r--r--drivers/net/wireless/atmel.c51
-rw-r--r--drivers/s390/net/claw.c79
-rw-r--r--drivers/s390/net/ctcm_fsms.c56
-rw-r--r--drivers/s390/net/ctcm_main.c24
-rw-r--r--drivers/s390/net/ctcm_main.h9
-rw-r--r--drivers/s390/net/ctcm_mpc.c46
-rw-r--r--drivers/s390/net/lcs.c3
-rw-r--r--drivers/s390/net/qeth_core.h1
-rw-r--r--drivers/s390/net/qeth_core_main.c2
-rw-r--r--drivers/s390/net/qeth_l2_main.c27
-rw-r--r--drivers/s390/net/qeth_l3_sys.c2
-rw-r--r--include/linux/Kbuild1
-rw-r--r--include/linux/mroute.h2
-rw-r--r--include/linux/mroute6.h1
-rw-r--r--include/linux/pim.h18
-rw-r--r--include/net/pkt_sched.h1
-rw-r--r--include/net/sch_generic.h12
-rw-r--r--net/ipv4/icmp.c22
-rw-r--r--net/ipv4/route.c24
-rw-r--r--net/ipv4/tcp_output.c6
-rw-r--r--net/ipv6/addrconf.c1
-rw-r--r--net/ipv6/icmp.c23
-rw-r--r--net/ipv6/raw.c6
-rw-r--r--net/ipv6/sysctl_net_ipv6.c2
-rw-r--r--net/mac80211/debugfs_netdev.c24
-rw-r--r--net/mac80211/ieee80211_i.h6
-rw-r--r--net/mac80211/mesh.c2
-rw-r--r--net/mac80211/mlme.c52
-rw-r--r--net/sched/cls_api.c2
-rw-r--r--net/sched/cls_route.c2
-rw-r--r--net/sched/sch_api.c70
-rw-r--r--net/sched/sch_cbq.c6
-rw-r--r--net/sched/sch_generic.c9
-rw-r--r--net/sched/sch_hfsc.c4
-rw-r--r--net/sched/sch_htb.c8
-rw-r--r--net/sched/sch_netem.c2
-rw-r--r--net/sched/sch_teql.c2
-rw-r--r--net/sctp/auth.c7
-rw-r--r--net/sctp/socket.c11
69 files changed, 638 insertions, 466 deletions
diff --git a/arch/powerpc/include/asm/cpm2.h b/arch/powerpc/include/asm/cpm2.h
index 2a6fa0183ac9..0f5e8ff59a85 100644
--- a/arch/powerpc/include/asm/cpm2.h
+++ b/arch/powerpc/include/asm/cpm2.h
@@ -337,6 +337,11 @@ typedef struct scc_param {
337 uint scc_tcrc; /* Internal */ 337 uint scc_tcrc; /* Internal */
338} sccp_t; 338} sccp_t;
339 339
340/* Function code bits.
341*/
342#define SCC_EB ((u_char) 0x10) /* Set big endian byte order */
343#define SCC_GBL ((u_char) 0x20) /* Snooping enabled */
344
340/* CPM Ethernet through SCC1. 345/* CPM Ethernet through SCC1.
341 */ 346 */
342typedef struct scc_enet { 347typedef struct scc_enet {
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
index a5c141cecd4e..4a11296a9514 100644
--- a/drivers/net/Kconfig
+++ b/drivers/net/Kconfig
@@ -822,14 +822,14 @@ config ULTRA32
822 will be called smc-ultra32. 822 will be called smc-ultra32.
823 823
824config BFIN_MAC 824config BFIN_MAC
825 tristate "Blackfin 527/536/537 on-chip mac support" 825 tristate "Blackfin on-chip MAC support"
826 depends on NET_ETHERNET && (BF527 || BF537 || BF536) 826 depends on NET_ETHERNET && (BF526 || BF527 || BF536 || BF537)
827 select CRC32 827 select CRC32
828 select MII 828 select MII
829 select PHYLIB 829 select PHYLIB
830 select BFIN_MAC_USE_L1 if DMA_UNCACHED_NONE 830 select BFIN_MAC_USE_L1 if DMA_UNCACHED_NONE
831 help 831 help
832 This is the driver for blackfin on-chip mac device. Say Y if you want it 832 This is the driver for Blackfin on-chip mac device. Say Y if you want it
833 compiled into the kernel. This driver is also available as a module 833 compiled into the kernel. This driver is also available as a module
834 ( = code which can be inserted in and removed from the running kernel 834 ( = code which can be inserted in and removed from the running kernel
835 whenever you want). The module will be called bfin_mac. 835 whenever you want). The module will be called bfin_mac.
diff --git a/drivers/net/atl1e/atl1e_main.c b/drivers/net/atl1e/atl1e_main.c
index 82d7be1655d3..7685b995ff9b 100644
--- a/drivers/net/atl1e/atl1e_main.c
+++ b/drivers/net/atl1e/atl1e_main.c
@@ -2232,10 +2232,11 @@ static int atl1e_resume(struct pci_dev *pdev)
2232 2232
2233 AT_WRITE_REG(&adapter->hw, REG_WOL_CTRL, 0); 2233 AT_WRITE_REG(&adapter->hw, REG_WOL_CTRL, 0);
2234 2234
2235 if (netif_running(netdev)) 2235 if (netif_running(netdev)) {
2236 err = atl1e_request_irq(adapter); 2236 err = atl1e_request_irq(adapter);
2237 if (err) 2237 if (err)
2238 return err; 2238 return err;
2239 }
2239 2240
2240 atl1e_reset_hw(&adapter->hw); 2241 atl1e_reset_hw(&adapter->hw);
2241 2242
diff --git a/drivers/net/atlx/atl1.c b/drivers/net/atlx/atl1.c
index e6a7bb79d4df..e23ce77712f1 100644
--- a/drivers/net/atlx/atl1.c
+++ b/drivers/net/atlx/atl1.c
@@ -3022,7 +3022,6 @@ static int __devinit atl1_probe(struct pci_dev *pdev,
3022 netdev->features = NETIF_F_HW_CSUM; 3022 netdev->features = NETIF_F_HW_CSUM;
3023 netdev->features |= NETIF_F_SG; 3023 netdev->features |= NETIF_F_SG;
3024 netdev->features |= (NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX); 3024 netdev->features |= (NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX);
3025 netdev->features |= NETIF_F_TSO;
3026 netdev->features |= NETIF_F_LLTX; 3025 netdev->features |= NETIF_F_LLTX;
3027 3026
3028 /* 3027 /*
diff --git a/drivers/net/bnx2x.h b/drivers/net/bnx2x.h
index b468f904c7f8..a14dba1afcc5 100644
--- a/drivers/net/bnx2x.h
+++ b/drivers/net/bnx2x.h
@@ -271,7 +271,7 @@ struct bnx2x_fastpath {
271 (fp->tx_pkt_prod != fp->tx_pkt_cons)) 271 (fp->tx_pkt_prod != fp->tx_pkt_cons))
272 272
273#define BNX2X_HAS_RX_WORK(fp) \ 273#define BNX2X_HAS_RX_WORK(fp) \
274 (fp->rx_comp_cons != le16_to_cpu(*fp->rx_cons_sb)) 274 (fp->rx_comp_cons != rx_cons_sb)
275 275
276#define BNX2X_HAS_WORK(fp) (BNX2X_HAS_RX_WORK(fp) || BNX2X_HAS_TX_WORK(fp)) 276#define BNX2X_HAS_WORK(fp) (BNX2X_HAS_RX_WORK(fp) || BNX2X_HAS_TX_WORK(fp))
277 277
diff --git a/drivers/net/bnx2x_main.c b/drivers/net/bnx2x_main.c
index 971576b43687..82deea0a63f5 100644
--- a/drivers/net/bnx2x_main.c
+++ b/drivers/net/bnx2x_main.c
@@ -59,8 +59,8 @@
59#include "bnx2x.h" 59#include "bnx2x.h"
60#include "bnx2x_init.h" 60#include "bnx2x_init.h"
61 61
62#define DRV_MODULE_VERSION "1.45.17" 62#define DRV_MODULE_VERSION "1.45.20"
63#define DRV_MODULE_RELDATE "2008/08/13" 63#define DRV_MODULE_RELDATE "2008/08/25"
64#define BNX2X_BC_VER 0x040200 64#define BNX2X_BC_VER 0x040200
65 65
66/* Time in jiffies before concluding the transmitter is hung */ 66/* Time in jiffies before concluding the transmitter is hung */
@@ -1717,8 +1717,8 @@ static int bnx2x_acquire_hw_lock(struct bnx2x *bp, u32 resource)
1717 return -EEXIST; 1717 return -EEXIST;
1718 } 1718 }
1719 1719
1720 /* Try for 1 second every 5ms */ 1720 /* Try for 5 second every 5ms */
1721 for (cnt = 0; cnt < 200; cnt++) { 1721 for (cnt = 0; cnt < 1000; cnt++) {
1722 /* Try to acquire the lock */ 1722 /* Try to acquire the lock */
1723 REG_WR(bp, hw_lock_control_reg + 4, resource_bit); 1723 REG_WR(bp, hw_lock_control_reg + 4, resource_bit);
1724 lock_status = REG_RD(bp, hw_lock_control_reg); 1724 lock_status = REG_RD(bp, hw_lock_control_reg);
@@ -2550,6 +2550,7 @@ static inline void bnx2x_attn_int_deasserted0(struct bnx2x *bp, u32 attn)
2550 BNX2X_ERR("SPIO5 hw attention\n"); 2550 BNX2X_ERR("SPIO5 hw attention\n");
2551 2551
2552 switch (bp->common.board & SHARED_HW_CFG_BOARD_TYPE_MASK) { 2552 switch (bp->common.board & SHARED_HW_CFG_BOARD_TYPE_MASK) {
2553 case SHARED_HW_CFG_BOARD_TYPE_BCM957710A1021G:
2553 case SHARED_HW_CFG_BOARD_TYPE_BCM957710A1022G: 2554 case SHARED_HW_CFG_BOARD_TYPE_BCM957710A1022G:
2554 /* Fan failure attention */ 2555 /* Fan failure attention */
2555 2556
@@ -4605,6 +4606,17 @@ static void bnx2x_init_internal_common(struct bnx2x *bp)
4605{ 4606{
4606 int i; 4607 int i;
4607 4608
4609 if (bp->flags & TPA_ENABLE_FLAG) {
4610 struct tstorm_eth_tpa_exist tpa = {0};
4611
4612 tpa.tpa_exist = 1;
4613
4614 REG_WR(bp, BAR_TSTRORM_INTMEM + TSTORM_TPA_EXIST_OFFSET,
4615 ((u32 *)&tpa)[0]);
4616 REG_WR(bp, BAR_TSTRORM_INTMEM + TSTORM_TPA_EXIST_OFFSET + 4,
4617 ((u32 *)&tpa)[1]);
4618 }
4619
4608 /* Zero this manually as its initialization is 4620 /* Zero this manually as its initialization is
4609 currently missing in the initTool */ 4621 currently missing in the initTool */
4610 for (i = 0; i < (USTORM_AGG_DATA_SIZE >> 2); i++) 4622 for (i = 0; i < (USTORM_AGG_DATA_SIZE >> 2); i++)
@@ -5337,6 +5349,7 @@ static int bnx2x_init_common(struct bnx2x *bp)
5337 } 5349 }
5338 5350
5339 switch (bp->common.board & SHARED_HW_CFG_BOARD_TYPE_MASK) { 5351 switch (bp->common.board & SHARED_HW_CFG_BOARD_TYPE_MASK) {
5352 case SHARED_HW_CFG_BOARD_TYPE_BCM957710A1021G:
5340 case SHARED_HW_CFG_BOARD_TYPE_BCM957710A1022G: 5353 case SHARED_HW_CFG_BOARD_TYPE_BCM957710A1022G:
5341 /* Fan failure is indicated by SPIO 5 */ 5354 /* Fan failure is indicated by SPIO 5 */
5342 bnx2x_set_spio(bp, MISC_REGISTERS_SPIO_5, 5355 bnx2x_set_spio(bp, MISC_REGISTERS_SPIO_5,
@@ -5363,17 +5376,6 @@ static int bnx2x_init_common(struct bnx2x *bp)
5363 5376
5364 enable_blocks_attention(bp); 5377 enable_blocks_attention(bp);
5365 5378
5366 if (bp->flags & TPA_ENABLE_FLAG) {
5367 struct tstorm_eth_tpa_exist tmp = {0};
5368
5369 tmp.tpa_exist = 1;
5370
5371 REG_WR(bp, BAR_TSTRORM_INTMEM + TSTORM_TPA_EXIST_OFFSET,
5372 ((u32 *)&tmp)[0]);
5373 REG_WR(bp, BAR_TSTRORM_INTMEM + TSTORM_TPA_EXIST_OFFSET + 4,
5374 ((u32 *)&tmp)[1]);
5375 }
5376
5377 if (!BP_NOMCP(bp)) { 5379 if (!BP_NOMCP(bp)) {
5378 bnx2x_acquire_phy_lock(bp); 5380 bnx2x_acquire_phy_lock(bp);
5379 bnx2x_common_init_phy(bp, bp->common.shmem_base); 5381 bnx2x_common_init_phy(bp, bp->common.shmem_base);
@@ -5531,6 +5533,7 @@ static int bnx2x_init_port(struct bnx2x *bp)
5531 /* Port DMAE comes here */ 5533 /* Port DMAE comes here */
5532 5534
5533 switch (bp->common.board & SHARED_HW_CFG_BOARD_TYPE_MASK) { 5535 switch (bp->common.board & SHARED_HW_CFG_BOARD_TYPE_MASK) {
5536 case SHARED_HW_CFG_BOARD_TYPE_BCM957710A1021G:
5534 case SHARED_HW_CFG_BOARD_TYPE_BCM957710A1022G: 5537 case SHARED_HW_CFG_BOARD_TYPE_BCM957710A1022G:
5535 /* add SPIO 5 to group 0 */ 5538 /* add SPIO 5 to group 0 */
5536 val = REG_RD(bp, MISC_REG_AEU_ENABLE1_FUNC_0_OUT_0); 5539 val = REG_RD(bp, MISC_REG_AEU_ENABLE1_FUNC_0_OUT_0);
@@ -6055,6 +6058,44 @@ static int bnx2x_req_irq(struct bnx2x *bp)
6055 return rc; 6058 return rc;
6056} 6059}
6057 6060
6061static void bnx2x_napi_enable(struct bnx2x *bp)
6062{
6063 int i;
6064
6065 for_each_queue(bp, i)
6066 napi_enable(&bnx2x_fp(bp, i, napi));
6067}
6068
6069static void bnx2x_napi_disable(struct bnx2x *bp)
6070{
6071 int i;
6072
6073 for_each_queue(bp, i)
6074 napi_disable(&bnx2x_fp(bp, i, napi));
6075}
6076
6077static void bnx2x_netif_start(struct bnx2x *bp)
6078{
6079 if (atomic_dec_and_test(&bp->intr_sem)) {
6080 if (netif_running(bp->dev)) {
6081 if (bp->state == BNX2X_STATE_OPEN)
6082 netif_wake_queue(bp->dev);
6083 bnx2x_napi_enable(bp);
6084 bnx2x_int_enable(bp);
6085 }
6086 }
6087}
6088
6089static void bnx2x_netif_stop(struct bnx2x *bp)
6090{
6091 bnx2x_int_disable_sync(bp);
6092 if (netif_running(bp->dev)) {
6093 bnx2x_napi_disable(bp);
6094 netif_tx_disable(bp->dev);
6095 bp->dev->trans_start = jiffies; /* prevent tx timeout */
6096 }
6097}
6098
6058/* 6099/*
6059 * Init service functions 6100 * Init service functions
6060 */ 6101 */
@@ -6338,7 +6379,7 @@ static int bnx2x_nic_load(struct bnx2x *bp, int load_mode)
6338 rc = bnx2x_init_hw(bp, load_code); 6379 rc = bnx2x_init_hw(bp, load_code);
6339 if (rc) { 6380 if (rc) {
6340 BNX2X_ERR("HW init failed, aborting\n"); 6381 BNX2X_ERR("HW init failed, aborting\n");
6341 goto load_error; 6382 goto load_int_disable;
6342 } 6383 }
6343 6384
6344 /* Setup NIC internals and enable interrupts */ 6385 /* Setup NIC internals and enable interrupts */
@@ -6350,7 +6391,7 @@ static int bnx2x_nic_load(struct bnx2x *bp, int load_mode)
6350 if (!load_code) { 6391 if (!load_code) {
6351 BNX2X_ERR("MCP response failure, aborting\n"); 6392 BNX2X_ERR("MCP response failure, aborting\n");
6352 rc = -EBUSY; 6393 rc = -EBUSY;
6353 goto load_int_disable; 6394 goto load_rings_free;
6354 } 6395 }
6355 } 6396 }
6356 6397
@@ -6360,8 +6401,7 @@ static int bnx2x_nic_load(struct bnx2x *bp, int load_mode)
6360 6401
6361 /* Enable Rx interrupt handling before sending the ramrod 6402 /* Enable Rx interrupt handling before sending the ramrod
6362 as it's completed on Rx FP queue */ 6403 as it's completed on Rx FP queue */
6363 for_each_queue(bp, i) 6404 bnx2x_napi_enable(bp);
6364 napi_enable(&bnx2x_fp(bp, i, napi));
6365 6405
6366 /* Enable interrupt handling */ 6406 /* Enable interrupt handling */
6367 atomic_set(&bp->intr_sem, 0); 6407 atomic_set(&bp->intr_sem, 0);
@@ -6369,7 +6409,7 @@ static int bnx2x_nic_load(struct bnx2x *bp, int load_mode)
6369 rc = bnx2x_setup_leading(bp); 6409 rc = bnx2x_setup_leading(bp);
6370 if (rc) { 6410 if (rc) {
6371 BNX2X_ERR("Setup leading failed!\n"); 6411 BNX2X_ERR("Setup leading failed!\n");
6372 goto load_stop_netif; 6412 goto load_netif_stop;
6373 } 6413 }
6374 6414
6375 if (CHIP_IS_E1H(bp)) 6415 if (CHIP_IS_E1H(bp))
@@ -6382,7 +6422,7 @@ static int bnx2x_nic_load(struct bnx2x *bp, int load_mode)
6382 for_each_nondefault_queue(bp, i) { 6422 for_each_nondefault_queue(bp, i) {
6383 rc = bnx2x_setup_multi(bp, i); 6423 rc = bnx2x_setup_multi(bp, i);
6384 if (rc) 6424 if (rc)
6385 goto load_stop_netif; 6425 goto load_netif_stop;
6386 } 6426 }
6387 6427
6388 if (CHIP_IS_E1(bp)) 6428 if (CHIP_IS_E1(bp))
@@ -6427,20 +6467,17 @@ static int bnx2x_nic_load(struct bnx2x *bp, int load_mode)
6427 6467
6428 return 0; 6468 return 0;
6429 6469
6430load_stop_netif: 6470load_netif_stop:
6471 bnx2x_napi_disable(bp);
6472load_rings_free:
6473 /* Free SKBs, SGEs, TPA pool and driver internals */
6474 bnx2x_free_skbs(bp);
6431 for_each_queue(bp, i) 6475 for_each_queue(bp, i)
6432 napi_disable(&bnx2x_fp(bp, i, napi)); 6476 bnx2x_free_rx_sge_range(bp, bp->fp + i, NUM_RX_SGE);
6433
6434load_int_disable: 6477load_int_disable:
6435 bnx2x_int_disable_sync(bp); 6478 bnx2x_int_disable_sync(bp);
6436
6437 /* Release IRQs */ 6479 /* Release IRQs */
6438 bnx2x_free_irq(bp); 6480 bnx2x_free_irq(bp);
6439
6440 /* Free SKBs, SGEs, TPA pool and driver internals */
6441 bnx2x_free_skbs(bp);
6442 for_each_queue(bp, i)
6443 bnx2x_free_rx_sge_range(bp, bp->fp + i, NUM_RX_SGE);
6444load_error: 6481load_error:
6445 bnx2x_free_mem(bp); 6482 bnx2x_free_mem(bp);
6446 6483
@@ -6455,7 +6492,7 @@ static int bnx2x_stop_multi(struct bnx2x *bp, int index)
6455 6492
6456 /* halt the connection */ 6493 /* halt the connection */
6457 bp->fp[index].state = BNX2X_FP_STATE_HALTING; 6494 bp->fp[index].state = BNX2X_FP_STATE_HALTING;
6458 bnx2x_sp_post(bp, RAMROD_CMD_ID_ETH_HALT, index, 0, 0, 0); 6495 bnx2x_sp_post(bp, RAMROD_CMD_ID_ETH_HALT, index, 0, index, 0);
6459 6496
6460 /* Wait for completion */ 6497 /* Wait for completion */
6461 rc = bnx2x_wait_ramrod(bp, BNX2X_FP_STATE_HALTED, index, 6498 rc = bnx2x_wait_ramrod(bp, BNX2X_FP_STATE_HALTED, index,
@@ -6613,11 +6650,9 @@ static int bnx2x_nic_unload(struct bnx2x *bp, int unload_mode)
6613 bp->rx_mode = BNX2X_RX_MODE_NONE; 6650 bp->rx_mode = BNX2X_RX_MODE_NONE;
6614 bnx2x_set_storm_rx_mode(bp); 6651 bnx2x_set_storm_rx_mode(bp);
6615 6652
6616 if (netif_running(bp->dev)) { 6653 bnx2x_netif_stop(bp);
6617 netif_tx_disable(bp->dev); 6654 if (!netif_running(bp->dev))
6618 bp->dev->trans_start = jiffies; /* prevent tx timeout */ 6655 bnx2x_napi_disable(bp);
6619 }
6620
6621 del_timer_sync(&bp->timer); 6656 del_timer_sync(&bp->timer);
6622 SHMEM_WR(bp, func_mb[BP_FUNC(bp)].drv_pulse_mb, 6657 SHMEM_WR(bp, func_mb[BP_FUNC(bp)].drv_pulse_mb,
6623 (DRV_PULSE_ALWAYS_ALIVE | bp->fw_drv_pulse_wr_seq)); 6658 (DRV_PULSE_ALWAYS_ALIVE | bp->fw_drv_pulse_wr_seq));
@@ -6631,9 +6666,7 @@ static int bnx2x_nic_unload(struct bnx2x *bp, int unload_mode)
6631 smp_rmb(); 6666 smp_rmb();
6632 while (BNX2X_HAS_TX_WORK(fp)) { 6667 while (BNX2X_HAS_TX_WORK(fp)) {
6633 6668
6634 if (!netif_running(bp->dev)) 6669 bnx2x_tx_int(fp, 1000);
6635 bnx2x_tx_int(fp, 1000);
6636
6637 if (!cnt) { 6670 if (!cnt) {
6638 BNX2X_ERR("timeout waiting for queue[%d]\n", 6671 BNX2X_ERR("timeout waiting for queue[%d]\n",
6639 i); 6672 i);
@@ -6649,46 +6682,12 @@ static int bnx2x_nic_unload(struct bnx2x *bp, int unload_mode)
6649 smp_rmb(); 6682 smp_rmb();
6650 } 6683 }
6651 } 6684 }
6652
6653 /* Give HW time to discard old tx messages */ 6685 /* Give HW time to discard old tx messages */
6654 msleep(1); 6686 msleep(1);
6655 6687
6656 for_each_queue(bp, i)
6657 napi_disable(&bnx2x_fp(bp, i, napi));
6658 /* Disable interrupts after Tx and Rx are disabled on stack level */
6659 bnx2x_int_disable_sync(bp);
6660
6661 /* Release IRQs */ 6688 /* Release IRQs */
6662 bnx2x_free_irq(bp); 6689 bnx2x_free_irq(bp);
6663 6690
6664 if (unload_mode == UNLOAD_NORMAL)
6665 reset_code = DRV_MSG_CODE_UNLOAD_REQ_WOL_DIS;
6666
6667 else if (bp->flags & NO_WOL_FLAG) {
6668 reset_code = DRV_MSG_CODE_UNLOAD_REQ_WOL_MCP;
6669 if (CHIP_IS_E1H(bp))
6670 REG_WR(bp, MISC_REG_E1HMF_MODE, 0);
6671
6672 } else if (bp->wol) {
6673 u32 emac_base = port ? GRCBASE_EMAC1 : GRCBASE_EMAC0;
6674 u8 *mac_addr = bp->dev->dev_addr;
6675 u32 val;
6676 /* The mac address is written to entries 1-4 to
6677 preserve entry 0 which is used by the PMF */
6678 u8 entry = (BP_E1HVN(bp) + 1)*8;
6679
6680 val = (mac_addr[0] << 8) | mac_addr[1];
6681 EMAC_WR(bp, EMAC_REG_EMAC_MAC_MATCH + entry, val);
6682
6683 val = (mac_addr[2] << 24) | (mac_addr[3] << 16) |
6684 (mac_addr[4] << 8) | mac_addr[5];
6685 EMAC_WR(bp, EMAC_REG_EMAC_MAC_MATCH + entry + 4, val);
6686
6687 reset_code = DRV_MSG_CODE_UNLOAD_REQ_WOL_EN;
6688
6689 } else
6690 reset_code = DRV_MSG_CODE_UNLOAD_REQ_WOL_DIS;
6691
6692 if (CHIP_IS_E1(bp)) { 6691 if (CHIP_IS_E1(bp)) {
6693 struct mac_configuration_cmd *config = 6692 struct mac_configuration_cmd *config =
6694 bnx2x_sp(bp, mcast_config); 6693 bnx2x_sp(bp, mcast_config);
@@ -6711,14 +6710,41 @@ static int bnx2x_nic_unload(struct bnx2x *bp, int unload_mode)
6711 U64_LO(bnx2x_sp_mapping(bp, mcast_config)), 0); 6710 U64_LO(bnx2x_sp_mapping(bp, mcast_config)), 0);
6712 6711
6713 } else { /* E1H */ 6712 } else { /* E1H */
6713 REG_WR(bp, NIG_REG_LLH0_FUNC_EN + port*8, 0);
6714
6714 bnx2x_set_mac_addr_e1h(bp, 0); 6715 bnx2x_set_mac_addr_e1h(bp, 0);
6715 6716
6716 for (i = 0; i < MC_HASH_SIZE; i++) 6717 for (i = 0; i < MC_HASH_SIZE; i++)
6717 REG_WR(bp, MC_HASH_OFFSET(bp, i), 0); 6718 REG_WR(bp, MC_HASH_OFFSET(bp, i), 0);
6718 } 6719 }
6719 6720
6720 if (CHIP_IS_E1H(bp)) 6721 if (unload_mode == UNLOAD_NORMAL)
6721 REG_WR(bp, NIG_REG_LLH0_FUNC_EN + port*8, 0); 6722 reset_code = DRV_MSG_CODE_UNLOAD_REQ_WOL_DIS;
6723
6724 else if (bp->flags & NO_WOL_FLAG) {
6725 reset_code = DRV_MSG_CODE_UNLOAD_REQ_WOL_MCP;
6726 if (CHIP_IS_E1H(bp))
6727 REG_WR(bp, MISC_REG_E1HMF_MODE, 0);
6728
6729 } else if (bp->wol) {
6730 u32 emac_base = port ? GRCBASE_EMAC1 : GRCBASE_EMAC0;
6731 u8 *mac_addr = bp->dev->dev_addr;
6732 u32 val;
6733 /* The mac address is written to entries 1-4 to
6734 preserve entry 0 which is used by the PMF */
6735 u8 entry = (BP_E1HVN(bp) + 1)*8;
6736
6737 val = (mac_addr[0] << 8) | mac_addr[1];
6738 EMAC_WR(bp, EMAC_REG_EMAC_MAC_MATCH + entry, val);
6739
6740 val = (mac_addr[2] << 24) | (mac_addr[3] << 16) |
6741 (mac_addr[4] << 8) | mac_addr[5];
6742 EMAC_WR(bp, EMAC_REG_EMAC_MAC_MATCH + entry + 4, val);
6743
6744 reset_code = DRV_MSG_CODE_UNLOAD_REQ_WOL_EN;
6745
6746 } else
6747 reset_code = DRV_MSG_CODE_UNLOAD_REQ_WOL_DIS;
6722 6748
6723 /* Close multi and leading connections 6749 /* Close multi and leading connections
6724 Completions for ramrods are collected in a synchronous way */ 6750 Completions for ramrods are collected in a synchronous way */
@@ -6821,6 +6847,10 @@ static void __devinit bnx2x_undi_unload(struct bnx2x *bp)
6821 */ 6847 */
6822 bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_UNDI); 6848 bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_UNDI);
6823 val = REG_RD(bp, DORQ_REG_NORM_CID_OFST); 6849 val = REG_RD(bp, DORQ_REG_NORM_CID_OFST);
6850 if (val == 0x7)
6851 REG_WR(bp, DORQ_REG_NORM_CID_OFST, 0);
6852 bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_UNDI);
6853
6824 if (val == 0x7) { 6854 if (val == 0x7) {
6825 u32 reset_code = DRV_MSG_CODE_UNLOAD_REQ_WOL_DIS; 6855 u32 reset_code = DRV_MSG_CODE_UNLOAD_REQ_WOL_DIS;
6826 /* save our func */ 6856 /* save our func */
@@ -6898,7 +6928,6 @@ static void __devinit bnx2x_undi_unload(struct bnx2x *bp)
6898 (SHMEM_RD(bp, func_mb[bp->func].drv_mb_header) & 6928 (SHMEM_RD(bp, func_mb[bp->func].drv_mb_header) &
6899 DRV_MSG_SEQ_NUMBER_MASK); 6929 DRV_MSG_SEQ_NUMBER_MASK);
6900 } 6930 }
6901 bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_UNDI);
6902 } 6931 }
6903} 6932}
6904 6933
@@ -8617,34 +8646,6 @@ test_mem_exit:
8617 return rc; 8646 return rc;
8618} 8647}
8619 8648
8620static void bnx2x_netif_start(struct bnx2x *bp)
8621{
8622 int i;
8623
8624 if (atomic_dec_and_test(&bp->intr_sem)) {
8625 if (netif_running(bp->dev)) {
8626 bnx2x_int_enable(bp);
8627 for_each_queue(bp, i)
8628 napi_enable(&bnx2x_fp(bp, i, napi));
8629 if (bp->state == BNX2X_STATE_OPEN)
8630 netif_wake_queue(bp->dev);
8631 }
8632 }
8633}
8634
8635static void bnx2x_netif_stop(struct bnx2x *bp)
8636{
8637 int i;
8638
8639 if (netif_running(bp->dev)) {
8640 netif_tx_disable(bp->dev);
8641 bp->dev->trans_start = jiffies; /* prevent tx timeout */
8642 for_each_queue(bp, i)
8643 napi_disable(&bnx2x_fp(bp, i, napi));
8644 }
8645 bnx2x_int_disable_sync(bp);
8646}
8647
8648static void bnx2x_wait_for_link(struct bnx2x *bp, u8 link_up) 8649static void bnx2x_wait_for_link(struct bnx2x *bp, u8 link_up)
8649{ 8650{
8650 int cnt = 1000; 8651 int cnt = 1000;
@@ -9250,6 +9251,7 @@ static int bnx2x_poll(struct napi_struct *napi, int budget)
9250 napi); 9251 napi);
9251 struct bnx2x *bp = fp->bp; 9252 struct bnx2x *bp = fp->bp;
9252 int work_done = 0; 9253 int work_done = 0;
9254 u16 rx_cons_sb;
9253 9255
9254#ifdef BNX2X_STOP_ON_ERROR 9256#ifdef BNX2X_STOP_ON_ERROR
9255 if (unlikely(bp->panic)) 9257 if (unlikely(bp->panic))
@@ -9265,10 +9267,16 @@ static int bnx2x_poll(struct napi_struct *napi, int budget)
9265 if (BNX2X_HAS_TX_WORK(fp)) 9267 if (BNX2X_HAS_TX_WORK(fp))
9266 bnx2x_tx_int(fp, budget); 9268 bnx2x_tx_int(fp, budget);
9267 9269
9270 rx_cons_sb = le16_to_cpu(*fp->rx_cons_sb);
9271 if ((rx_cons_sb & MAX_RCQ_DESC_CNT) == MAX_RCQ_DESC_CNT)
9272 rx_cons_sb++;
9268 if (BNX2X_HAS_RX_WORK(fp)) 9273 if (BNX2X_HAS_RX_WORK(fp))
9269 work_done = bnx2x_rx_int(fp, budget); 9274 work_done = bnx2x_rx_int(fp, budget);
9270 9275
9271 rmb(); /* BNX2X_HAS_WORK() reads the status block */ 9276 rmb(); /* BNX2X_HAS_WORK() reads the status block */
9277 rx_cons_sb = le16_to_cpu(*fp->rx_cons_sb);
9278 if ((rx_cons_sb & MAX_RCQ_DESC_CNT) == MAX_RCQ_DESC_CNT)
9279 rx_cons_sb++;
9272 9280
9273 /* must not complete if we consumed full budget */ 9281 /* must not complete if we consumed full budget */
9274 if ((work_done < budget) && !BNX2X_HAS_WORK(fp)) { 9282 if ((work_done < budget) && !BNX2X_HAS_WORK(fp)) {
@@ -9484,8 +9492,7 @@ static int bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev)
9484 fp_index = (smp_processor_id() % bp->num_queues); 9492 fp_index = (smp_processor_id() % bp->num_queues);
9485 fp = &bp->fp[fp_index]; 9493 fp = &bp->fp[fp_index];
9486 9494
9487 if (unlikely(bnx2x_tx_avail(bp->fp) < 9495 if (unlikely(bnx2x_tx_avail(fp) < (skb_shinfo(skb)->nr_frags + 3))) {
9488 (skb_shinfo(skb)->nr_frags + 3))) {
9489 bp->eth_stats.driver_xoff++, 9496 bp->eth_stats.driver_xoff++,
9490 netif_stop_queue(dev); 9497 netif_stop_queue(dev);
9491 BNX2X_ERR("BUG! Tx ring full when queue awake!\n"); 9498 BNX2X_ERR("BUG! Tx ring full when queue awake!\n");
@@ -9548,7 +9555,6 @@ static int bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev)
9548 tx_bd->vlan = cpu_to_le16(pkt_prod); 9555 tx_bd->vlan = cpu_to_le16(pkt_prod);
9549 9556
9550 if (xmit_type) { 9557 if (xmit_type) {
9551
9552 /* turn on parsing and get a BD */ 9558 /* turn on parsing and get a BD */
9553 bd_prod = TX_BD(NEXT_TX_IDX(bd_prod)); 9559 bd_prod = TX_BD(NEXT_TX_IDX(bd_prod));
9554 pbd = (void *)&fp->tx_desc_ring[bd_prod]; 9560 pbd = (void *)&fp->tx_desc_ring[bd_prod];
diff --git a/drivers/net/e100.c b/drivers/net/e100.c
index 19d32a227be1..453115acaad2 100644
--- a/drivers/net/e100.c
+++ b/drivers/net/e100.c
@@ -1838,7 +1838,7 @@ static int e100_rx_indicate(struct nic *nic, struct rx *rx,
1838 if ((le16_to_cpu(rfd->command) & cb_el) && 1838 if ((le16_to_cpu(rfd->command) & cb_el) &&
1839 (RU_RUNNING == nic->ru_running)) 1839 (RU_RUNNING == nic->ru_running))
1840 1840
1841 if (readb(&nic->csr->scb.status) & rus_no_res) 1841 if (ioread8(&nic->csr->scb.status) & rus_no_res)
1842 nic->ru_running = RU_SUSPENDED; 1842 nic->ru_running = RU_SUSPENDED;
1843 return -ENODATA; 1843 return -ENODATA;
1844 } 1844 }
@@ -1861,7 +1861,7 @@ static int e100_rx_indicate(struct nic *nic, struct rx *rx,
1861 if ((le16_to_cpu(rfd->command) & cb_el) && 1861 if ((le16_to_cpu(rfd->command) & cb_el) &&
1862 (RU_RUNNING == nic->ru_running)) { 1862 (RU_RUNNING == nic->ru_running)) {
1863 1863
1864 if (readb(&nic->csr->scb.status) & rus_no_res) 1864 if (ioread8(&nic->csr->scb.status) & rus_no_res)
1865 nic->ru_running = RU_SUSPENDED; 1865 nic->ru_running = RU_SUSPENDED;
1866 } 1866 }
1867 1867
diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c
index 053971e5fc94..331b86b01fa9 100644
--- a/drivers/net/forcedeth.c
+++ b/drivers/net/forcedeth.c
@@ -5522,7 +5522,7 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i
5522 if (id->driver_data & DEV_HAS_CHECKSUM) { 5522 if (id->driver_data & DEV_HAS_CHECKSUM) {
5523 np->rx_csum = 1; 5523 np->rx_csum = 1;
5524 np->txrxctl_bits |= NVREG_TXRXCTL_RXCHECK; 5524 np->txrxctl_bits |= NVREG_TXRXCTL_RXCHECK;
5525 dev->features |= NETIF_F_HW_CSUM | NETIF_F_SG; 5525 dev->features |= NETIF_F_IP_CSUM | NETIF_F_SG;
5526 dev->features |= NETIF_F_TSO; 5526 dev->features |= NETIF_F_TSO;
5527 } 5527 }
5528 5528
@@ -5835,7 +5835,7 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i
5835 5835
5836 dev_printk(KERN_INFO, &pci_dev->dev, "%s%s%s%s%s%s%s%s%s%sdesc-v%u\n", 5836 dev_printk(KERN_INFO, &pci_dev->dev, "%s%s%s%s%s%s%s%s%s%sdesc-v%u\n",
5837 dev->features & NETIF_F_HIGHDMA ? "highdma " : "", 5837 dev->features & NETIF_F_HIGHDMA ? "highdma " : "",
5838 dev->features & (NETIF_F_HW_CSUM | NETIF_F_SG) ? 5838 dev->features & (NETIF_F_IP_CSUM | NETIF_F_SG) ?
5839 "csum " : "", 5839 "csum " : "",
5840 dev->features & (NETIF_F_HW_VLAN_RX | NETIF_F_HW_VLAN_TX) ? 5840 dev->features & (NETIF_F_HW_VLAN_RX | NETIF_F_HW_VLAN_TX) ?
5841 "vlan " : "", 5841 "vlan " : "",
diff --git a/drivers/net/fs_enet/fs_enet-main.c b/drivers/net/fs_enet/fs_enet-main.c
index 9a51ec8293cc..9d461825bf4c 100644
--- a/drivers/net/fs_enet/fs_enet-main.c
+++ b/drivers/net/fs_enet/fs_enet-main.c
@@ -792,6 +792,10 @@ static int fs_enet_open(struct net_device *dev)
792 int r; 792 int r;
793 int err; 793 int err;
794 794
795 /* to initialize the fep->cur_rx,... */
796 /* not doing this, will cause a crash in fs_enet_rx_napi */
797 fs_init_bds(fep->ndev);
798
795 if (fep->fpi->use_napi) 799 if (fep->fpi->use_napi)
796 napi_enable(&fep->napi); 800 napi_enable(&fep->napi);
797 801
@@ -1167,6 +1171,10 @@ static struct of_device_id fs_enet_match[] = {
1167 .compatible = "fsl,cpm1-scc-enet", 1171 .compatible = "fsl,cpm1-scc-enet",
1168 .data = (void *)&fs_scc_ops, 1172 .data = (void *)&fs_scc_ops,
1169 }, 1173 },
1174 {
1175 .compatible = "fsl,cpm2-scc-enet",
1176 .data = (void *)&fs_scc_ops,
1177 },
1170#endif 1178#endif
1171#ifdef CONFIG_FS_ENET_HAS_FCC 1179#ifdef CONFIG_FS_ENET_HAS_FCC
1172 { 1180 {
diff --git a/drivers/net/fs_enet/mac-scc.c b/drivers/net/fs_enet/mac-scc.c
index 029b3c7ef29c..22f50dd8b277 100644
--- a/drivers/net/fs_enet/mac-scc.c
+++ b/drivers/net/fs_enet/mac-scc.c
@@ -47,7 +47,6 @@
47#include "fs_enet.h" 47#include "fs_enet.h"
48 48
49/*************************************************/ 49/*************************************************/
50
51#if defined(CONFIG_CPM1) 50#if defined(CONFIG_CPM1)
52/* for a 8xx __raw_xxx's are sufficient */ 51/* for a 8xx __raw_xxx's are sufficient */
53#define __fs_out32(addr, x) __raw_writel(x, addr) 52#define __fs_out32(addr, x) __raw_writel(x, addr)
@@ -62,6 +61,8 @@
62#define __fs_out16(addr, x) out_be16(addr, x) 61#define __fs_out16(addr, x) out_be16(addr, x)
63#define __fs_in32(addr) in_be32(addr) 62#define __fs_in32(addr) in_be32(addr)
64#define __fs_in16(addr) in_be16(addr) 63#define __fs_in16(addr) in_be16(addr)
64#define __fs_out8(addr, x) out_8(addr, x)
65#define __fs_in8(addr) in_8(addr)
65#endif 66#endif
66 67
67/* write, read, set bits, clear bits */ 68/* write, read, set bits, clear bits */
@@ -262,8 +263,13 @@ static void restart(struct net_device *dev)
262 263
263 /* Initialize function code registers for big-endian. 264 /* Initialize function code registers for big-endian.
264 */ 265 */
266#ifndef CONFIG_NOT_COHERENT_CACHE
267 W8(ep, sen_genscc.scc_rfcr, SCC_EB | SCC_GBL);
268 W8(ep, sen_genscc.scc_tfcr, SCC_EB | SCC_GBL);
269#else
265 W8(ep, sen_genscc.scc_rfcr, SCC_EB); 270 W8(ep, sen_genscc.scc_rfcr, SCC_EB);
266 W8(ep, sen_genscc.scc_tfcr, SCC_EB); 271 W8(ep, sen_genscc.scc_tfcr, SCC_EB);
272#endif
267 273
268 /* Set maximum bytes per receive buffer. 274 /* Set maximum bytes per receive buffer.
269 * This appears to be an Ethernet frame size, not the buffer 275 * This appears to be an Ethernet frame size, not the buffer
diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c
index 999d69168277..4320a983a588 100644
--- a/drivers/net/gianfar.c
+++ b/drivers/net/gianfar.c
@@ -105,6 +105,7 @@ const char gfar_driver_version[] = "1.3";
105 105
106static int gfar_enet_open(struct net_device *dev); 106static int gfar_enet_open(struct net_device *dev);
107static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev); 107static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev);
108static void gfar_reset_task(struct work_struct *work);
108static void gfar_timeout(struct net_device *dev); 109static void gfar_timeout(struct net_device *dev);
109static int gfar_close(struct net_device *dev); 110static int gfar_close(struct net_device *dev);
110struct sk_buff *gfar_new_skb(struct net_device *dev); 111struct sk_buff *gfar_new_skb(struct net_device *dev);
@@ -209,6 +210,7 @@ static int gfar_probe(struct platform_device *pdev)
209 spin_lock_init(&priv->txlock); 210 spin_lock_init(&priv->txlock);
210 spin_lock_init(&priv->rxlock); 211 spin_lock_init(&priv->rxlock);
211 spin_lock_init(&priv->bflock); 212 spin_lock_init(&priv->bflock);
213 INIT_WORK(&priv->reset_task, gfar_reset_task);
212 214
213 platform_set_drvdata(pdev, dev); 215 platform_set_drvdata(pdev, dev);
214 216
@@ -1212,6 +1214,7 @@ static int gfar_close(struct net_device *dev)
1212 1214
1213 napi_disable(&priv->napi); 1215 napi_disable(&priv->napi);
1214 1216
1217 cancel_work_sync(&priv->reset_task);
1215 stop_gfar(dev); 1218 stop_gfar(dev);
1216 1219
1217 /* Disconnect from the PHY */ 1220 /* Disconnect from the PHY */
@@ -1326,13 +1329,16 @@ static int gfar_change_mtu(struct net_device *dev, int new_mtu)
1326 return 0; 1329 return 0;
1327} 1330}
1328 1331
1329/* gfar_timeout gets called when a packet has not been 1332/* gfar_reset_task gets scheduled when a packet has not been
1330 * transmitted after a set amount of time. 1333 * transmitted after a set amount of time.
1331 * For now, assume that clearing out all the structures, and 1334 * For now, assume that clearing out all the structures, and
1332 * starting over will fix the problem. */ 1335 * starting over will fix the problem.
1333static void gfar_timeout(struct net_device *dev) 1336 */
1337static void gfar_reset_task(struct work_struct *work)
1334{ 1338{
1335 dev->stats.tx_errors++; 1339 struct gfar_private *priv = container_of(work, struct gfar_private,
1340 reset_task);
1341 struct net_device *dev = priv->dev;
1336 1342
1337 if (dev->flags & IFF_UP) { 1343 if (dev->flags & IFF_UP) {
1338 stop_gfar(dev); 1344 stop_gfar(dev);
@@ -1342,6 +1348,14 @@ static void gfar_timeout(struct net_device *dev)
1342 netif_tx_schedule_all(dev); 1348 netif_tx_schedule_all(dev);
1343} 1349}
1344 1350
1351static void gfar_timeout(struct net_device *dev)
1352{
1353 struct gfar_private *priv = netdev_priv(dev);
1354
1355 dev->stats.tx_errors++;
1356 schedule_work(&priv->reset_task);
1357}
1358
1345/* Interrupt Handler for Transmit complete */ 1359/* Interrupt Handler for Transmit complete */
1346static int gfar_clean_tx_ring(struct net_device *dev) 1360static int gfar_clean_tx_ring(struct net_device *dev)
1347{ 1361{
diff --git a/drivers/net/gianfar.h b/drivers/net/gianfar.h
index d59df98bd636..f46e9b63af13 100644
--- a/drivers/net/gianfar.h
+++ b/drivers/net/gianfar.h
@@ -756,6 +756,7 @@ struct gfar_private {
756 756
757 uint32_t msg_enable; 757 uint32_t msg_enable;
758 758
759 struct work_struct reset_task;
759 /* Network Statistics */ 760 /* Network Statistics */
760 struct gfar_extra_stats extra_stats; 761 struct gfar_extra_stats extra_stats;
761}; 762};
diff --git a/drivers/net/ibm_newemac/core.c b/drivers/net/ibm_newemac/core.c
index 2e720f26ca83..ccd9d9058f6d 100644
--- a/drivers/net/ibm_newemac/core.c
+++ b/drivers/net/ibm_newemac/core.c
@@ -663,9 +663,6 @@ static int emac_configure(struct emac_instance *dev)
663 if (emac_phy_gpcs(dev->phy.mode)) 663 if (emac_phy_gpcs(dev->phy.mode))
664 emac_mii_reset_phy(&dev->phy); 664 emac_mii_reset_phy(&dev->phy);
665 665
666 /* Required for Pause packet support in EMAC */
667 dev_mc_add(ndev, default_mcast_addr, sizeof(default_mcast_addr), 1);
668
669 return 0; 666 return 0;
670} 667}
671 668
@@ -1150,6 +1147,9 @@ static int emac_open(struct net_device *ndev)
1150 } else 1147 } else
1151 netif_carrier_on(dev->ndev); 1148 netif_carrier_on(dev->ndev);
1152 1149
1150 /* Required for Pause packet support in EMAC */
1151 dev_mc_add(ndev, default_mcast_addr, sizeof(default_mcast_addr), 1);
1152
1153 emac_configure(dev); 1153 emac_configure(dev);
1154 mal_poll_add(dev->mal, &dev->commac); 1154 mal_poll_add(dev->mal, &dev->commac);
1155 mal_enable_tx_channel(dev->mal, dev->mal_tx_chan); 1155 mal_enable_tx_channel(dev->mal, dev->mal_tx_chan);
diff --git a/drivers/net/ibmveth.c b/drivers/net/ibmveth.c
index a03fe1fb61ca..c2d57f836088 100644
--- a/drivers/net/ibmveth.c
+++ b/drivers/net/ibmveth.c
@@ -904,8 +904,6 @@ static int ibmveth_start_xmit(struct sk_buff *skb, struct net_device *netdev)
904 unsigned long data_dma_addr; 904 unsigned long data_dma_addr;
905 905
906 desc.fields.flags_len = IBMVETH_BUF_VALID | skb->len; 906 desc.fields.flags_len = IBMVETH_BUF_VALID | skb->len;
907 data_dma_addr = dma_map_single(&adapter->vdev->dev, skb->data,
908 skb->len, DMA_TO_DEVICE);
909 907
910 if (skb->ip_summed == CHECKSUM_PARTIAL && 908 if (skb->ip_summed == CHECKSUM_PARTIAL &&
911 ip_hdr(skb)->protocol != IPPROTO_TCP && skb_checksum_help(skb)) { 909 ip_hdr(skb)->protocol != IPPROTO_TCP && skb_checksum_help(skb)) {
@@ -924,6 +922,8 @@ static int ibmveth_start_xmit(struct sk_buff *skb, struct net_device *netdev)
924 buf[1] = 0; 922 buf[1] = 0;
925 } 923 }
926 924
925 data_dma_addr = dma_map_single(&adapter->vdev->dev, skb->data,
926 skb->len, DMA_TO_DEVICE);
927 if (dma_mapping_error(&adapter->vdev->dev, data_dma_addr)) { 927 if (dma_mapping_error(&adapter->vdev->dev, data_dma_addr)) {
928 if (!firmware_has_feature(FW_FEATURE_CMO)) 928 if (!firmware_has_feature(FW_FEATURE_CMO))
929 ibmveth_error_printk("tx: unable to map xmit buffer\n"); 929 ibmveth_error_printk("tx: unable to map xmit buffer\n");
@@ -932,6 +932,7 @@ static int ibmveth_start_xmit(struct sk_buff *skb, struct net_device *netdev)
932 desc.fields.address = adapter->bounce_buffer_dma; 932 desc.fields.address = adapter->bounce_buffer_dma;
933 tx_map_failed++; 933 tx_map_failed++;
934 used_bounce = 1; 934 used_bounce = 1;
935 wmb();
935 } else 936 } else
936 desc.fields.address = data_dma_addr; 937 desc.fields.address = data_dma_addr;
937 938
diff --git a/drivers/net/igb/e1000_82575.c b/drivers/net/igb/e1000_82575.c
index bb823acc7443..f5e2e7235fcb 100644
--- a/drivers/net/igb/e1000_82575.c
+++ b/drivers/net/igb/e1000_82575.c
@@ -87,7 +87,6 @@ static s32 igb_get_invariants_82575(struct e1000_hw *hw)
87 case E1000_DEV_ID_82576: 87 case E1000_DEV_ID_82576:
88 case E1000_DEV_ID_82576_FIBER: 88 case E1000_DEV_ID_82576_FIBER:
89 case E1000_DEV_ID_82576_SERDES: 89 case E1000_DEV_ID_82576_SERDES:
90 case E1000_DEV_ID_82576_QUAD_COPPER:
91 mac->type = e1000_82576; 90 mac->type = e1000_82576;
92 break; 91 break;
93 default: 92 default:
diff --git a/drivers/net/igb/e1000_hw.h b/drivers/net/igb/e1000_hw.h
index a65ccc3095c3..99504a600a80 100644
--- a/drivers/net/igb/e1000_hw.h
+++ b/drivers/net/igb/e1000_hw.h
@@ -41,7 +41,6 @@ struct e1000_hw;
41#define E1000_DEV_ID_82576 0x10C9 41#define E1000_DEV_ID_82576 0x10C9
42#define E1000_DEV_ID_82576_FIBER 0x10E6 42#define E1000_DEV_ID_82576_FIBER 0x10E6
43#define E1000_DEV_ID_82576_SERDES 0x10E7 43#define E1000_DEV_ID_82576_SERDES 0x10E7
44#define E1000_DEV_ID_82576_QUAD_COPPER 0x10E8
45#define E1000_DEV_ID_82575EB_COPPER 0x10A7 44#define E1000_DEV_ID_82575EB_COPPER 0x10A7
46#define E1000_DEV_ID_82575EB_FIBER_SERDES 0x10A9 45#define E1000_DEV_ID_82575EB_FIBER_SERDES 0x10A9
47#define E1000_DEV_ID_82575GB_QUAD_COPPER 0x10D6 46#define E1000_DEV_ID_82575GB_QUAD_COPPER 0x10D6
diff --git a/drivers/net/igb/igb_ethtool.c b/drivers/net/igb/igb_ethtool.c
index 11aee1309951..58906c984be9 100644
--- a/drivers/net/igb/igb_ethtool.c
+++ b/drivers/net/igb/igb_ethtool.c
@@ -373,13 +373,17 @@ static void igb_get_regs(struct net_device *netdev,
373 regs_buff[12] = rd32(E1000_EECD); 373 regs_buff[12] = rd32(E1000_EECD);
374 374
375 /* Interrupt */ 375 /* Interrupt */
376 regs_buff[13] = rd32(E1000_EICR); 376 /* Reading EICS for EICR because they read the
377 * same but EICS does not clear on read */
378 regs_buff[13] = rd32(E1000_EICS);
377 regs_buff[14] = rd32(E1000_EICS); 379 regs_buff[14] = rd32(E1000_EICS);
378 regs_buff[15] = rd32(E1000_EIMS); 380 regs_buff[15] = rd32(E1000_EIMS);
379 regs_buff[16] = rd32(E1000_EIMC); 381 regs_buff[16] = rd32(E1000_EIMC);
380 regs_buff[17] = rd32(E1000_EIAC); 382 regs_buff[17] = rd32(E1000_EIAC);
381 regs_buff[18] = rd32(E1000_EIAM); 383 regs_buff[18] = rd32(E1000_EIAM);
382 regs_buff[19] = rd32(E1000_ICR); 384 /* Reading ICS for ICR because they read the
385 * same but ICS does not clear on read */
386 regs_buff[19] = rd32(E1000_ICS);
383 regs_buff[20] = rd32(E1000_ICS); 387 regs_buff[20] = rd32(E1000_ICS);
384 regs_buff[21] = rd32(E1000_IMS); 388 regs_buff[21] = rd32(E1000_IMS);
385 regs_buff[22] = rd32(E1000_IMC); 389 regs_buff[22] = rd32(E1000_IMC);
@@ -1746,15 +1750,6 @@ static int igb_wol_exclusion(struct igb_adapter *adapter,
1746 /* return success for non excluded adapter ports */ 1750 /* return success for non excluded adapter ports */
1747 retval = 0; 1751 retval = 0;
1748 break; 1752 break;
1749 case E1000_DEV_ID_82576_QUAD_COPPER:
1750 /* quad port adapters only support WoL on port A */
1751 if (!(adapter->flags & IGB_FLAG_QUAD_PORT_A)) {
1752 wol->supported = 0;
1753 break;
1754 }
1755 /* return success for non excluded adapter ports */
1756 retval = 0;
1757 break;
1758 default: 1753 default:
1759 /* dual port cards only support WoL on port A from now on 1754 /* dual port cards only support WoL on port A from now on
1760 * unless it was enabled in the eeprom for port B 1755 * unless it was enabled in the eeprom for port B
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c
index 8f66e15ec8d6..634c4c9d87be 100644
--- a/drivers/net/igb/igb_main.c
+++ b/drivers/net/igb/igb_main.c
@@ -61,7 +61,6 @@ static struct pci_device_id igb_pci_tbl[] = {
61 { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576), board_82575 }, 61 { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576), board_82575 },
62 { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576_FIBER), board_82575 }, 62 { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576_FIBER), board_82575 },
63 { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576_SERDES), board_82575 }, 63 { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576_SERDES), board_82575 },
64 { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576_QUAD_COPPER), board_82575 },
65 { PCI_VDEVICE(INTEL, E1000_DEV_ID_82575EB_COPPER), board_82575 }, 64 { PCI_VDEVICE(INTEL, E1000_DEV_ID_82575EB_COPPER), board_82575 },
66 { PCI_VDEVICE(INTEL, E1000_DEV_ID_82575EB_FIBER_SERDES), board_82575 }, 65 { PCI_VDEVICE(INTEL, E1000_DEV_ID_82575EB_FIBER_SERDES), board_82575 },
67 { PCI_VDEVICE(INTEL, E1000_DEV_ID_82575GB_QUAD_COPPER), board_82575 }, 66 { PCI_VDEVICE(INTEL, E1000_DEV_ID_82575GB_QUAD_COPPER), board_82575 },
@@ -521,7 +520,7 @@ static void igb_set_interrupt_capability(struct igb_adapter *adapter)
521 adapter->msix_entries, 520 adapter->msix_entries,
522 numvecs); 521 numvecs);
523 if (err == 0) 522 if (err == 0)
524 return; 523 goto out;
525 524
526 igb_reset_interrupt_capability(adapter); 525 igb_reset_interrupt_capability(adapter);
527 526
@@ -531,7 +530,7 @@ msi_only:
531 adapter->num_tx_queues = 1; 530 adapter->num_tx_queues = 1;
532 if (!pci_enable_msi(adapter->pdev)) 531 if (!pci_enable_msi(adapter->pdev))
533 adapter->flags |= IGB_FLAG_HAS_MSI; 532 adapter->flags |= IGB_FLAG_HAS_MSI;
534 533out:
535 /* Notify the stack of the (possibly) reduced Tx Queue count. */ 534 /* Notify the stack of the (possibly) reduced Tx Queue count. */
536 adapter->netdev->real_num_tx_queues = adapter->num_tx_queues; 535 adapter->netdev->real_num_tx_queues = adapter->num_tx_queues;
537 return; 536 return;
@@ -1217,16 +1216,6 @@ static int __devinit igb_probe(struct pci_dev *pdev,
1217 if (rd32(E1000_STATUS) & E1000_STATUS_FUNC_1) 1216 if (rd32(E1000_STATUS) & E1000_STATUS_FUNC_1)
1218 adapter->eeprom_wol = 0; 1217 adapter->eeprom_wol = 0;
1219 break; 1218 break;
1220 case E1000_DEV_ID_82576_QUAD_COPPER:
1221 /* if quad port adapter, disable WoL on all but port A */
1222 if (global_quad_port_a != 0)
1223 adapter->eeprom_wol = 0;
1224 else
1225 adapter->flags |= IGB_FLAG_QUAD_PORT_A;
1226 /* Reset for multiple quad port adapters */
1227 if (++global_quad_port_a == 4)
1228 global_quad_port_a = 0;
1229 break;
1230 } 1219 }
1231 1220
1232 /* initialize the wol settings based on the eeprom settings */ 1221 /* initialize the wol settings based on the eeprom settings */
@@ -2290,7 +2279,9 @@ static void igb_watchdog_task(struct work_struct *work)
2290 struct igb_ring *tx_ring = adapter->tx_ring; 2279 struct igb_ring *tx_ring = adapter->tx_ring;
2291 struct e1000_mac_info *mac = &adapter->hw.mac; 2280 struct e1000_mac_info *mac = &adapter->hw.mac;
2292 u32 link; 2281 u32 link;
2282 u32 eics = 0;
2293 s32 ret_val; 2283 s32 ret_val;
2284 int i;
2294 2285
2295 if ((netif_carrier_ok(netdev)) && 2286 if ((netif_carrier_ok(netdev)) &&
2296 (rd32(E1000_STATUS) & E1000_STATUS_LU)) 2287 (rd32(E1000_STATUS) & E1000_STATUS_LU))
@@ -2392,7 +2383,13 @@ link_up:
2392 } 2383 }
2393 2384
2394 /* Cause software interrupt to ensure rx ring is cleaned */ 2385 /* Cause software interrupt to ensure rx ring is cleaned */
2395 wr32(E1000_ICS, E1000_ICS_RXDMT0); 2386 if (adapter->msix_entries) {
2387 for (i = 0; i < adapter->num_rx_queues; i++)
2388 eics |= adapter->rx_ring[i].eims_value;
2389 wr32(E1000_EICS, eics);
2390 } else {
2391 wr32(E1000_ICS, E1000_ICS_RXDMT0);
2392 }
2396 2393
2397 /* Force detection of hung controller every watchdog period */ 2394 /* Force detection of hung controller every watchdog period */
2398 tx_ring->detect_tx_hung = true; 2395 tx_ring->detect_tx_hung = true;
diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c
index 34bca16d48a6..53f41b649f03 100644
--- a/drivers/net/ixgbe/ixgbe_main.c
+++ b/drivers/net/ixgbe/ixgbe_main.c
@@ -1636,16 +1636,17 @@ static void ixgbe_set_multi(struct net_device *netdev)
1636 struct ixgbe_hw *hw = &adapter->hw; 1636 struct ixgbe_hw *hw = &adapter->hw;
1637 struct dev_mc_list *mc_ptr; 1637 struct dev_mc_list *mc_ptr;
1638 u8 *mta_list; 1638 u8 *mta_list;
1639 u32 fctrl; 1639 u32 fctrl, vlnctrl;
1640 int i; 1640 int i;
1641 1641
1642 /* Check for Promiscuous and All Multicast modes */ 1642 /* Check for Promiscuous and All Multicast modes */
1643 1643
1644 fctrl = IXGBE_READ_REG(hw, IXGBE_FCTRL); 1644 fctrl = IXGBE_READ_REG(hw, IXGBE_FCTRL);
1645 vlnctrl = IXGBE_READ_REG(hw, IXGBE_VLNCTRL);
1645 1646
1646 if (netdev->flags & IFF_PROMISC) { 1647 if (netdev->flags & IFF_PROMISC) {
1647 fctrl |= (IXGBE_FCTRL_UPE | IXGBE_FCTRL_MPE); 1648 fctrl |= (IXGBE_FCTRL_UPE | IXGBE_FCTRL_MPE);
1648 fctrl &= ~IXGBE_VLNCTRL_VFE; 1649 vlnctrl &= ~IXGBE_VLNCTRL_VFE;
1649 } else { 1650 } else {
1650 if (netdev->flags & IFF_ALLMULTI) { 1651 if (netdev->flags & IFF_ALLMULTI) {
1651 fctrl |= IXGBE_FCTRL_MPE; 1652 fctrl |= IXGBE_FCTRL_MPE;
@@ -1653,10 +1654,11 @@ static void ixgbe_set_multi(struct net_device *netdev)
1653 } else { 1654 } else {
1654 fctrl &= ~(IXGBE_FCTRL_UPE | IXGBE_FCTRL_MPE); 1655 fctrl &= ~(IXGBE_FCTRL_UPE | IXGBE_FCTRL_MPE);
1655 } 1656 }
1656 fctrl |= IXGBE_VLNCTRL_VFE; 1657 vlnctrl |= IXGBE_VLNCTRL_VFE;
1657 } 1658 }
1658 1659
1659 IXGBE_WRITE_REG(hw, IXGBE_FCTRL, fctrl); 1660 IXGBE_WRITE_REG(hw, IXGBE_FCTRL, fctrl);
1661 IXGBE_WRITE_REG(hw, IXGBE_VLNCTRL, vlnctrl);
1660 1662
1661 if (netdev->mc_count) { 1663 if (netdev->mc_count) {
1662 mta_list = kcalloc(netdev->mc_count, ETH_ALEN, GFP_ATOMIC); 1664 mta_list = kcalloc(netdev->mc_count, ETH_ALEN, GFP_ATOMIC);
diff --git a/drivers/net/mv643xx_eth.c b/drivers/net/mv643xx_eth.c
index 46819af3b062..0a18b9e96da1 100644
--- a/drivers/net/mv643xx_eth.c
+++ b/drivers/net/mv643xx_eth.c
@@ -55,7 +55,7 @@
55#include <asm/system.h> 55#include <asm/system.h>
56 56
57static char mv643xx_eth_driver_name[] = "mv643xx_eth"; 57static char mv643xx_eth_driver_name[] = "mv643xx_eth";
58static char mv643xx_eth_driver_version[] = "1.2"; 58static char mv643xx_eth_driver_version[] = "1.3";
59 59
60#define MV643XX_ETH_CHECKSUM_OFFLOAD_TX 60#define MV643XX_ETH_CHECKSUM_OFFLOAD_TX
61#define MV643XX_ETH_NAPI 61#define MV643XX_ETH_NAPI
@@ -474,11 +474,19 @@ static void rxq_refill(struct rx_queue *rxq)
474 /* 474 /*
475 * Reserve 2+14 bytes for an ethernet header (the 475 * Reserve 2+14 bytes for an ethernet header (the
476 * hardware automatically prepends 2 bytes of dummy 476 * hardware automatically prepends 2 bytes of dummy
477 * data to each received packet), 4 bytes for a VLAN 477 * data to each received packet), 16 bytes for up to
478 * header, and 4 bytes for the trailing FCS -- 24 478 * four VLAN tags, and 4 bytes for the trailing FCS
479 * bytes total. 479 * -- 36 bytes total.
480 */ 480 */
481 skb_size = mp->dev->mtu + 24; 481 skb_size = mp->dev->mtu + 36;
482
483 /*
484 * Make sure that the skb size is a multiple of 8
485 * bytes, as the lower three bits of the receive
486 * descriptor's buffer size field are ignored by
487 * the hardware.
488 */
489 skb_size = (skb_size + 7) & ~7;
482 490
483 skb = dev_alloc_skb(skb_size + dma_get_cache_alignment() - 1); 491 skb = dev_alloc_skb(skb_size + dma_get_cache_alignment() - 1);
484 if (skb == NULL) 492 if (skb == NULL)
@@ -509,10 +517,8 @@ static void rxq_refill(struct rx_queue *rxq)
509 skb_reserve(skb, 2); 517 skb_reserve(skb, 2);
510 } 518 }
511 519
512 if (rxq->rx_desc_count != rxq->rx_ring_size) { 520 if (rxq->rx_desc_count != rxq->rx_ring_size)
513 rxq->rx_oom.expires = jiffies + (HZ / 10); 521 mod_timer(&rxq->rx_oom, jiffies + (HZ / 10));
514 add_timer(&rxq->rx_oom);
515 }
516 522
517 spin_unlock_irqrestore(&mp->lock, flags); 523 spin_unlock_irqrestore(&mp->lock, flags);
518} 524}
@@ -529,7 +535,7 @@ static int rxq_process(struct rx_queue *rxq, int budget)
529 int rx; 535 int rx;
530 536
531 rx = 0; 537 rx = 0;
532 while (rx < budget) { 538 while (rx < budget && rxq->rx_desc_count) {
533 struct rx_desc *rx_desc; 539 struct rx_desc *rx_desc;
534 unsigned int cmd_sts; 540 unsigned int cmd_sts;
535 struct sk_buff *skb; 541 struct sk_buff *skb;
@@ -554,7 +560,7 @@ static int rxq_process(struct rx_queue *rxq, int budget)
554 spin_unlock_irqrestore(&mp->lock, flags); 560 spin_unlock_irqrestore(&mp->lock, flags);
555 561
556 dma_unmap_single(NULL, rx_desc->buf_ptr + 2, 562 dma_unmap_single(NULL, rx_desc->buf_ptr + 2,
557 mp->dev->mtu + 24, DMA_FROM_DEVICE); 563 rx_desc->buf_size, DMA_FROM_DEVICE);
558 rxq->rx_desc_count--; 564 rxq->rx_desc_count--;
559 rx++; 565 rx++;
560 566
@@ -636,9 +642,9 @@ static int mv643xx_eth_poll(struct napi_struct *napi, int budget)
636 txq_reclaim(mp->txq + i, 0); 642 txq_reclaim(mp->txq + i, 0);
637 643
638 if (netif_carrier_ok(mp->dev)) { 644 if (netif_carrier_ok(mp->dev)) {
639 spin_lock(&mp->lock); 645 spin_lock_irq(&mp->lock);
640 __txq_maybe_wake(mp->txq + mp->txq_primary); 646 __txq_maybe_wake(mp->txq + mp->txq_primary);
641 spin_unlock(&mp->lock); 647 spin_unlock_irq(&mp->lock);
642 } 648 }
643 } 649 }
644#endif 650#endif
@@ -650,8 +656,6 @@ static int mv643xx_eth_poll(struct napi_struct *napi, int budget)
650 656
651 if (rx < budget) { 657 if (rx < budget) {
652 netif_rx_complete(mp->dev, napi); 658 netif_rx_complete(mp->dev, napi);
653 wrl(mp, INT_CAUSE(mp->port_num), 0);
654 wrl(mp, INT_CAUSE_EXT(mp->port_num), 0);
655 wrl(mp, INT_MASK(mp->port_num), INT_TX_END | INT_RX | INT_EXT); 659 wrl(mp, INT_MASK(mp->port_num), INT_TX_END | INT_RX | INT_EXT);
656 } 660 }
657 661
@@ -1796,6 +1800,7 @@ static irqreturn_t mv643xx_eth_irq(int irq, void *dev_id)
1796 */ 1800 */
1797#ifdef MV643XX_ETH_NAPI 1801#ifdef MV643XX_ETH_NAPI
1798 if (int_cause & INT_RX) { 1802 if (int_cause & INT_RX) {
1803 wrl(mp, INT_CAUSE(mp->port_num), ~(int_cause & INT_RX));
1799 wrl(mp, INT_MASK(mp->port_num), 0x00000000); 1804 wrl(mp, INT_MASK(mp->port_num), 0x00000000);
1800 rdl(mp, INT_MASK(mp->port_num)); 1805 rdl(mp, INT_MASK(mp->port_num));
1801 1806
diff --git a/drivers/net/myri10ge/myri10ge.c b/drivers/net/myri10ge/myri10ge.c
index 5d76cd09e246..f6847531bf9e 100644
--- a/drivers/net/myri10ge/myri10ge.c
+++ b/drivers/net/myri10ge/myri10ge.c
@@ -76,7 +76,7 @@
76#include "myri10ge_mcp.h" 76#include "myri10ge_mcp.h"
77#include "myri10ge_mcp_gen_header.h" 77#include "myri10ge_mcp_gen_header.h"
78 78
79#define MYRI10GE_VERSION_STR "1.3.99-1.347" 79#define MYRI10GE_VERSION_STR "1.4.3-1.358"
80 80
81MODULE_DESCRIPTION("Myricom 10G driver (10GbE)"); 81MODULE_DESCRIPTION("Myricom 10G driver (10GbE)");
82MODULE_AUTHOR("Maintainer: help@myri.com"); 82MODULE_AUTHOR("Maintainer: help@myri.com");
diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
index a3e3895e5032..0f6f9747d255 100644
--- a/drivers/net/r8169.c
+++ b/drivers/net/r8169.c
@@ -2792,7 +2792,7 @@ static int rtl8169_rx_interrupt(struct net_device *dev,
2792 pkt_size, PCI_DMA_FROMDEVICE); 2792 pkt_size, PCI_DMA_FROMDEVICE);
2793 rtl8169_mark_to_asic(desc, tp->rx_buf_sz); 2793 rtl8169_mark_to_asic(desc, tp->rx_buf_sz);
2794 } else { 2794 } else {
2795 pci_unmap_single(pdev, addr, pkt_size, 2795 pci_unmap_single(pdev, addr, tp->rx_buf_sz,
2796 PCI_DMA_FROMDEVICE); 2796 PCI_DMA_FROMDEVICE);
2797 tp->Rx_skbuff[entry] = NULL; 2797 tp->Rx_skbuff[entry] = NULL;
2798 } 2798 }
diff --git a/drivers/net/skfp/ess.c b/drivers/net/skfp/ess.c
index 889f98724610..a85efcfd9d0e 100644
--- a/drivers/net/skfp/ess.c
+++ b/drivers/net/skfp/ess.c
@@ -510,7 +510,7 @@ static void ess_send_response(struct s_smc *smc, struct smt_header *sm,
510 chg->path.para.p_type = SMT_P320B ; 510 chg->path.para.p_type = SMT_P320B ;
511 chg->path.para.p_len = sizeof(struct smt_p_320b) - PARA_LEN ; 511 chg->path.para.p_len = sizeof(struct smt_p_320b) - PARA_LEN ;
512 chg->path.mib_index = SBAPATHINDEX ; 512 chg->path.mib_index = SBAPATHINDEX ;
513 chg->path.path_pad = (u_short)NULL ; 513 chg->path.path_pad = 0;
514 chg->path.path_index = PRIMARY_RING ; 514 chg->path.path_index = PRIMARY_RING ;
515 515
516 /* set P320F */ 516 /* set P320F */
@@ -606,7 +606,7 @@ static void ess_send_alc_req(struct s_smc *smc)
606 req->path.para.p_type = SMT_P320B ; 606 req->path.para.p_type = SMT_P320B ;
607 req->path.para.p_len = sizeof(struct smt_p_320b) - PARA_LEN ; 607 req->path.para.p_len = sizeof(struct smt_p_320b) - PARA_LEN ;
608 req->path.mib_index = SBAPATHINDEX ; 608 req->path.mib_index = SBAPATHINDEX ;
609 req->path.path_pad = (u_short)NULL ; 609 req->path.path_pad = 0;
610 req->path.path_index = PRIMARY_RING ; 610 req->path.path_index = PRIMARY_RING ;
611 611
612 /* set P0017 */ 612 /* set P0017 */
@@ -636,7 +636,7 @@ static void ess_send_alc_req(struct s_smc *smc)
636 /* set P19 */ 636 /* set P19 */
637 req->a_addr.para.p_type = SMT_P0019 ; 637 req->a_addr.para.p_type = SMT_P0019 ;
638 req->a_addr.para.p_len = sizeof(struct smt_p_0019) - PARA_LEN ; 638 req->a_addr.para.p_len = sizeof(struct smt_p_0019) - PARA_LEN ;
639 req->a_addr.sba_pad = (u_short)NULL ; 639 req->a_addr.sba_pad = 0;
640 req->a_addr.alloc_addr = null_addr ; 640 req->a_addr.alloc_addr = null_addr ;
641 641
642 /* set P1A */ 642 /* set P1A */
diff --git a/drivers/net/smc91x.c b/drivers/net/smc91x.c
index 2040965d7724..24768c10cadb 100644
--- a/drivers/net/smc91x.c
+++ b/drivers/net/smc91x.c
@@ -2255,7 +2255,7 @@ static int smc_drv_remove(struct platform_device *pdev)
2255 2255
2256 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-regs"); 2256 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-regs");
2257 if (!res) 2257 if (!res)
2258 platform_get_resource(pdev, IORESOURCE_MEM, 0); 2258 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2259 release_mem_region(res->start, SMC_IO_EXTENT); 2259 release_mem_region(res->start, SMC_IO_EXTENT);
2260 2260
2261 free_netdev(ndev); 2261 free_netdev(ndev);
diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c
index 1b7cac77159e..6e42b5a8c22b 100644
--- a/drivers/net/usb/hso.c
+++ b/drivers/net/usb/hso.c
@@ -397,7 +397,7 @@ static const struct usb_device_id hso_ids[] = {
397 {default_port_device(0x0af0, 0xc031)}, /* Icon-Edge */ 397 {default_port_device(0x0af0, 0xc031)}, /* Icon-Edge */
398 {icon321_port_device(0x0af0, 0xd013)}, /* Module HSxPA */ 398 {icon321_port_device(0x0af0, 0xd013)}, /* Module HSxPA */
399 {icon321_port_device(0x0af0, 0xd031)}, /* Icon-321 */ 399 {icon321_port_device(0x0af0, 0xd031)}, /* Icon-321 */
400 {default_port_device(0x0af0, 0xd033)}, /* Icon-322 */ 400 {icon321_port_device(0x0af0, 0xd033)}, /* Icon-322 */
401 {USB_DEVICE(0x0af0, 0x7301)}, /* GE40x */ 401 {USB_DEVICE(0x0af0, 0x7301)}, /* GE40x */
402 {USB_DEVICE(0x0af0, 0x7361)}, /* GE40x */ 402 {USB_DEVICE(0x0af0, 0x7361)}, /* GE40x */
403 {USB_DEVICE(0x0af0, 0x7401)}, /* GI 0401 */ 403 {USB_DEVICE(0x0af0, 0x7401)}, /* GI 0401 */
@@ -2613,6 +2613,7 @@ static int hso_resume(struct usb_interface *iface)
2613 "Transmitting lingering data\n"); 2613 "Transmitting lingering data\n");
2614 hso_net_start_xmit(hso_net->skb_tx_buf, 2614 hso_net_start_xmit(hso_net->skb_tx_buf,
2615 hso_net->net); 2615 hso_net->net);
2616 hso_net->skb_tx_buf = NULL;
2616 } 2617 }
2617 result = hso_start_net_device(network_table[i]); 2618 result = hso_start_net_device(network_table[i]);
2618 if (result) 2619 if (result)
diff --git a/drivers/net/usb/mcs7830.c b/drivers/net/usb/mcs7830.c
index c3d119f997f5..ca9d00c1194e 100644
--- a/drivers/net/usb/mcs7830.c
+++ b/drivers/net/usb/mcs7830.c
@@ -46,6 +46,10 @@
46 46
47#define MCS7830_VENDOR_ID 0x9710 47#define MCS7830_VENDOR_ID 0x9710
48#define MCS7830_PRODUCT_ID 0x7830 48#define MCS7830_PRODUCT_ID 0x7830
49#define MCS7730_PRODUCT_ID 0x7730
50
51#define SITECOM_VENDOR_ID 0x0DF6
52#define LN_030_PRODUCT_ID 0x0021
49 53
50#define MCS7830_MII_ADVERTISE (ADVERTISE_PAUSE_CAP | ADVERTISE_100FULL | \ 54#define MCS7830_MII_ADVERTISE (ADVERTISE_PAUSE_CAP | ADVERTISE_100FULL | \
51 ADVERTISE_100HALF | ADVERTISE_10FULL | \ 55 ADVERTISE_100HALF | ADVERTISE_10FULL | \
@@ -442,6 +446,29 @@ static struct ethtool_ops mcs7830_ethtool_ops = {
442 .nway_reset = usbnet_nway_reset, 446 .nway_reset = usbnet_nway_reset,
443}; 447};
444 448
449static int mcs7830_set_mac_address(struct net_device *netdev, void *p)
450{
451 int ret;
452 struct usbnet *dev = netdev_priv(netdev);
453 struct sockaddr *addr = p;
454
455 if (netif_running(netdev))
456 return -EBUSY;
457
458 if (!is_valid_ether_addr(addr->sa_data))
459 return -EINVAL;
460
461 memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
462
463 ret = mcs7830_set_reg(dev, HIF_REG_ETHERNET_ADDR, ETH_ALEN,
464 netdev->dev_addr);
465
466 if (ret < 0)
467 return ret;
468
469 return 0;
470}
471
445static int mcs7830_bind(struct usbnet *dev, struct usb_interface *udev) 472static int mcs7830_bind(struct usbnet *dev, struct usb_interface *udev)
446{ 473{
447 struct net_device *net = dev->net; 474 struct net_device *net = dev->net;
@@ -455,6 +482,7 @@ static int mcs7830_bind(struct usbnet *dev, struct usb_interface *udev)
455 net->ethtool_ops = &mcs7830_ethtool_ops; 482 net->ethtool_ops = &mcs7830_ethtool_ops;
456 net->set_multicast_list = mcs7830_set_multicast; 483 net->set_multicast_list = mcs7830_set_multicast;
457 mcs7830_set_multicast(net); 484 mcs7830_set_multicast(net);
485 net->set_mac_address = mcs7830_set_mac_address;
458 486
459 /* reserve space for the status byte on rx */ 487 /* reserve space for the status byte on rx */
460 dev->rx_urb_size = ETH_FRAME_LEN + 1; 488 dev->rx_urb_size = ETH_FRAME_LEN + 1;
@@ -491,7 +519,16 @@ static int mcs7830_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
491} 519}
492 520
493static const struct driver_info moschip_info = { 521static const struct driver_info moschip_info = {
494 .description = "MOSCHIP 7830 usb-NET adapter", 522 .description = "MOSCHIP 7830/7730 usb-NET adapter",
523 .bind = mcs7830_bind,
524 .rx_fixup = mcs7830_rx_fixup,
525 .flags = FLAG_ETHER,
526 .in = 1,
527 .out = 2,
528};
529
530static const struct driver_info sitecom_info = {
531 .description = "Sitecom LN-30 usb-NET adapter",
495 .bind = mcs7830_bind, 532 .bind = mcs7830_bind,
496 .rx_fixup = mcs7830_rx_fixup, 533 .rx_fixup = mcs7830_rx_fixup,
497 .flags = FLAG_ETHER, 534 .flags = FLAG_ETHER,
@@ -504,6 +541,14 @@ static const struct usb_device_id products[] = {
504 USB_DEVICE(MCS7830_VENDOR_ID, MCS7830_PRODUCT_ID), 541 USB_DEVICE(MCS7830_VENDOR_ID, MCS7830_PRODUCT_ID),
505 .driver_info = (unsigned long) &moschip_info, 542 .driver_info = (unsigned long) &moschip_info,
506 }, 543 },
544 {
545 USB_DEVICE(MCS7830_VENDOR_ID, MCS7730_PRODUCT_ID),
546 .driver_info = (unsigned long) &moschip_info,
547 },
548 {
549 USB_DEVICE(SITECOM_VENDOR_ID, LN_030_PRODUCT_ID),
550 .driver_info = (unsigned long) &sitecom_info,
551 },
507 {}, 552 {},
508}; 553};
509MODULE_DEVICE_TABLE(usb, products); 554MODULE_DEVICE_TABLE(usb, products);
diff --git a/drivers/net/wan/sbni.c b/drivers/net/wan/sbni.c
index e59255a155a9..6596cd0742b9 100644
--- a/drivers/net/wan/sbni.c
+++ b/drivers/net/wan/sbni.c
@@ -1317,7 +1317,7 @@ sbni_ioctl( struct net_device *dev, struct ifreq *ifr, int cmd )
1317 break; 1317 break;
1318 1318
1319 case SIOCDEVRESINSTATS : 1319 case SIOCDEVRESINSTATS :
1320 if( current->euid != 0 ) /* root only */ 1320 if (!capable(CAP_NET_ADMIN))
1321 return -EPERM; 1321 return -EPERM;
1322 memset( &nl->in_stats, 0, sizeof(struct sbni_in_stats) ); 1322 memset( &nl->in_stats, 0, sizeof(struct sbni_in_stats) );
1323 break; 1323 break;
@@ -1334,7 +1334,7 @@ sbni_ioctl( struct net_device *dev, struct ifreq *ifr, int cmd )
1334 break; 1334 break;
1335 1335
1336 case SIOCDEVSHWSTATE : 1336 case SIOCDEVSHWSTATE :
1337 if( current->euid != 0 ) /* root only */ 1337 if (!capable(CAP_NET_ADMIN))
1338 return -EPERM; 1338 return -EPERM;
1339 1339
1340 spin_lock( &nl->lock ); 1340 spin_lock( &nl->lock );
@@ -1355,7 +1355,7 @@ sbni_ioctl( struct net_device *dev, struct ifreq *ifr, int cmd )
1355#ifdef CONFIG_SBNI_MULTILINE 1355#ifdef CONFIG_SBNI_MULTILINE
1356 1356
1357 case SIOCDEVENSLAVE : 1357 case SIOCDEVENSLAVE :
1358 if( current->euid != 0 ) /* root only */ 1358 if (!capable(CAP_NET_ADMIN))
1359 return -EPERM; 1359 return -EPERM;
1360 1360
1361 if (copy_from_user( slave_name, ifr->ifr_data, sizeof slave_name )) 1361 if (copy_from_user( slave_name, ifr->ifr_data, sizeof slave_name ))
@@ -1370,7 +1370,7 @@ sbni_ioctl( struct net_device *dev, struct ifreq *ifr, int cmd )
1370 return enslave( dev, slave_dev ); 1370 return enslave( dev, slave_dev );
1371 1371
1372 case SIOCDEVEMANSIPATE : 1372 case SIOCDEVEMANSIPATE :
1373 if( current->euid != 0 ) /* root only */ 1373 if (!capable(CAP_NET_ADMIN))
1374 return -EPERM; 1374 return -EPERM;
1375 1375
1376 return emancipate( dev ); 1376 return emancipate( dev );
diff --git a/drivers/net/wd.c b/drivers/net/wd.c
index 6f9aa1643743..fa14255282af 100644
--- a/drivers/net/wd.c
+++ b/drivers/net/wd.c
@@ -337,7 +337,7 @@ static int __init wd_probe1(struct net_device *dev, int ioaddr)
337#ifdef CONFIG_NET_POLL_CONTROLLER 337#ifdef CONFIG_NET_POLL_CONTROLLER
338 dev->poll_controller = ei_poll; 338 dev->poll_controller = ei_poll;
339#endif 339#endif
340 NS8390p_init(dev, 0); 340 NS8390_init(dev, 0);
341 341
342#if 1 342#if 1
343 /* Enable interrupt generation on softconfig cards -- M.U */ 343 /* Enable interrupt generation on softconfig cards -- M.U */
diff --git a/drivers/net/wireless/ath5k/base.c b/drivers/net/wireless/ath5k/base.c
index cd598c0d8d6d..bcec74e839e9 100644
--- a/drivers/net/wireless/ath5k/base.c
+++ b/drivers/net/wireless/ath5k/base.c
@@ -290,7 +290,7 @@ static inline void ath5k_txbuf_free(struct ath5k_softc *sc,
290 return; 290 return;
291 pci_unmap_single(sc->pdev, bf->skbaddr, bf->skb->len, 291 pci_unmap_single(sc->pdev, bf->skbaddr, bf->skb->len,
292 PCI_DMA_TODEVICE); 292 PCI_DMA_TODEVICE);
293 dev_kfree_skb(bf->skb); 293 dev_kfree_skb_any(bf->skb);
294 bf->skb = NULL; 294 bf->skb = NULL;
295} 295}
296 296
@@ -505,6 +505,7 @@ ath5k_pci_probe(struct pci_dev *pdev,
505 mutex_init(&sc->lock); 505 mutex_init(&sc->lock);
506 spin_lock_init(&sc->rxbuflock); 506 spin_lock_init(&sc->rxbuflock);
507 spin_lock_init(&sc->txbuflock); 507 spin_lock_init(&sc->txbuflock);
508 spin_lock_init(&sc->block);
508 509
509 /* Set private data */ 510 /* Set private data */
510 pci_set_drvdata(pdev, hw); 511 pci_set_drvdata(pdev, hw);
@@ -2123,8 +2124,11 @@ ath5k_beacon_config(struct ath5k_softc *sc)
2123 2124
2124 sc->imask |= AR5K_INT_SWBA; 2125 sc->imask |= AR5K_INT_SWBA;
2125 2126
2126 if (ath5k_hw_hasveol(ah)) 2127 if (ath5k_hw_hasveol(ah)) {
2128 spin_lock(&sc->block);
2127 ath5k_beacon_send(sc); 2129 ath5k_beacon_send(sc);
2130 spin_unlock(&sc->block);
2131 }
2128 } 2132 }
2129 /* TODO else AP */ 2133 /* TODO else AP */
2130 2134
@@ -2324,7 +2328,9 @@ ath5k_intr(int irq, void *dev_id)
2324 TSF_TO_TU(tsf), 2328 TSF_TO_TU(tsf),
2325 (unsigned long long) tsf); 2329 (unsigned long long) tsf);
2326 } else { 2330 } else {
2331 spin_lock(&sc->block);
2327 ath5k_beacon_send(sc); 2332 ath5k_beacon_send(sc);
2333 spin_unlock(&sc->block);
2328 } 2334 }
2329 } 2335 }
2330 if (status & AR5K_INT_RXEOL) { 2336 if (status & AR5K_INT_RXEOL) {
@@ -2685,6 +2691,11 @@ static int ath5k_add_interface(struct ieee80211_hw *hw,
2685 ret = -EOPNOTSUPP; 2691 ret = -EOPNOTSUPP;
2686 goto end; 2692 goto end;
2687 } 2693 }
2694
2695 /* Set to a reasonable value. Note that this will
2696 * be set to mac80211's value at ath5k_config(). */
2697 sc->bintval = 1000;
2698
2688 ret = 0; 2699 ret = 0;
2689end: 2700end:
2690 mutex_unlock(&sc->lock); 2701 mutex_unlock(&sc->lock);
@@ -2729,9 +2740,6 @@ ath5k_config_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
2729 struct ath5k_hw *ah = sc->ah; 2740 struct ath5k_hw *ah = sc->ah;
2730 int ret; 2741 int ret;
2731 2742
2732 /* Set to a reasonable value. Note that this will
2733 * be set to mac80211's value at ath5k_config(). */
2734 sc->bintval = 1000;
2735 mutex_lock(&sc->lock); 2743 mutex_lock(&sc->lock);
2736 if (sc->vif != vif) { 2744 if (sc->vif != vif) {
2737 ret = -EIO; 2745 ret = -EIO;
@@ -2991,6 +2999,7 @@ static int
2991ath5k_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb) 2999ath5k_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb)
2992{ 3000{
2993 struct ath5k_softc *sc = hw->priv; 3001 struct ath5k_softc *sc = hw->priv;
3002 unsigned long flags;
2994 int ret; 3003 int ret;
2995 3004
2996 ath5k_debug_dump_skb(sc, skb, "BC ", 1); 3005 ath5k_debug_dump_skb(sc, skb, "BC ", 1);
@@ -3000,12 +3009,14 @@ ath5k_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb)
3000 goto end; 3009 goto end;
3001 } 3010 }
3002 3011
3012 spin_lock_irqsave(&sc->block, flags);
3003 ath5k_txbuf_free(sc, sc->bbuf); 3013 ath5k_txbuf_free(sc, sc->bbuf);
3004 sc->bbuf->skb = skb; 3014 sc->bbuf->skb = skb;
3005 ret = ath5k_beacon_setup(sc, sc->bbuf); 3015 ret = ath5k_beacon_setup(sc, sc->bbuf);
3006 if (ret) 3016 if (ret)
3007 sc->bbuf->skb = NULL; 3017 sc->bbuf->skb = NULL;
3008 else { 3018 spin_unlock_irqrestore(&sc->block, flags);
3019 if (!ret) {
3009 ath5k_beacon_config(sc); 3020 ath5k_beacon_config(sc);
3010 mmiowb(); 3021 mmiowb();
3011 } 3022 }
diff --git a/drivers/net/wireless/ath5k/base.h b/drivers/net/wireless/ath5k/base.h
index 248e32eb6cb3..1549b63d6138 100644
--- a/drivers/net/wireless/ath5k/base.h
+++ b/drivers/net/wireless/ath5k/base.h
@@ -168,6 +168,7 @@ struct ath5k_softc {
168 struct tasklet_struct txtq; /* tx intr tasklet */ 168 struct tasklet_struct txtq; /* tx intr tasklet */
169 struct ath5k_led tx_led; /* tx led */ 169 struct ath5k_led tx_led; /* tx led */
170 170
171 spinlock_t block; /* protects beacon */
171 struct ath5k_buf *bbuf; /* beacon buffer */ 172 struct ath5k_buf *bbuf; /* beacon buffer */
172 unsigned int bhalq, /* SW q for outgoing beacons */ 173 unsigned int bhalq, /* SW q for outgoing beacons */
173 bmisscount, /* missed beacon transmits */ 174 bmisscount, /* missed beacon transmits */
diff --git a/drivers/net/wireless/atmel.c b/drivers/net/wireless/atmel.c
index bd35bb0a1480..bd65c485098c 100644
--- a/drivers/net/wireless/atmel.c
+++ b/drivers/net/wireless/atmel.c
@@ -1304,7 +1304,7 @@ EXPORT_SYMBOL(atmel_open);
1304int atmel_open(struct net_device *dev) 1304int atmel_open(struct net_device *dev)
1305{ 1305{
1306 struct atmel_private *priv = netdev_priv(dev); 1306 struct atmel_private *priv = netdev_priv(dev);
1307 int i, channel; 1307 int i, channel, err;
1308 1308
1309 /* any scheduled timer is no longer needed and might screw things up.. */ 1309 /* any scheduled timer is no longer needed and might screw things up.. */
1310 del_timer_sync(&priv->management_timer); 1310 del_timer_sync(&priv->management_timer);
@@ -1328,8 +1328,9 @@ int atmel_open(struct net_device *dev)
1328 priv->site_survey_state = SITE_SURVEY_IDLE; 1328 priv->site_survey_state = SITE_SURVEY_IDLE;
1329 priv->station_is_associated = 0; 1329 priv->station_is_associated = 0;
1330 1330
1331 if (!reset_atmel_card(dev)) 1331 err = reset_atmel_card(dev);
1332 return -EAGAIN; 1332 if (err)
1333 return err;
1333 1334
1334 if (priv->config_reg_domain) { 1335 if (priv->config_reg_domain) {
1335 priv->reg_domain = priv->config_reg_domain; 1336 priv->reg_domain = priv->config_reg_domain;
@@ -3061,12 +3062,20 @@ static void authenticate(struct atmel_private *priv, u16 frame_len)
3061 } 3062 }
3062 3063
3063 if (status == WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG) { 3064 if (status == WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG) {
3064 /* Do opensystem first, then try sharedkey */ 3065 /* Flip back and forth between WEP auth modes until the max
3066 * authentication tries has been exceeded.
3067 */
3065 if (system == WLAN_AUTH_OPEN) { 3068 if (system == WLAN_AUTH_OPEN) {
3066 priv->CurrentAuthentTransactionSeqNum = 0x001; 3069 priv->CurrentAuthentTransactionSeqNum = 0x001;
3067 priv->exclude_unencrypted = 1; 3070 priv->exclude_unencrypted = 1;
3068 send_authentication_request(priv, WLAN_AUTH_SHARED_KEY, NULL, 0); 3071 send_authentication_request(priv, WLAN_AUTH_SHARED_KEY, NULL, 0);
3069 return; 3072 return;
3073 } else if ( system == WLAN_AUTH_SHARED_KEY
3074 && priv->wep_is_on) {
3075 priv->CurrentAuthentTransactionSeqNum = 0x001;
3076 priv->exclude_unencrypted = 0;
3077 send_authentication_request(priv, WLAN_AUTH_OPEN, NULL, 0);
3078 return;
3070 } else if (priv->connect_to_any_BSS) { 3079 } else if (priv->connect_to_any_BSS) {
3071 int bss_index; 3080 int bss_index;
3072 3081
@@ -3580,12 +3589,12 @@ static int atmel_wakeup_firmware(struct atmel_private *priv)
3580 3589
3581 if (i == 0) { 3590 if (i == 0) {
3582 printk(KERN_ALERT "%s: MAC failed to boot.\n", priv->dev->name); 3591 printk(KERN_ALERT "%s: MAC failed to boot.\n", priv->dev->name);
3583 return 0; 3592 return -EIO;
3584 } 3593 }
3585 3594
3586 if ((priv->host_info_base = atmel_read16(priv->dev, MR2)) == 0xffff) { 3595 if ((priv->host_info_base = atmel_read16(priv->dev, MR2)) == 0xffff) {
3587 printk(KERN_ALERT "%s: card missing.\n", priv->dev->name); 3596 printk(KERN_ALERT "%s: card missing.\n", priv->dev->name);
3588 return 0; 3597 return -ENODEV;
3589 } 3598 }
3590 3599
3591 /* now check for completion of MAC initialization through 3600 /* now check for completion of MAC initialization through
@@ -3609,19 +3618,19 @@ static int atmel_wakeup_firmware(struct atmel_private *priv)
3609 if (i == 0) { 3618 if (i == 0) {
3610 printk(KERN_ALERT "%s: MAC failed to initialise.\n", 3619 printk(KERN_ALERT "%s: MAC failed to initialise.\n",
3611 priv->dev->name); 3620 priv->dev->name);
3612 return 0; 3621 return -EIO;
3613 } 3622 }
3614 3623
3615 /* Check for MAC_INIT_OK only on the register that the MAC_INIT_OK was set */ 3624 /* Check for MAC_INIT_OK only on the register that the MAC_INIT_OK was set */
3616 if ((mr3 & MAC_INIT_COMPLETE) && 3625 if ((mr3 & MAC_INIT_COMPLETE) &&
3617 !(atmel_read16(priv->dev, MR3) & MAC_INIT_OK)) { 3626 !(atmel_read16(priv->dev, MR3) & MAC_INIT_OK)) {
3618 printk(KERN_ALERT "%s: MAC failed MR3 self-test.\n", priv->dev->name); 3627 printk(KERN_ALERT "%s: MAC failed MR3 self-test.\n", priv->dev->name);
3619 return 0; 3628 return -EIO;
3620 } 3629 }
3621 if ((mr1 & MAC_INIT_COMPLETE) && 3630 if ((mr1 & MAC_INIT_COMPLETE) &&
3622 !(atmel_read16(priv->dev, MR1) & MAC_INIT_OK)) { 3631 !(atmel_read16(priv->dev, MR1) & MAC_INIT_OK)) {
3623 printk(KERN_ALERT "%s: MAC failed MR1 self-test.\n", priv->dev->name); 3632 printk(KERN_ALERT "%s: MAC failed MR1 self-test.\n", priv->dev->name);
3624 return 0; 3633 return -EIO;
3625 } 3634 }
3626 3635
3627 atmel_copy_to_host(priv->dev, (unsigned char *)iface, 3636 atmel_copy_to_host(priv->dev, (unsigned char *)iface,
@@ -3642,7 +3651,7 @@ static int atmel_wakeup_firmware(struct atmel_private *priv)
3642 iface->func_ctrl = le16_to_cpu(iface->func_ctrl); 3651 iface->func_ctrl = le16_to_cpu(iface->func_ctrl);
3643 iface->mac_status = le16_to_cpu(iface->mac_status); 3652 iface->mac_status = le16_to_cpu(iface->mac_status);
3644 3653
3645 return 1; 3654 return 0;
3646} 3655}
3647 3656
3648/* determine type of memory and MAC address */ 3657/* determine type of memory and MAC address */
@@ -3693,7 +3702,7 @@ static int probe_atmel_card(struct net_device *dev)
3693 /* Standard firmware in flash, boot it up and ask 3702 /* Standard firmware in flash, boot it up and ask
3694 for the Mac Address */ 3703 for the Mac Address */
3695 priv->card_type = CARD_TYPE_SPI_FLASH; 3704 priv->card_type = CARD_TYPE_SPI_FLASH;
3696 if (atmel_wakeup_firmware(priv)) { 3705 if (atmel_wakeup_firmware(priv) == 0) {
3697 atmel_get_mib(priv, Mac_Address_Mib_Type, 0, dev->dev_addr, 6); 3706 atmel_get_mib(priv, Mac_Address_Mib_Type, 0, dev->dev_addr, 6);
3698 3707
3699 /* got address, now squash it again until the network 3708 /* got address, now squash it again until the network
@@ -3835,6 +3844,7 @@ static int reset_atmel_card(struct net_device *dev)
3835 struct atmel_private *priv = netdev_priv(dev); 3844 struct atmel_private *priv = netdev_priv(dev);
3836 u8 configuration; 3845 u8 configuration;
3837 int old_state = priv->station_state; 3846 int old_state = priv->station_state;
3847 int err = 0;
3838 3848
3839 /* data to add to the firmware names, in priority order 3849 /* data to add to the firmware names, in priority order
3840 this implemenents firmware versioning */ 3850 this implemenents firmware versioning */
@@ -3868,11 +3878,12 @@ static int reset_atmel_card(struct net_device *dev)
3868 dev->name); 3878 dev->name);
3869 strcpy(priv->firmware_id, "atmel_at76c502.bin"); 3879 strcpy(priv->firmware_id, "atmel_at76c502.bin");
3870 } 3880 }
3871 if (request_firmware(&fw_entry, priv->firmware_id, priv->sys_dev) != 0) { 3881 err = request_firmware(&fw_entry, priv->firmware_id, priv->sys_dev);
3882 if (err != 0) {
3872 printk(KERN_ALERT 3883 printk(KERN_ALERT
3873 "%s: firmware %s is missing, cannot continue.\n", 3884 "%s: firmware %s is missing, cannot continue.\n",
3874 dev->name, priv->firmware_id); 3885 dev->name, priv->firmware_id);
3875 return 0; 3886 return err;
3876 } 3887 }
3877 } else { 3888 } else {
3878 int fw_index = 0; 3889 int fw_index = 0;
@@ -3901,7 +3912,7 @@ static int reset_atmel_card(struct net_device *dev)
3901 "%s: firmware %s is missing, cannot start.\n", 3912 "%s: firmware %s is missing, cannot start.\n",
3902 dev->name, priv->firmware_id); 3913 dev->name, priv->firmware_id);
3903 priv->firmware_id[0] = '\0'; 3914 priv->firmware_id[0] = '\0';
3904 return 0; 3915 return -ENOENT;
3905 } 3916 }
3906 } 3917 }
3907 3918
@@ -3926,8 +3937,9 @@ static int reset_atmel_card(struct net_device *dev)
3926 release_firmware(fw_entry); 3937 release_firmware(fw_entry);
3927 } 3938 }
3928 3939
3929 if (!atmel_wakeup_firmware(priv)) 3940 err = atmel_wakeup_firmware(priv);
3930 return 0; 3941 if (err != 0)
3942 return err;
3931 3943
3932 /* Check the version and set the correct flag for wpa stuff, 3944 /* Check the version and set the correct flag for wpa stuff,
3933 old and new firmware is incompatible. 3945 old and new firmware is incompatible.
@@ -3968,10 +3980,9 @@ static int reset_atmel_card(struct net_device *dev)
3968 if (!priv->radio_on_broken) { 3980 if (!priv->radio_on_broken) {
3969 if (atmel_send_command_wait(priv, CMD_EnableRadio, NULL, 0) == 3981 if (atmel_send_command_wait(priv, CMD_EnableRadio, NULL, 0) ==
3970 CMD_STATUS_REJECTED_RADIO_OFF) { 3982 CMD_STATUS_REJECTED_RADIO_OFF) {
3971 printk(KERN_INFO 3983 printk(KERN_INFO "%s: cannot turn the radio on.\n",
3972 "%s: cannot turn the radio on. (Hey radio, you're beautiful!)\n",
3973 dev->name); 3984 dev->name);
3974 return 0; 3985 return -EIO;
3975 } 3986 }
3976 } 3987 }
3977 3988
@@ -4006,7 +4017,7 @@ static int reset_atmel_card(struct net_device *dev)
4006 wireless_send_event(priv->dev, SIOCGIWAP, &wrqu, NULL); 4017 wireless_send_event(priv->dev, SIOCGIWAP, &wrqu, NULL);
4007 } 4018 }
4008 4019
4009 return 1; 4020 return 0;
4010} 4021}
4011 4022
4012static void atmel_send_command(struct atmel_private *priv, int command, 4023static void atmel_send_command(struct atmel_private *priv, int command,
diff --git a/drivers/s390/net/claw.c b/drivers/s390/net/claw.c
index a08b1682c8e8..e10ac9ab2d44 100644
--- a/drivers/s390/net/claw.c
+++ b/drivers/s390/net/claw.c
@@ -133,14 +133,14 @@ claw_register_debug_facility(void)
133static inline void 133static inline void
134claw_set_busy(struct net_device *dev) 134claw_set_busy(struct net_device *dev)
135{ 135{
136 ((struct claw_privbk *) dev->priv)->tbusy=1; 136 ((struct claw_privbk *)dev->ml_priv)->tbusy = 1;
137 eieio(); 137 eieio();
138} 138}
139 139
140static inline void 140static inline void
141claw_clear_busy(struct net_device *dev) 141claw_clear_busy(struct net_device *dev)
142{ 142{
143 clear_bit(0, &(((struct claw_privbk *) dev->priv)->tbusy)); 143 clear_bit(0, &(((struct claw_privbk *) dev->ml_priv)->tbusy));
144 netif_wake_queue(dev); 144 netif_wake_queue(dev);
145 eieio(); 145 eieio();
146} 146}
@@ -149,20 +149,20 @@ static inline int
149claw_check_busy(struct net_device *dev) 149claw_check_busy(struct net_device *dev)
150{ 150{
151 eieio(); 151 eieio();
152 return ((struct claw_privbk *) dev->priv)->tbusy; 152 return ((struct claw_privbk *) dev->ml_priv)->tbusy;
153} 153}
154 154
155static inline void 155static inline void
156claw_setbit_busy(int nr,struct net_device *dev) 156claw_setbit_busy(int nr,struct net_device *dev)
157{ 157{
158 netif_stop_queue(dev); 158 netif_stop_queue(dev);
159 set_bit(nr, (void *)&(((struct claw_privbk *)dev->priv)->tbusy)); 159 set_bit(nr, (void *)&(((struct claw_privbk *)dev->ml_priv)->tbusy));
160} 160}
161 161
162static inline void 162static inline void
163claw_clearbit_busy(int nr,struct net_device *dev) 163claw_clearbit_busy(int nr,struct net_device *dev)
164{ 164{
165 clear_bit(nr,(void *)&(((struct claw_privbk *)dev->priv)->tbusy)); 165 clear_bit(nr, (void *)&(((struct claw_privbk *)dev->ml_priv)->tbusy));
166 netif_wake_queue(dev); 166 netif_wake_queue(dev);
167} 167}
168 168
@@ -171,7 +171,7 @@ claw_test_and_setbit_busy(int nr,struct net_device *dev)
171{ 171{
172 netif_stop_queue(dev); 172 netif_stop_queue(dev);
173 return test_and_set_bit(nr, 173 return test_and_set_bit(nr,
174 (void *)&(((struct claw_privbk *) dev->priv)->tbusy)); 174 (void *)&(((struct claw_privbk *) dev->ml_priv)->tbusy));
175} 175}
176 176
177 177
@@ -271,6 +271,7 @@ claw_probe(struct ccwgroup_device *cgdev)
271 if (!get_device(&cgdev->dev)) 271 if (!get_device(&cgdev->dev))
272 return -ENODEV; 272 return -ENODEV;
273 privptr = kzalloc(sizeof(struct claw_privbk), GFP_KERNEL); 273 privptr = kzalloc(sizeof(struct claw_privbk), GFP_KERNEL);
274 cgdev->dev.driver_data = privptr;
274 if (privptr == NULL) { 275 if (privptr == NULL) {
275 probe_error(cgdev); 276 probe_error(cgdev);
276 put_device(&cgdev->dev); 277 put_device(&cgdev->dev);
@@ -305,7 +306,6 @@ claw_probe(struct ccwgroup_device *cgdev)
305 privptr->p_env->p_priv = privptr; 306 privptr->p_env->p_priv = privptr;
306 cgdev->cdev[0]->handler = claw_irq_handler; 307 cgdev->cdev[0]->handler = claw_irq_handler;
307 cgdev->cdev[1]->handler = claw_irq_handler; 308 cgdev->cdev[1]->handler = claw_irq_handler;
308 cgdev->dev.driver_data = privptr;
309 CLAW_DBF_TEXT(2, setup, "prbext 0"); 309 CLAW_DBF_TEXT(2, setup, "prbext 0");
310 310
311 return 0; 311 return 0;
@@ -319,7 +319,7 @@ static int
319claw_tx(struct sk_buff *skb, struct net_device *dev) 319claw_tx(struct sk_buff *skb, struct net_device *dev)
320{ 320{
321 int rc; 321 int rc;
322 struct claw_privbk *privptr=dev->priv; 322 struct claw_privbk *privptr = dev->ml_priv;
323 unsigned long saveflags; 323 unsigned long saveflags;
324 struct chbk *p_ch; 324 struct chbk *p_ch;
325 325
@@ -404,7 +404,7 @@ claw_pack_skb(struct claw_privbk *privptr)
404static int 404static int
405claw_change_mtu(struct net_device *dev, int new_mtu) 405claw_change_mtu(struct net_device *dev, int new_mtu)
406{ 406{
407 struct claw_privbk *privptr=dev->priv; 407 struct claw_privbk *privptr = dev->ml_priv;
408 int buff_size; 408 int buff_size;
409 CLAW_DBF_TEXT(4, trace, "setmtu"); 409 CLAW_DBF_TEXT(4, trace, "setmtu");
410 buff_size = privptr->p_env->write_size; 410 buff_size = privptr->p_env->write_size;
@@ -434,7 +434,7 @@ claw_open(struct net_device *dev)
434 struct ccwbk *p_buf; 434 struct ccwbk *p_buf;
435 435
436 CLAW_DBF_TEXT(4, trace, "open"); 436 CLAW_DBF_TEXT(4, trace, "open");
437 privptr = (struct claw_privbk *)dev->priv; 437 privptr = (struct claw_privbk *)dev->ml_priv;
438 /* allocate and initialize CCW blocks */ 438 /* allocate and initialize CCW blocks */
439 if (privptr->buffs_alloc == 0) { 439 if (privptr->buffs_alloc == 0) {
440 rc=init_ccw_bk(dev); 440 rc=init_ccw_bk(dev);
@@ -780,7 +780,7 @@ claw_irq_tasklet ( unsigned long data )
780 p_ch = (struct chbk *) data; 780 p_ch = (struct chbk *) data;
781 dev = (struct net_device *)p_ch->ndev; 781 dev = (struct net_device *)p_ch->ndev;
782 CLAW_DBF_TEXT(4, trace, "IRQtask"); 782 CLAW_DBF_TEXT(4, trace, "IRQtask");
783 privptr = (struct claw_privbk *) dev->priv; 783 privptr = (struct claw_privbk *)dev->ml_priv;
784 unpack_read(dev); 784 unpack_read(dev);
785 clear_bit(CLAW_BH_ACTIVE, (void *)&p_ch->flag_a); 785 clear_bit(CLAW_BH_ACTIVE, (void *)&p_ch->flag_a);
786 CLAW_DBF_TEXT(4, trace, "TskletXt"); 786 CLAW_DBF_TEXT(4, trace, "TskletXt");
@@ -805,7 +805,7 @@ claw_release(struct net_device *dev)
805 805
806 if (!dev) 806 if (!dev)
807 return 0; 807 return 0;
808 privptr = (struct claw_privbk *) dev->priv; 808 privptr = (struct claw_privbk *)dev->ml_priv;
809 if (!privptr) 809 if (!privptr)
810 return 0; 810 return 0;
811 CLAW_DBF_TEXT(4, trace, "release"); 811 CLAW_DBF_TEXT(4, trace, "release");
@@ -960,7 +960,7 @@ claw_write_next ( struct chbk * p_ch )
960 if (p_ch->claw_state == CLAW_STOP) 960 if (p_ch->claw_state == CLAW_STOP)
961 return; 961 return;
962 dev = (struct net_device *) p_ch->ndev; 962 dev = (struct net_device *) p_ch->ndev;
963 privptr = (struct claw_privbk *) dev->priv; 963 privptr = (struct claw_privbk *) dev->ml_priv;
964 claw_free_wrt_buf( dev ); 964 claw_free_wrt_buf( dev );
965 if ((privptr->write_free_count > 0) && 965 if ((privptr->write_free_count > 0) &&
966 !skb_queue_empty(&p_ch->collect_queue)) { 966 !skb_queue_empty(&p_ch->collect_queue)) {
@@ -1042,7 +1042,7 @@ add_claw_reads(struct net_device *dev, struct ccwbk* p_first,
1042 struct ccw1 temp_ccw; 1042 struct ccw1 temp_ccw;
1043 struct endccw * p_end; 1043 struct endccw * p_end;
1044 CLAW_DBF_TEXT(4, trace, "addreads"); 1044 CLAW_DBF_TEXT(4, trace, "addreads");
1045 privptr = dev->priv; 1045 privptr = dev->ml_priv;
1046 p_end = privptr->p_end_ccw; 1046 p_end = privptr->p_end_ccw;
1047 1047
1048 /* first CCW and last CCW contains a new set of read channel programs 1048 /* first CCW and last CCW contains a new set of read channel programs
@@ -1212,7 +1212,7 @@ find_link(struct net_device *dev, char *host_name, char *ws_name )
1212 int rc=0; 1212 int rc=0;
1213 1213
1214 CLAW_DBF_TEXT(2, setup, "findlink"); 1214 CLAW_DBF_TEXT(2, setup, "findlink");
1215 privptr=dev->priv; 1215 privptr = dev->ml_priv;
1216 p_env=privptr->p_env; 1216 p_env=privptr->p_env;
1217 switch (p_env->packing) 1217 switch (p_env->packing)
1218 { 1218 {
@@ -1264,7 +1264,7 @@ claw_hw_tx(struct sk_buff *skb, struct net_device *dev, long linkid)
1264 struct chbk *ch; 1264 struct chbk *ch;
1265 1265
1266 CLAW_DBF_TEXT(4, trace, "hw_tx"); 1266 CLAW_DBF_TEXT(4, trace, "hw_tx");
1267 privptr = (struct claw_privbk *) (dev->priv); 1267 privptr = (struct claw_privbk *)(dev->ml_priv);
1268 p_ch=(struct chbk *)&privptr->channel[WRITE]; 1268 p_ch=(struct chbk *)&privptr->channel[WRITE];
1269 p_env =privptr->p_env; 1269 p_env =privptr->p_env;
1270 claw_free_wrt_buf(dev); /* Clean up free chain if posible */ 1270 claw_free_wrt_buf(dev); /* Clean up free chain if posible */
@@ -1483,8 +1483,8 @@ init_ccw_bk(struct net_device *dev)
1483 struct ccwbk*p_last_CCWB; 1483 struct ccwbk*p_last_CCWB;
1484 struct ccwbk*p_first_CCWB; 1484 struct ccwbk*p_first_CCWB;
1485 struct endccw *p_endccw=NULL; 1485 struct endccw *p_endccw=NULL;
1486 addr_t real_address; 1486 addr_t real_address;
1487 struct claw_privbk *privptr=dev->priv; 1487 struct claw_privbk *privptr = dev->ml_priv;
1488 struct clawh *pClawH=NULL; 1488 struct clawh *pClawH=NULL;
1489 addr_t real_TIC_address; 1489 addr_t real_TIC_address;
1490 int i,j; 1490 int i,j;
@@ -1960,19 +1960,16 @@ init_ccw_bk(struct net_device *dev)
1960static void 1960static void
1961probe_error( struct ccwgroup_device *cgdev) 1961probe_error( struct ccwgroup_device *cgdev)
1962{ 1962{
1963 struct claw_privbk *privptr; 1963 struct claw_privbk *privptr;
1964 1964
1965 CLAW_DBF_TEXT(4, trace, "proberr"); 1965 CLAW_DBF_TEXT(4, trace, "proberr");
1966 privptr=(struct claw_privbk *)cgdev->dev.driver_data; 1966 privptr = (struct claw_privbk *) cgdev->dev.driver_data;
1967 if (privptr!=NULL) { 1967 if (privptr != NULL) {
1968 cgdev->dev.driver_data = NULL;
1968 kfree(privptr->p_env); 1969 kfree(privptr->p_env);
1969 privptr->p_env=NULL; 1970 kfree(privptr->p_mtc_envelope);
1970 kfree(privptr->p_mtc_envelope); 1971 kfree(privptr);
1971 privptr->p_mtc_envelope=NULL; 1972 }
1972 kfree(privptr);
1973 privptr=NULL;
1974 }
1975 return;
1976} /* probe_error */ 1973} /* probe_error */
1977 1974
1978/*-------------------------------------------------------------------* 1975/*-------------------------------------------------------------------*
@@ -2000,7 +1997,7 @@ claw_process_control( struct net_device *dev, struct ccwbk * p_ccw)
2000 CLAW_DBF_TEXT(2, setup, "clw_cntl"); 1997 CLAW_DBF_TEXT(2, setup, "clw_cntl");
2001 udelay(1000); /* Wait a ms for the control packets to 1998 udelay(1000); /* Wait a ms for the control packets to
2002 *catch up to each other */ 1999 *catch up to each other */
2003 privptr=dev->priv; 2000 privptr = dev->ml_priv;
2004 p_env=privptr->p_env; 2001 p_env=privptr->p_env;
2005 tdev = &privptr->channel[READ].cdev->dev; 2002 tdev = &privptr->channel[READ].cdev->dev;
2006 memcpy( &temp_host_name, p_env->host_name, 8); 2003 memcpy( &temp_host_name, p_env->host_name, 8);
@@ -2278,7 +2275,7 @@ claw_send_control(struct net_device *dev, __u8 type, __u8 link,
2278 struct sk_buff *skb; 2275 struct sk_buff *skb;
2279 2276
2280 CLAW_DBF_TEXT(2, setup, "sndcntl"); 2277 CLAW_DBF_TEXT(2, setup, "sndcntl");
2281 privptr=dev->priv; 2278 privptr = dev->ml_priv;
2282 p_ctl=(struct clawctl *)&privptr->ctl_bk; 2279 p_ctl=(struct clawctl *)&privptr->ctl_bk;
2283 2280
2284 p_ctl->command=type; 2281 p_ctl->command=type;
@@ -2348,7 +2345,7 @@ static int
2348claw_snd_conn_req(struct net_device *dev, __u8 link) 2345claw_snd_conn_req(struct net_device *dev, __u8 link)
2349{ 2346{
2350 int rc; 2347 int rc;
2351 struct claw_privbk *privptr=dev->priv; 2348 struct claw_privbk *privptr = dev->ml_priv;
2352 struct clawctl *p_ctl; 2349 struct clawctl *p_ctl;
2353 2350
2354 CLAW_DBF_TEXT(2, setup, "snd_conn"); 2351 CLAW_DBF_TEXT(2, setup, "snd_conn");
@@ -2408,7 +2405,7 @@ claw_snd_sys_validate_rsp(struct net_device *dev,
2408 int rc; 2405 int rc;
2409 2406
2410 CLAW_DBF_TEXT(2, setup, "chkresp"); 2407 CLAW_DBF_TEXT(2, setup, "chkresp");
2411 privptr = dev->priv; 2408 privptr = dev->ml_priv;
2412 p_env=privptr->p_env; 2409 p_env=privptr->p_env;
2413 rc=claw_send_control(dev, SYSTEM_VALIDATE_RESPONSE, 2410 rc=claw_send_control(dev, SYSTEM_VALIDATE_RESPONSE,
2414 p_ctl->linkid, 2411 p_ctl->linkid,
@@ -2446,7 +2443,7 @@ net_device_stats *claw_stats(struct net_device *dev)
2446 struct claw_privbk *privptr; 2443 struct claw_privbk *privptr;
2447 2444
2448 CLAW_DBF_TEXT(4, trace, "stats"); 2445 CLAW_DBF_TEXT(4, trace, "stats");
2449 privptr = dev->priv; 2446 privptr = dev->ml_priv;
2450 return &privptr->stats; 2447 return &privptr->stats;
2451} /* end of claw_stats */ 2448} /* end of claw_stats */
2452 2449
@@ -2482,7 +2479,7 @@ unpack_read(struct net_device *dev )
2482 p_last_ccw=NULL; 2479 p_last_ccw=NULL;
2483 p_packh=NULL; 2480 p_packh=NULL;
2484 p_packd=NULL; 2481 p_packd=NULL;
2485 privptr=dev->priv; 2482 privptr = dev->ml_priv;
2486 2483
2487 p_dev = &privptr->channel[READ].cdev->dev; 2484 p_dev = &privptr->channel[READ].cdev->dev;
2488 p_env = privptr->p_env; 2485 p_env = privptr->p_env;
@@ -2651,7 +2648,7 @@ claw_strt_read (struct net_device *dev, int lock )
2651 int rc = 0; 2648 int rc = 0;
2652 __u32 parm; 2649 __u32 parm;
2653 unsigned long saveflags = 0; 2650 unsigned long saveflags = 0;
2654 struct claw_privbk *privptr=dev->priv; 2651 struct claw_privbk *privptr = dev->ml_priv;
2655 struct ccwbk*p_ccwbk; 2652 struct ccwbk*p_ccwbk;
2656 struct chbk *p_ch; 2653 struct chbk *p_ch;
2657 struct clawh *p_clawh; 2654 struct clawh *p_clawh;
@@ -2708,7 +2705,7 @@ claw_strt_out_IO( struct net_device *dev )
2708 if (!dev) { 2705 if (!dev) {
2709 return; 2706 return;
2710 } 2707 }
2711 privptr=(struct claw_privbk *)dev->priv; 2708 privptr = (struct claw_privbk *)dev->ml_priv;
2712 p_ch=&privptr->channel[WRITE]; 2709 p_ch=&privptr->channel[WRITE];
2713 2710
2714 CLAW_DBF_TEXT(4, trace, "strt_io"); 2711 CLAW_DBF_TEXT(4, trace, "strt_io");
@@ -2741,7 +2738,7 @@ static void
2741claw_free_wrt_buf( struct net_device *dev ) 2738claw_free_wrt_buf( struct net_device *dev )
2742{ 2739{
2743 2740
2744 struct claw_privbk *privptr=(struct claw_privbk *)dev->priv; 2741 struct claw_privbk *privptr = (struct claw_privbk *)dev->ml_priv;
2745 struct ccwbk*p_first_ccw; 2742 struct ccwbk*p_first_ccw;
2746 struct ccwbk*p_last_ccw; 2743 struct ccwbk*p_last_ccw;
2747 struct ccwbk*p_this_ccw; 2744 struct ccwbk*p_this_ccw;
@@ -2798,13 +2795,13 @@ claw_free_netdevice(struct net_device * dev, int free_dev)
2798 if (!dev) 2795 if (!dev)
2799 return; 2796 return;
2800 CLAW_DBF_TEXT_(2, setup, "%s", dev->name); 2797 CLAW_DBF_TEXT_(2, setup, "%s", dev->name);
2801 privptr = dev->priv; 2798 privptr = dev->ml_priv;
2802 if (dev->flags & IFF_RUNNING) 2799 if (dev->flags & IFF_RUNNING)
2803 claw_release(dev); 2800 claw_release(dev);
2804 if (privptr) { 2801 if (privptr) {
2805 privptr->channel[READ].ndev = NULL; /* say it's free */ 2802 privptr->channel[READ].ndev = NULL; /* say it's free */
2806 } 2803 }
2807 dev->priv=NULL; 2804 dev->ml_priv = NULL;
2808#ifdef MODULE 2805#ifdef MODULE
2809 if (free_dev) { 2806 if (free_dev) {
2810 free_netdev(dev); 2807 free_netdev(dev);
@@ -2921,7 +2918,7 @@ claw_new_device(struct ccwgroup_device *cgdev)
2921 printk(KERN_WARNING "%s:alloc_netdev failed\n",__func__); 2918 printk(KERN_WARNING "%s:alloc_netdev failed\n",__func__);
2922 goto out; 2919 goto out;
2923 } 2920 }
2924 dev->priv = privptr; 2921 dev->ml_priv = privptr;
2925 cgdev->dev.driver_data = privptr; 2922 cgdev->dev.driver_data = privptr;
2926 cgdev->cdev[READ]->dev.driver_data = privptr; 2923 cgdev->cdev[READ]->dev.driver_data = privptr;
2927 cgdev->cdev[WRITE]->dev.driver_data = privptr; 2924 cgdev->cdev[WRITE]->dev.driver_data = privptr;
@@ -3002,7 +2999,7 @@ claw_shutdown_device(struct ccwgroup_device *cgdev)
3002 ret = claw_release(ndev); 2999 ret = claw_release(ndev);
3003 ndev->flags &=~IFF_RUNNING; 3000 ndev->flags &=~IFF_RUNNING;
3004 unregister_netdev(ndev); 3001 unregister_netdev(ndev);
3005 ndev->priv = NULL; /* cgdev data, not ndev's to free */ 3002 ndev->ml_priv = NULL; /* cgdev data, not ndev's to free */
3006 claw_free_netdevice(ndev, 1); 3003 claw_free_netdevice(ndev, 1);
3007 priv->channel[READ].ndev = NULL; 3004 priv->channel[READ].ndev = NULL;
3008 priv->channel[WRITE].ndev = NULL; 3005 priv->channel[WRITE].ndev = NULL;
diff --git a/drivers/s390/net/ctcm_fsms.c b/drivers/s390/net/ctcm_fsms.c
index 0b4e6253abe4..42776550acfd 100644
--- a/drivers/s390/net/ctcm_fsms.c
+++ b/drivers/s390/net/ctcm_fsms.c
@@ -245,7 +245,7 @@ static void chx_txdone(fsm_instance *fi, int event, void *arg)
245{ 245{
246 struct channel *ch = arg; 246 struct channel *ch = arg;
247 struct net_device *dev = ch->netdev; 247 struct net_device *dev = ch->netdev;
248 struct ctcm_priv *priv = dev->priv; 248 struct ctcm_priv *priv = dev->ml_priv;
249 struct sk_buff *skb; 249 struct sk_buff *skb;
250 int first = 1; 250 int first = 1;
251 int i; 251 int i;
@@ -336,7 +336,7 @@ void ctcm_chx_txidle(fsm_instance *fi, int event, void *arg)
336{ 336{
337 struct channel *ch = arg; 337 struct channel *ch = arg;
338 struct net_device *dev = ch->netdev; 338 struct net_device *dev = ch->netdev;
339 struct ctcm_priv *priv = dev->priv; 339 struct ctcm_priv *priv = dev->ml_priv;
340 340
341 CTCM_PR_DEBUG("%s(%s): %s\n", __func__, ch->id, dev->name); 341 CTCM_PR_DEBUG("%s(%s): %s\n", __func__, ch->id, dev->name);
342 342
@@ -357,7 +357,7 @@ static void chx_rx(fsm_instance *fi, int event, void *arg)
357{ 357{
358 struct channel *ch = arg; 358 struct channel *ch = arg;
359 struct net_device *dev = ch->netdev; 359 struct net_device *dev = ch->netdev;
360 struct ctcm_priv *priv = dev->priv; 360 struct ctcm_priv *priv = dev->ml_priv;
361 int len = ch->max_bufsize - ch->irb->scsw.cmd.count; 361 int len = ch->max_bufsize - ch->irb->scsw.cmd.count;
362 struct sk_buff *skb = ch->trans_skb; 362 struct sk_buff *skb = ch->trans_skb;
363 __u16 block_len = *((__u16 *)skb->data); 363 __u16 block_len = *((__u16 *)skb->data);
@@ -459,7 +459,7 @@ static void chx_firstio(fsm_instance *fi, int event, void *arg)
459 chx_rxidle(fi, event, arg); 459 chx_rxidle(fi, event, arg);
460 } else { 460 } else {
461 struct net_device *dev = ch->netdev; 461 struct net_device *dev = ch->netdev;
462 struct ctcm_priv *priv = dev->priv; 462 struct ctcm_priv *priv = dev->ml_priv;
463 fsm_newstate(fi, CTC_STATE_TXIDLE); 463 fsm_newstate(fi, CTC_STATE_TXIDLE);
464 fsm_event(priv->fsm, DEV_EVENT_TXUP, dev); 464 fsm_event(priv->fsm, DEV_EVENT_TXUP, dev);
465 } 465 }
@@ -496,7 +496,7 @@ static void chx_firstio(fsm_instance *fi, int event, void *arg)
496 if ((CHANNEL_DIRECTION(ch->flags) == READ) && 496 if ((CHANNEL_DIRECTION(ch->flags) == READ) &&
497 (ch->protocol == CTCM_PROTO_S390)) { 497 (ch->protocol == CTCM_PROTO_S390)) {
498 struct net_device *dev = ch->netdev; 498 struct net_device *dev = ch->netdev;
499 struct ctcm_priv *priv = dev->priv; 499 struct ctcm_priv *priv = dev->ml_priv;
500 fsm_event(priv->fsm, DEV_EVENT_RXUP, dev); 500 fsm_event(priv->fsm, DEV_EVENT_RXUP, dev);
501 } 501 }
502} 502}
@@ -514,7 +514,7 @@ static void chx_rxidle(fsm_instance *fi, int event, void *arg)
514{ 514{
515 struct channel *ch = arg; 515 struct channel *ch = arg;
516 struct net_device *dev = ch->netdev; 516 struct net_device *dev = ch->netdev;
517 struct ctcm_priv *priv = dev->priv; 517 struct ctcm_priv *priv = dev->ml_priv;
518 __u16 buflen; 518 __u16 buflen;
519 int rc; 519 int rc;
520 520
@@ -699,7 +699,7 @@ static void ctcm_chx_cleanup(fsm_instance *fi, int state,
699 struct channel *ch) 699 struct channel *ch)
700{ 700{
701 struct net_device *dev = ch->netdev; 701 struct net_device *dev = ch->netdev;
702 struct ctcm_priv *priv = dev->priv; 702 struct ctcm_priv *priv = dev->ml_priv;
703 703
704 CTCM_DBF_TEXT_(SETUP, CTC_DBF_NOTICE, 704 CTCM_DBF_TEXT_(SETUP, CTC_DBF_NOTICE,
705 "%s(%s): %s[%d]\n", 705 "%s(%s): %s[%d]\n",
@@ -784,7 +784,7 @@ static void ctcm_chx_setuperr(fsm_instance *fi, int event, void *arg)
784{ 784{
785 struct channel *ch = arg; 785 struct channel *ch = arg;
786 struct net_device *dev = ch->netdev; 786 struct net_device *dev = ch->netdev;
787 struct ctcm_priv *priv = dev->priv; 787 struct ctcm_priv *priv = dev->ml_priv;
788 788
789 /* 789 /*
790 * Special case: Got UC_RCRESET on setmode. 790 * Special case: Got UC_RCRESET on setmode.
@@ -874,7 +874,7 @@ static void ctcm_chx_rxiniterr(fsm_instance *fi, int event, void *arg)
874{ 874{
875 struct channel *ch = arg; 875 struct channel *ch = arg;
876 struct net_device *dev = ch->netdev; 876 struct net_device *dev = ch->netdev;
877 struct ctcm_priv *priv = dev->priv; 877 struct ctcm_priv *priv = dev->ml_priv;
878 878
879 if (event == CTC_EVENT_TIMER) { 879 if (event == CTC_EVENT_TIMER) {
880 if (!IS_MPCDEV(dev)) 880 if (!IS_MPCDEV(dev))
@@ -902,7 +902,7 @@ static void ctcm_chx_rxinitfail(fsm_instance *fi, int event, void *arg)
902{ 902{
903 struct channel *ch = arg; 903 struct channel *ch = arg;
904 struct net_device *dev = ch->netdev; 904 struct net_device *dev = ch->netdev;
905 struct ctcm_priv *priv = dev->priv; 905 struct ctcm_priv *priv = dev->ml_priv;
906 906
907 CTCM_DBF_TEXT_(ERROR, CTC_DBF_ERROR, 907 CTCM_DBF_TEXT_(ERROR, CTC_DBF_ERROR,
908 "%s(%s): RX %s busy, init. fail", 908 "%s(%s): RX %s busy, init. fail",
@@ -923,7 +923,7 @@ static void ctcm_chx_rxdisc(fsm_instance *fi, int event, void *arg)
923 struct channel *ch = arg; 923 struct channel *ch = arg;
924 struct channel *ch2; 924 struct channel *ch2;
925 struct net_device *dev = ch->netdev; 925 struct net_device *dev = ch->netdev;
926 struct ctcm_priv *priv = dev->priv; 926 struct ctcm_priv *priv = dev->ml_priv;
927 927
928 CTCM_DBF_TEXT_(TRACE, CTC_DBF_NOTICE, 928 CTCM_DBF_TEXT_(TRACE, CTC_DBF_NOTICE,
929 "%s: %s: remote disconnect - re-init ...", 929 "%s: %s: remote disconnect - re-init ...",
@@ -954,7 +954,7 @@ static void ctcm_chx_txiniterr(fsm_instance *fi, int event, void *arg)
954{ 954{
955 struct channel *ch = arg; 955 struct channel *ch = arg;
956 struct net_device *dev = ch->netdev; 956 struct net_device *dev = ch->netdev;
957 struct ctcm_priv *priv = dev->priv; 957 struct ctcm_priv *priv = dev->ml_priv;
958 958
959 if (event == CTC_EVENT_TIMER) { 959 if (event == CTC_EVENT_TIMER) {
960 fsm_deltimer(&ch->timer); 960 fsm_deltimer(&ch->timer);
@@ -984,7 +984,7 @@ static void ctcm_chx_txretry(fsm_instance *fi, int event, void *arg)
984{ 984{
985 struct channel *ch = arg; 985 struct channel *ch = arg;
986 struct net_device *dev = ch->netdev; 986 struct net_device *dev = ch->netdev;
987 struct ctcm_priv *priv = dev->priv; 987 struct ctcm_priv *priv = dev->ml_priv;
988 struct sk_buff *skb; 988 struct sk_buff *skb;
989 989
990 CTCM_PR_DEBUG("Enter: %s: cp=%i ch=0x%p id=%s\n", 990 CTCM_PR_DEBUG("Enter: %s: cp=%i ch=0x%p id=%s\n",
@@ -1057,7 +1057,7 @@ static void ctcm_chx_iofatal(fsm_instance *fi, int event, void *arg)
1057{ 1057{
1058 struct channel *ch = arg; 1058 struct channel *ch = arg;
1059 struct net_device *dev = ch->netdev; 1059 struct net_device *dev = ch->netdev;
1060 struct ctcm_priv *priv = dev->priv; 1060 struct ctcm_priv *priv = dev->ml_priv;
1061 int rd = CHANNEL_DIRECTION(ch->flags); 1061 int rd = CHANNEL_DIRECTION(ch->flags);
1062 1062
1063 fsm_deltimer(&ch->timer); 1063 fsm_deltimer(&ch->timer);
@@ -1207,7 +1207,7 @@ static void ctcmpc_chx_txdone(fsm_instance *fi, int event, void *arg)
1207{ 1207{
1208 struct channel *ch = arg; 1208 struct channel *ch = arg;
1209 struct net_device *dev = ch->netdev; 1209 struct net_device *dev = ch->netdev;
1210 struct ctcm_priv *priv = dev->priv; 1210 struct ctcm_priv *priv = dev->ml_priv;
1211 struct mpc_group *grp = priv->mpcg; 1211 struct mpc_group *grp = priv->mpcg;
1212 struct sk_buff *skb; 1212 struct sk_buff *skb;
1213 int first = 1; 1213 int first = 1;
@@ -1368,7 +1368,7 @@ static void ctcmpc_chx_rx(fsm_instance *fi, int event, void *arg)
1368{ 1368{
1369 struct channel *ch = arg; 1369 struct channel *ch = arg;
1370 struct net_device *dev = ch->netdev; 1370 struct net_device *dev = ch->netdev;
1371 struct ctcm_priv *priv = dev->priv; 1371 struct ctcm_priv *priv = dev->ml_priv;
1372 struct mpc_group *grp = priv->mpcg; 1372 struct mpc_group *grp = priv->mpcg;
1373 struct sk_buff *skb = ch->trans_skb; 1373 struct sk_buff *skb = ch->trans_skb;
1374 struct sk_buff *new_skb; 1374 struct sk_buff *new_skb;
@@ -1471,7 +1471,7 @@ static void ctcmpc_chx_firstio(fsm_instance *fi, int event, void *arg)
1471{ 1471{
1472 struct channel *ch = arg; 1472 struct channel *ch = arg;
1473 struct net_device *dev = ch->netdev; 1473 struct net_device *dev = ch->netdev;
1474 struct ctcm_priv *priv = dev->priv; 1474 struct ctcm_priv *priv = dev->ml_priv;
1475 struct mpc_group *gptr = priv->mpcg; 1475 struct mpc_group *gptr = priv->mpcg;
1476 1476
1477 CTCM_PR_DEBUG("Enter %s: id=%s, ch=0x%p\n", 1477 CTCM_PR_DEBUG("Enter %s: id=%s, ch=0x%p\n",
@@ -1525,7 +1525,7 @@ void ctcmpc_chx_rxidle(fsm_instance *fi, int event, void *arg)
1525{ 1525{
1526 struct channel *ch = arg; 1526 struct channel *ch = arg;
1527 struct net_device *dev = ch->netdev; 1527 struct net_device *dev = ch->netdev;
1528 struct ctcm_priv *priv = dev->priv; 1528 struct ctcm_priv *priv = dev->ml_priv;
1529 struct mpc_group *grp = priv->mpcg; 1529 struct mpc_group *grp = priv->mpcg;
1530 int rc; 1530 int rc;
1531 unsigned long saveflags = 0; /* avoids compiler warning */ 1531 unsigned long saveflags = 0; /* avoids compiler warning */
@@ -1580,7 +1580,7 @@ static void ctcmpc_chx_attn(fsm_instance *fsm, int event, void *arg)
1580{ 1580{
1581 struct channel *ch = arg; 1581 struct channel *ch = arg;
1582 struct net_device *dev = ch->netdev; 1582 struct net_device *dev = ch->netdev;
1583 struct ctcm_priv *priv = dev->priv; 1583 struct ctcm_priv *priv = dev->ml_priv;
1584 struct mpc_group *grp = priv->mpcg; 1584 struct mpc_group *grp = priv->mpcg;
1585 1585
1586 CTCM_PR_DEBUG("%s(%s): %s(ch=0x%p), cp=%i, ChStat:%s, GrpStat:%s\n", 1586 CTCM_PR_DEBUG("%s(%s): %s(ch=0x%p), cp=%i, ChStat:%s, GrpStat:%s\n",
@@ -1639,7 +1639,7 @@ static void ctcmpc_chx_attnbusy(fsm_instance *fsm, int event, void *arg)
1639{ 1639{
1640 struct channel *ch = arg; 1640 struct channel *ch = arg;
1641 struct net_device *dev = ch->netdev; 1641 struct net_device *dev = ch->netdev;
1642 struct ctcm_priv *priv = dev->priv; 1642 struct ctcm_priv *priv = dev->ml_priv;
1643 struct mpc_group *grp = priv->mpcg; 1643 struct mpc_group *grp = priv->mpcg;
1644 1644
1645 CTCM_PR_DEBUG("%s(%s): %s\n ChState:%s GrpState:%s\n", 1645 CTCM_PR_DEBUG("%s(%s): %s\n ChState:%s GrpState:%s\n",
@@ -1724,7 +1724,7 @@ static void ctcmpc_chx_resend(fsm_instance *fsm, int event, void *arg)
1724{ 1724{
1725 struct channel *ch = arg; 1725 struct channel *ch = arg;
1726 struct net_device *dev = ch->netdev; 1726 struct net_device *dev = ch->netdev;
1727 struct ctcm_priv *priv = dev->priv; 1727 struct ctcm_priv *priv = dev->ml_priv;
1728 struct mpc_group *grp = priv->mpcg; 1728 struct mpc_group *grp = priv->mpcg;
1729 1729
1730 fsm_event(grp->fsm, MPCG_EVENT_XID0DO, ch); 1730 fsm_event(grp->fsm, MPCG_EVENT_XID0DO, ch);
@@ -1740,7 +1740,7 @@ static void ctcmpc_chx_send_sweep(fsm_instance *fsm, int event, void *arg)
1740{ 1740{
1741 struct channel *ach = arg; 1741 struct channel *ach = arg;
1742 struct net_device *dev = ach->netdev; 1742 struct net_device *dev = ach->netdev;
1743 struct ctcm_priv *priv = dev->priv; 1743 struct ctcm_priv *priv = dev->ml_priv;
1744 struct mpc_group *grp = priv->mpcg; 1744 struct mpc_group *grp = priv->mpcg;
1745 struct channel *wch = priv->channel[WRITE]; 1745 struct channel *wch = priv->channel[WRITE];
1746 struct channel *rch = priv->channel[READ]; 1746 struct channel *rch = priv->channel[READ];
@@ -2050,7 +2050,7 @@ int mpc_ch_fsm_len = ARRAY_SIZE(ctcmpc_ch_fsm);
2050static void dev_action_start(fsm_instance *fi, int event, void *arg) 2050static void dev_action_start(fsm_instance *fi, int event, void *arg)
2051{ 2051{
2052 struct net_device *dev = arg; 2052 struct net_device *dev = arg;
2053 struct ctcm_priv *priv = dev->priv; 2053 struct ctcm_priv *priv = dev->ml_priv;
2054 int direction; 2054 int direction;
2055 2055
2056 CTCMY_DBF_DEV_NAME(SETUP, dev, ""); 2056 CTCMY_DBF_DEV_NAME(SETUP, dev, "");
@@ -2076,7 +2076,7 @@ static void dev_action_stop(fsm_instance *fi, int event, void *arg)
2076{ 2076{
2077 int direction; 2077 int direction;
2078 struct net_device *dev = arg; 2078 struct net_device *dev = arg;
2079 struct ctcm_priv *priv = dev->priv; 2079 struct ctcm_priv *priv = dev->ml_priv;
2080 2080
2081 CTCMY_DBF_DEV_NAME(SETUP, dev, ""); 2081 CTCMY_DBF_DEV_NAME(SETUP, dev, "");
2082 2082
@@ -2096,7 +2096,7 @@ static void dev_action_restart(fsm_instance *fi, int event, void *arg)
2096{ 2096{
2097 int restart_timer; 2097 int restart_timer;
2098 struct net_device *dev = arg; 2098 struct net_device *dev = arg;
2099 struct ctcm_priv *priv = dev->priv; 2099 struct ctcm_priv *priv = dev->ml_priv;
2100 2100
2101 CTCMY_DBF_DEV_NAME(TRACE, dev, ""); 2101 CTCMY_DBF_DEV_NAME(TRACE, dev, "");
2102 2102
@@ -2133,12 +2133,12 @@ static void dev_action_restart(fsm_instance *fi, int event, void *arg)
2133static void dev_action_chup(fsm_instance *fi, int event, void *arg) 2133static void dev_action_chup(fsm_instance *fi, int event, void *arg)
2134{ 2134{
2135 struct net_device *dev = arg; 2135 struct net_device *dev = arg;
2136 struct ctcm_priv *priv = dev->priv; 2136 struct ctcm_priv *priv = dev->ml_priv;
2137 int dev_stat = fsm_getstate(fi); 2137 int dev_stat = fsm_getstate(fi);
2138 2138
2139 CTCM_DBF_TEXT_(SETUP, CTC_DBF_NOTICE, 2139 CTCM_DBF_TEXT_(SETUP, CTC_DBF_NOTICE,
2140 "%s(%s): priv = %p [%d,%d]\n ", CTCM_FUNTAIL, 2140 "%s(%s): priv = %p [%d,%d]\n ", CTCM_FUNTAIL,
2141 dev->name, dev->priv, dev_stat, event); 2141 dev->name, dev->ml_priv, dev_stat, event);
2142 2142
2143 switch (fsm_getstate(fi)) { 2143 switch (fsm_getstate(fi)) {
2144 case DEV_STATE_STARTWAIT_RXTX: 2144 case DEV_STATE_STARTWAIT_RXTX:
@@ -2195,7 +2195,7 @@ static void dev_action_chdown(fsm_instance *fi, int event, void *arg)
2195{ 2195{
2196 2196
2197 struct net_device *dev = arg; 2197 struct net_device *dev = arg;
2198 struct ctcm_priv *priv = dev->priv; 2198 struct ctcm_priv *priv = dev->ml_priv;
2199 2199
2200 CTCMY_DBF_DEV_NAME(SETUP, dev, ""); 2200 CTCMY_DBF_DEV_NAME(SETUP, dev, "");
2201 2201
diff --git a/drivers/s390/net/ctcm_main.c b/drivers/s390/net/ctcm_main.c
index 126a3ebb8ab2..b11fec24c7d2 100644
--- a/drivers/s390/net/ctcm_main.c
+++ b/drivers/s390/net/ctcm_main.c
@@ -69,7 +69,7 @@ struct channel *channels;
69void ctcm_unpack_skb(struct channel *ch, struct sk_buff *pskb) 69void ctcm_unpack_skb(struct channel *ch, struct sk_buff *pskb)
70{ 70{
71 struct net_device *dev = ch->netdev; 71 struct net_device *dev = ch->netdev;
72 struct ctcm_priv *priv = dev->priv; 72 struct ctcm_priv *priv = dev->ml_priv;
73 __u16 len = *((__u16 *) pskb->data); 73 __u16 len = *((__u16 *) pskb->data);
74 74
75 skb_put(pskb, 2 + LL_HEADER_LENGTH); 75 skb_put(pskb, 2 + LL_HEADER_LENGTH);
@@ -414,7 +414,7 @@ int ctcm_ch_alloc_buffer(struct channel *ch)
414 */ 414 */
415int ctcm_open(struct net_device *dev) 415int ctcm_open(struct net_device *dev)
416{ 416{
417 struct ctcm_priv *priv = dev->priv; 417 struct ctcm_priv *priv = dev->ml_priv;
418 418
419 CTCMY_DBF_DEV_NAME(SETUP, dev, ""); 419 CTCMY_DBF_DEV_NAME(SETUP, dev, "");
420 if (!IS_MPC(priv)) 420 if (!IS_MPC(priv))
@@ -432,7 +432,7 @@ int ctcm_open(struct net_device *dev)
432 */ 432 */
433int ctcm_close(struct net_device *dev) 433int ctcm_close(struct net_device *dev)
434{ 434{
435 struct ctcm_priv *priv = dev->priv; 435 struct ctcm_priv *priv = dev->ml_priv;
436 436
437 CTCMY_DBF_DEV_NAME(SETUP, dev, ""); 437 CTCMY_DBF_DEV_NAME(SETUP, dev, "");
438 if (!IS_MPC(priv)) 438 if (!IS_MPC(priv))
@@ -573,7 +573,7 @@ static int ctcm_transmit_skb(struct channel *ch, struct sk_buff *skb)
573 skb_pull(skb, LL_HEADER_LENGTH + 2); 573 skb_pull(skb, LL_HEADER_LENGTH + 2);
574 } else if (ccw_idx == 0) { 574 } else if (ccw_idx == 0) {
575 struct net_device *dev = ch->netdev; 575 struct net_device *dev = ch->netdev;
576 struct ctcm_priv *priv = dev->priv; 576 struct ctcm_priv *priv = dev->ml_priv;
577 priv->stats.tx_packets++; 577 priv->stats.tx_packets++;
578 priv->stats.tx_bytes += skb->len - LL_HEADER_LENGTH; 578 priv->stats.tx_bytes += skb->len - LL_HEADER_LENGTH;
579 } 579 }
@@ -592,7 +592,7 @@ static void ctcmpc_send_sweep_req(struct channel *rch)
592 struct channel *ch; 592 struct channel *ch;
593 /* int rc = 0; */ 593 /* int rc = 0; */
594 594
595 priv = dev->priv; 595 priv = dev->ml_priv;
596 grp = priv->mpcg; 596 grp = priv->mpcg;
597 ch = priv->channel[WRITE]; 597 ch = priv->channel[WRITE];
598 598
@@ -652,7 +652,7 @@ static int ctcmpc_transmit_skb(struct channel *ch, struct sk_buff *skb)
652{ 652{
653 struct pdu *p_header; 653 struct pdu *p_header;
654 struct net_device *dev = ch->netdev; 654 struct net_device *dev = ch->netdev;
655 struct ctcm_priv *priv = dev->priv; 655 struct ctcm_priv *priv = dev->ml_priv;
656 struct mpc_group *grp = priv->mpcg; 656 struct mpc_group *grp = priv->mpcg;
657 struct th_header *header; 657 struct th_header *header;
658 struct sk_buff *nskb; 658 struct sk_buff *nskb;
@@ -867,7 +867,7 @@ done:
867/* first merge version - leaving both functions separated */ 867/* first merge version - leaving both functions separated */
868static int ctcm_tx(struct sk_buff *skb, struct net_device *dev) 868static int ctcm_tx(struct sk_buff *skb, struct net_device *dev)
869{ 869{
870 struct ctcm_priv *priv = dev->priv; 870 struct ctcm_priv *priv = dev->ml_priv;
871 871
872 if (skb == NULL) { 872 if (skb == NULL) {
873 CTCM_DBF_TEXT_(ERROR, CTC_DBF_ERROR, 873 CTCM_DBF_TEXT_(ERROR, CTC_DBF_ERROR,
@@ -911,7 +911,7 @@ static int ctcm_tx(struct sk_buff *skb, struct net_device *dev)
911static int ctcmpc_tx(struct sk_buff *skb, struct net_device *dev) 911static int ctcmpc_tx(struct sk_buff *skb, struct net_device *dev)
912{ 912{
913 int len = 0; 913 int len = 0;
914 struct ctcm_priv *priv = dev->priv; 914 struct ctcm_priv *priv = dev->ml_priv;
915 struct mpc_group *grp = priv->mpcg; 915 struct mpc_group *grp = priv->mpcg;
916 struct sk_buff *newskb = NULL; 916 struct sk_buff *newskb = NULL;
917 917
@@ -1025,7 +1025,7 @@ static int ctcm_change_mtu(struct net_device *dev, int new_mtu)
1025 if (new_mtu < 576 || new_mtu > 65527) 1025 if (new_mtu < 576 || new_mtu > 65527)
1026 return -EINVAL; 1026 return -EINVAL;
1027 1027
1028 priv = dev->priv; 1028 priv = dev->ml_priv;
1029 max_bufsize = priv->channel[READ]->max_bufsize; 1029 max_bufsize = priv->channel[READ]->max_bufsize;
1030 1030
1031 if (IS_MPC(priv)) { 1031 if (IS_MPC(priv)) {
@@ -1050,7 +1050,7 @@ static int ctcm_change_mtu(struct net_device *dev, int new_mtu)
1050 */ 1050 */
1051static struct net_device_stats *ctcm_stats(struct net_device *dev) 1051static struct net_device_stats *ctcm_stats(struct net_device *dev)
1052{ 1052{
1053 return &((struct ctcm_priv *)dev->priv)->stats; 1053 return &((struct ctcm_priv *)dev->ml_priv)->stats;
1054} 1054}
1055 1055
1056static void ctcm_free_netdevice(struct net_device *dev) 1056static void ctcm_free_netdevice(struct net_device *dev)
@@ -1060,7 +1060,7 @@ static void ctcm_free_netdevice(struct net_device *dev)
1060 1060
1061 CTCM_DBF_TEXT_(SETUP, CTC_DBF_INFO, 1061 CTCM_DBF_TEXT_(SETUP, CTC_DBF_INFO,
1062 "%s(%s)", CTCM_FUNTAIL, dev->name); 1062 "%s(%s)", CTCM_FUNTAIL, dev->name);
1063 priv = dev->priv; 1063 priv = dev->ml_priv;
1064 if (priv) { 1064 if (priv) {
1065 grp = priv->mpcg; 1065 grp = priv->mpcg;
1066 if (grp) { 1066 if (grp) {
@@ -1125,7 +1125,7 @@ static struct net_device *ctcm_init_netdevice(struct ctcm_priv *priv)
1125 CTCM_FUNTAIL); 1125 CTCM_FUNTAIL);
1126 return NULL; 1126 return NULL;
1127 } 1127 }
1128 dev->priv = priv; 1128 dev->ml_priv = priv;
1129 priv->fsm = init_fsm("ctcmdev", dev_state_names, dev_event_names, 1129 priv->fsm = init_fsm("ctcmdev", dev_state_names, dev_event_names,
1130 CTCM_NR_DEV_STATES, CTCM_NR_DEV_EVENTS, 1130 CTCM_NR_DEV_STATES, CTCM_NR_DEV_EVENTS,
1131 dev_fsm, dev_fsm_len, GFP_KERNEL); 1131 dev_fsm, dev_fsm_len, GFP_KERNEL);
diff --git a/drivers/s390/net/ctcm_main.h b/drivers/s390/net/ctcm_main.h
index a72e0feeb27f..8e10ee86a5ee 100644
--- a/drivers/s390/net/ctcm_main.h
+++ b/drivers/s390/net/ctcm_main.h
@@ -229,14 +229,14 @@ void ctcm_remove_files(struct device *dev);
229 */ 229 */
230static inline void ctcm_clear_busy_do(struct net_device *dev) 230static inline void ctcm_clear_busy_do(struct net_device *dev)
231{ 231{
232 clear_bit(0, &(((struct ctcm_priv *)dev->priv)->tbusy)); 232 clear_bit(0, &(((struct ctcm_priv *)dev->ml_priv)->tbusy));
233 netif_wake_queue(dev); 233 netif_wake_queue(dev);
234} 234}
235 235
236static inline void ctcm_clear_busy(struct net_device *dev) 236static inline void ctcm_clear_busy(struct net_device *dev)
237{ 237{
238 struct mpc_group *grp; 238 struct mpc_group *grp;
239 grp = ((struct ctcm_priv *)dev->priv)->mpcg; 239 grp = ((struct ctcm_priv *)dev->ml_priv)->mpcg;
240 240
241 if (!(grp && grp->in_sweep)) 241 if (!(grp && grp->in_sweep))
242 ctcm_clear_busy_do(dev); 242 ctcm_clear_busy_do(dev);
@@ -246,7 +246,8 @@ static inline void ctcm_clear_busy(struct net_device *dev)
246static inline int ctcm_test_and_set_busy(struct net_device *dev) 246static inline int ctcm_test_and_set_busy(struct net_device *dev)
247{ 247{
248 netif_stop_queue(dev); 248 netif_stop_queue(dev);
249 return test_and_set_bit(0, &(((struct ctcm_priv *)dev->priv)->tbusy)); 249 return test_and_set_bit(0,
250 &(((struct ctcm_priv *)dev->ml_priv)->tbusy));
250} 251}
251 252
252extern int loglevel; 253extern int loglevel;
@@ -292,7 +293,7 @@ struct mpc_group *ctcmpc_init_mpc_group(struct ctcm_priv *priv);
292#define IS_MPC(p) ((p)->protocol == CTCM_PROTO_MPC) 293#define IS_MPC(p) ((p)->protocol == CTCM_PROTO_MPC)
293 294
294/* test if struct ctcm_priv of struct net_device has MPC protocol setting */ 295/* test if struct ctcm_priv of struct net_device has MPC protocol setting */
295#define IS_MPCDEV(d) IS_MPC((struct ctcm_priv *)d->priv) 296#define IS_MPCDEV(dev) IS_MPC((struct ctcm_priv *)dev->ml_priv)
296 297
297static inline gfp_t gfp_type(void) 298static inline gfp_t gfp_type(void)
298{ 299{
diff --git a/drivers/s390/net/ctcm_mpc.c b/drivers/s390/net/ctcm_mpc.c
index 49ae1cd25caa..407f816f091b 100644
--- a/drivers/s390/net/ctcm_mpc.c
+++ b/drivers/s390/net/ctcm_mpc.c
@@ -313,10 +313,10 @@ static struct net_device *ctcmpc_get_dev(int port_num)
313 CTCM_FUNTAIL, device); 313 CTCM_FUNTAIL, device);
314 return NULL; 314 return NULL;
315 } 315 }
316 priv = dev->priv; 316 priv = dev->ml_priv;
317 if (priv == NULL) { 317 if (priv == NULL) {
318 CTCM_DBF_TEXT_(MPC_ERROR, CTC_DBF_ERROR, 318 CTCM_DBF_TEXT_(MPC_ERROR, CTC_DBF_ERROR,
319 "%s(%s): dev->priv is NULL", 319 "%s(%s): dev->ml_priv is NULL",
320 CTCM_FUNTAIL, device); 320 CTCM_FUNTAIL, device);
321 return NULL; 321 return NULL;
322 } 322 }
@@ -345,7 +345,7 @@ int ctc_mpc_alloc_channel(int port_num, void (*callback)(int, int))
345 dev = ctcmpc_get_dev(port_num); 345 dev = ctcmpc_get_dev(port_num);
346 if (dev == NULL) 346 if (dev == NULL)
347 return 1; 347 return 1;
348 priv = dev->priv; 348 priv = dev->ml_priv;
349 grp = priv->mpcg; 349 grp = priv->mpcg;
350 350
351 grp->allochanfunc = callback; 351 grp->allochanfunc = callback;
@@ -417,7 +417,7 @@ void ctc_mpc_establish_connectivity(int port_num,
417 dev = ctcmpc_get_dev(port_num); 417 dev = ctcmpc_get_dev(port_num);
418 if (dev == NULL) 418 if (dev == NULL)
419 return; 419 return;
420 priv = dev->priv; 420 priv = dev->ml_priv;
421 grp = priv->mpcg; 421 grp = priv->mpcg;
422 rch = priv->channel[READ]; 422 rch = priv->channel[READ];
423 wch = priv->channel[WRITE]; 423 wch = priv->channel[WRITE];
@@ -535,7 +535,7 @@ void ctc_mpc_dealloc_ch(int port_num)
535 dev = ctcmpc_get_dev(port_num); 535 dev = ctcmpc_get_dev(port_num);
536 if (dev == NULL) 536 if (dev == NULL)
537 return; 537 return;
538 priv = dev->priv; 538 priv = dev->ml_priv;
539 grp = priv->mpcg; 539 grp = priv->mpcg;
540 540
541 CTCM_DBF_TEXT_(MPC_SETUP, CTC_DBF_DEBUG, 541 CTCM_DBF_TEXT_(MPC_SETUP, CTC_DBF_DEBUG,
@@ -571,7 +571,7 @@ void ctc_mpc_flow_control(int port_num, int flowc)
571 dev = ctcmpc_get_dev(port_num); 571 dev = ctcmpc_get_dev(port_num);
572 if (dev == NULL) 572 if (dev == NULL)
573 return; 573 return;
574 priv = dev->priv; 574 priv = dev->ml_priv;
575 grp = priv->mpcg; 575 grp = priv->mpcg;
576 576
577 CTCM_DBF_TEXT_(MPC_TRACE, CTC_DBF_DEBUG, 577 CTCM_DBF_TEXT_(MPC_TRACE, CTC_DBF_DEBUG,
@@ -620,7 +620,7 @@ static void mpc_rcvd_sweep_resp(struct mpcg_info *mpcginfo)
620{ 620{
621 struct channel *rch = mpcginfo->ch; 621 struct channel *rch = mpcginfo->ch;
622 struct net_device *dev = rch->netdev; 622 struct net_device *dev = rch->netdev;
623 struct ctcm_priv *priv = dev->priv; 623 struct ctcm_priv *priv = dev->ml_priv;
624 struct mpc_group *grp = priv->mpcg; 624 struct mpc_group *grp = priv->mpcg;
625 struct channel *ch = priv->channel[WRITE]; 625 struct channel *ch = priv->channel[WRITE];
626 626
@@ -651,7 +651,7 @@ static void mpc_rcvd_sweep_resp(struct mpcg_info *mpcginfo)
651static void ctcmpc_send_sweep_resp(struct channel *rch) 651static void ctcmpc_send_sweep_resp(struct channel *rch)
652{ 652{
653 struct net_device *dev = rch->netdev; 653 struct net_device *dev = rch->netdev;
654 struct ctcm_priv *priv = dev->priv; 654 struct ctcm_priv *priv = dev->ml_priv;
655 struct mpc_group *grp = priv->mpcg; 655 struct mpc_group *grp = priv->mpcg;
656 int rc = 0; 656 int rc = 0;
657 struct th_sweep *header; 657 struct th_sweep *header;
@@ -713,7 +713,7 @@ static void mpc_rcvd_sweep_req(struct mpcg_info *mpcginfo)
713{ 713{
714 struct channel *rch = mpcginfo->ch; 714 struct channel *rch = mpcginfo->ch;
715 struct net_device *dev = rch->netdev; 715 struct net_device *dev = rch->netdev;
716 struct ctcm_priv *priv = dev->priv; 716 struct ctcm_priv *priv = dev->ml_priv;
717 struct mpc_group *grp = priv->mpcg; 717 struct mpc_group *grp = priv->mpcg;
718 struct channel *ch = priv->channel[WRITE]; 718 struct channel *ch = priv->channel[WRITE];
719 719
@@ -847,7 +847,7 @@ static int mpcg_fsm_len = ARRAY_SIZE(mpcg_fsm);
847static void mpc_action_go_ready(fsm_instance *fsm, int event, void *arg) 847static void mpc_action_go_ready(fsm_instance *fsm, int event, void *arg)
848{ 848{
849 struct net_device *dev = arg; 849 struct net_device *dev = arg;
850 struct ctcm_priv *priv = dev->priv; 850 struct ctcm_priv *priv = dev->ml_priv;
851 struct mpc_group *grp = priv->mpcg; 851 struct mpc_group *grp = priv->mpcg;
852 852
853 if (grp == NULL) { 853 if (grp == NULL) {
@@ -891,7 +891,7 @@ static void mpc_action_go_ready(fsm_instance *fsm, int event, void *arg)
891void mpc_group_ready(unsigned long adev) 891void mpc_group_ready(unsigned long adev)
892{ 892{
893 struct net_device *dev = (struct net_device *)adev; 893 struct net_device *dev = (struct net_device *)adev;
894 struct ctcm_priv *priv = dev->priv; 894 struct ctcm_priv *priv = dev->ml_priv;
895 struct mpc_group *grp = priv->mpcg; 895 struct mpc_group *grp = priv->mpcg;
896 struct channel *ch = NULL; 896 struct channel *ch = NULL;
897 897
@@ -947,7 +947,7 @@ void mpc_group_ready(unsigned long adev)
947void mpc_channel_action(struct channel *ch, int direction, int action) 947void mpc_channel_action(struct channel *ch, int direction, int action)
948{ 948{
949 struct net_device *dev = ch->netdev; 949 struct net_device *dev = ch->netdev;
950 struct ctcm_priv *priv = dev->priv; 950 struct ctcm_priv *priv = dev->ml_priv;
951 struct mpc_group *grp = priv->mpcg; 951 struct mpc_group *grp = priv->mpcg;
952 952
953 if (grp == NULL) { 953 if (grp == NULL) {
@@ -1057,7 +1057,7 @@ done:
1057static void ctcmpc_unpack_skb(struct channel *ch, struct sk_buff *pskb) 1057static void ctcmpc_unpack_skb(struct channel *ch, struct sk_buff *pskb)
1058{ 1058{
1059 struct net_device *dev = ch->netdev; 1059 struct net_device *dev = ch->netdev;
1060 struct ctcm_priv *priv = dev->priv; 1060 struct ctcm_priv *priv = dev->ml_priv;
1061 struct mpc_group *grp = priv->mpcg; 1061 struct mpc_group *grp = priv->mpcg;
1062 struct pdu *curr_pdu; 1062 struct pdu *curr_pdu;
1063 struct mpcg_info *mpcginfo; 1063 struct mpcg_info *mpcginfo;
@@ -1255,7 +1255,7 @@ void ctcmpc_bh(unsigned long thischan)
1255 struct channel *ch = (struct channel *)thischan; 1255 struct channel *ch = (struct channel *)thischan;
1256 struct sk_buff *skb; 1256 struct sk_buff *skb;
1257 struct net_device *dev = ch->netdev; 1257 struct net_device *dev = ch->netdev;
1258 struct ctcm_priv *priv = dev->priv; 1258 struct ctcm_priv *priv = dev->ml_priv;
1259 struct mpc_group *grp = priv->mpcg; 1259 struct mpc_group *grp = priv->mpcg;
1260 1260
1261 CTCM_PR_DEBUG("%s cp:%i enter: %s() %s\n", 1261 CTCM_PR_DEBUG("%s cp:%i enter: %s() %s\n",
@@ -1377,7 +1377,7 @@ static void mpc_action_go_inop(fsm_instance *fi, int event, void *arg)
1377 BUG_ON(dev == NULL); 1377 BUG_ON(dev == NULL);
1378 CTCM_PR_DEBUG("Enter %s: %s\n", __func__, dev->name); 1378 CTCM_PR_DEBUG("Enter %s: %s\n", __func__, dev->name);
1379 1379
1380 priv = dev->priv; 1380 priv = dev->ml_priv;
1381 grp = priv->mpcg; 1381 grp = priv->mpcg;
1382 grp->flow_off_called = 0; 1382 grp->flow_off_called = 0;
1383 fsm_deltimer(&grp->timer); 1383 fsm_deltimer(&grp->timer);
@@ -1483,7 +1483,7 @@ static void mpc_action_timeout(fsm_instance *fi, int event, void *arg)
1483 1483
1484 BUG_ON(dev == NULL); 1484 BUG_ON(dev == NULL);
1485 1485
1486 priv = dev->priv; 1486 priv = dev->ml_priv;
1487 grp = priv->mpcg; 1487 grp = priv->mpcg;
1488 wch = priv->channel[WRITE]; 1488 wch = priv->channel[WRITE];
1489 rch = priv->channel[READ]; 1489 rch = priv->channel[READ];
@@ -1521,7 +1521,7 @@ void mpc_action_discontact(fsm_instance *fi, int event, void *arg)
1521 if (ch) { 1521 if (ch) {
1522 dev = ch->netdev; 1522 dev = ch->netdev;
1523 if (dev) { 1523 if (dev) {
1524 priv = dev->priv; 1524 priv = dev->ml_priv;
1525 if (priv) { 1525 if (priv) {
1526 CTCM_DBF_TEXT_(MPC_TRACE, CTC_DBF_NOTICE, 1526 CTCM_DBF_TEXT_(MPC_TRACE, CTC_DBF_NOTICE,
1527 "%s: %s: %s\n", 1527 "%s: %s: %s\n",
@@ -1569,7 +1569,7 @@ static int mpc_validate_xid(struct mpcg_info *mpcginfo)
1569{ 1569{
1570 struct channel *ch = mpcginfo->ch; 1570 struct channel *ch = mpcginfo->ch;
1571 struct net_device *dev = ch->netdev; 1571 struct net_device *dev = ch->netdev;
1572 struct ctcm_priv *priv = dev->priv; 1572 struct ctcm_priv *priv = dev->ml_priv;
1573 struct mpc_group *grp = priv->mpcg; 1573 struct mpc_group *grp = priv->mpcg;
1574 struct xid2 *xid = mpcginfo->xid; 1574 struct xid2 *xid = mpcginfo->xid;
1575 int rc = 0; 1575 int rc = 0;
@@ -1866,7 +1866,7 @@ static void mpc_action_doxid0(fsm_instance *fsm, int event, void *arg)
1866{ 1866{
1867 struct channel *ch = arg; 1867 struct channel *ch = arg;
1868 struct net_device *dev = ch->netdev; 1868 struct net_device *dev = ch->netdev;
1869 struct ctcm_priv *priv = dev->priv; 1869 struct ctcm_priv *priv = dev->ml_priv;
1870 struct mpc_group *grp = priv->mpcg; 1870 struct mpc_group *grp = priv->mpcg;
1871 1871
1872 CTCM_PR_DEBUG("Enter %s: cp=%i ch=0x%p id=%s\n", 1872 CTCM_PR_DEBUG("Enter %s: cp=%i ch=0x%p id=%s\n",
@@ -1906,7 +1906,7 @@ static void mpc_action_doxid0(fsm_instance *fsm, int event, void *arg)
1906static void mpc_action_doxid7(fsm_instance *fsm, int event, void *arg) 1906static void mpc_action_doxid7(fsm_instance *fsm, int event, void *arg)
1907{ 1907{
1908 struct net_device *dev = arg; 1908 struct net_device *dev = arg;
1909 struct ctcm_priv *priv = dev->priv; 1909 struct ctcm_priv *priv = dev->ml_priv;
1910 struct mpc_group *grp = NULL; 1910 struct mpc_group *grp = NULL;
1911 int direction; 1911 int direction;
1912 int send = 0; 1912 int send = 0;
@@ -1983,7 +1983,7 @@ static void mpc_action_rcvd_xid0(fsm_instance *fsm, int event, void *arg)
1983 struct mpcg_info *mpcginfo = arg; 1983 struct mpcg_info *mpcginfo = arg;
1984 struct channel *ch = mpcginfo->ch; 1984 struct channel *ch = mpcginfo->ch;
1985 struct net_device *dev = ch->netdev; 1985 struct net_device *dev = ch->netdev;
1986 struct ctcm_priv *priv = dev->priv; 1986 struct ctcm_priv *priv = dev->ml_priv;
1987 struct mpc_group *grp = priv->mpcg; 1987 struct mpc_group *grp = priv->mpcg;
1988 1988
1989 CTCM_PR_DEBUG("%s: ch-id:%s xid2:%i xid7:%i xidt_p2:%i \n", 1989 CTCM_PR_DEBUG("%s: ch-id:%s xid2:%i xid7:%i xidt_p2:%i \n",
@@ -2045,7 +2045,7 @@ static void mpc_action_rcvd_xid7(fsm_instance *fsm, int event, void *arg)
2045 struct mpcg_info *mpcginfo = arg; 2045 struct mpcg_info *mpcginfo = arg;
2046 struct channel *ch = mpcginfo->ch; 2046 struct channel *ch = mpcginfo->ch;
2047 struct net_device *dev = ch->netdev; 2047 struct net_device *dev = ch->netdev;
2048 struct ctcm_priv *priv = dev->priv; 2048 struct ctcm_priv *priv = dev->ml_priv;
2049 struct mpc_group *grp = priv->mpcg; 2049 struct mpc_group *grp = priv->mpcg;
2050 2050
2051 CTCM_PR_DEBUG("Enter %s: cp=%i ch=0x%p id=%s\n", 2051 CTCM_PR_DEBUG("Enter %s: cp=%i ch=0x%p id=%s\n",
@@ -2097,7 +2097,7 @@ static int mpc_send_qllc_discontact(struct net_device *dev)
2097 __u32 new_len = 0; 2097 __u32 new_len = 0;
2098 struct sk_buff *skb; 2098 struct sk_buff *skb;
2099 struct qllc *qllcptr; 2099 struct qllc *qllcptr;
2100 struct ctcm_priv *priv = dev->priv; 2100 struct ctcm_priv *priv = dev->ml_priv;
2101 struct mpc_group *grp = priv->mpcg; 2101 struct mpc_group *grp = priv->mpcg;
2102 2102
2103 CTCM_PR_DEBUG("%s: GROUP STATE: %s\n", 2103 CTCM_PR_DEBUG("%s: GROUP STATE: %s\n",
diff --git a/drivers/s390/net/lcs.c b/drivers/s390/net/lcs.c
index 6de28385b354..9bcfa04d863b 100644
--- a/drivers/s390/net/lcs.c
+++ b/drivers/s390/net/lcs.c
@@ -1412,7 +1412,8 @@ lcs_irq(struct ccw_device *cdev, unsigned long intparm, struct irb *irb)
1412 } 1412 }
1413 /* How far in the ccw chain have we processed? */ 1413 /* How far in the ccw chain have we processed? */
1414 if ((channel->state != LCS_CH_STATE_INIT) && 1414 if ((channel->state != LCS_CH_STATE_INIT) &&
1415 (irb->scsw.cmd.fctl & SCSW_FCTL_START_FUNC)) { 1415 (irb->scsw.cmd.fctl & SCSW_FCTL_START_FUNC) &&
1416 (irb->scsw.cmd.cpa != 0)) {
1416 index = (struct ccw1 *) __va((addr_t) irb->scsw.cmd.cpa) 1417 index = (struct ccw1 *) __va((addr_t) irb->scsw.cmd.cpa)
1417 - channel->ccws; 1418 - channel->ccws;
1418 if ((irb->scsw.cmd.actl & SCSW_ACTL_SUSPENDED) || 1419 if ((irb->scsw.cmd.actl & SCSW_ACTL_SUSPENDED) ||
diff --git a/drivers/s390/net/qeth_core.h b/drivers/s390/net/qeth_core.h
index 80971c21ea1a..bf8a75c92f28 100644
--- a/drivers/s390/net/qeth_core.h
+++ b/drivers/s390/net/qeth_core.h
@@ -689,6 +689,7 @@ struct qeth_mc_mac {
689 struct list_head list; 689 struct list_head list;
690 __u8 mc_addr[MAX_ADDR_LEN]; 690 __u8 mc_addr[MAX_ADDR_LEN];
691 unsigned char mc_addrlen; 691 unsigned char mc_addrlen;
692 int is_vmac;
692}; 693};
693 694
694struct qeth_card { 695struct qeth_card {
diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
index bd420d1b9a0d..c7ab1b864516 100644
--- a/drivers/s390/net/qeth_core_main.c
+++ b/drivers/s390/net/qeth_core_main.c
@@ -3024,7 +3024,7 @@ static inline void __qeth_fill_buffer(struct sk_buff *skb,
3024 struct qdio_buffer *buffer, int is_tso, int *next_element_to_fill, 3024 struct qdio_buffer *buffer, int is_tso, int *next_element_to_fill,
3025 int offset) 3025 int offset)
3026{ 3026{
3027 int length = skb->len; 3027 int length = skb->len - offset;
3028 int length_here; 3028 int length_here;
3029 int element; 3029 int element;
3030 char *data; 3030 char *data;
diff --git a/drivers/s390/net/qeth_l2_main.c b/drivers/s390/net/qeth_l2_main.c
index b3cee032f578..3ac3cc1e03cc 100644
--- a/drivers/s390/net/qeth_l2_main.c
+++ b/drivers/s390/net/qeth_l2_main.c
@@ -177,9 +177,10 @@ static int qeth_l2_send_delgroupmac(struct qeth_card *card, __u8 *mac)
177 qeth_l2_send_delgroupmac_cb); 177 qeth_l2_send_delgroupmac_cb);
178} 178}
179 179
180static void qeth_l2_add_mc(struct qeth_card *card, __u8 *mac) 180static void qeth_l2_add_mc(struct qeth_card *card, __u8 *mac, int vmac)
181{ 181{
182 struct qeth_mc_mac *mc; 182 struct qeth_mc_mac *mc;
183 int rc;
183 184
184 mc = kmalloc(sizeof(struct qeth_mc_mac), GFP_ATOMIC); 185 mc = kmalloc(sizeof(struct qeth_mc_mac), GFP_ATOMIC);
185 186
@@ -188,8 +189,16 @@ static void qeth_l2_add_mc(struct qeth_card *card, __u8 *mac)
188 189
189 memcpy(mc->mc_addr, mac, OSA_ADDR_LEN); 190 memcpy(mc->mc_addr, mac, OSA_ADDR_LEN);
190 mc->mc_addrlen = OSA_ADDR_LEN; 191 mc->mc_addrlen = OSA_ADDR_LEN;
192 mc->is_vmac = vmac;
193
194 if (vmac) {
195 rc = qeth_l2_send_setdelmac(card, mac, IPA_CMD_SETVMAC,
196 NULL);
197 } else {
198 rc = qeth_l2_send_setgroupmac(card, mac);
199 }
191 200
192 if (!qeth_l2_send_setgroupmac(card, mac)) 201 if (!rc)
193 list_add_tail(&mc->list, &card->mc_list); 202 list_add_tail(&mc->list, &card->mc_list);
194 else 203 else
195 kfree(mc); 204 kfree(mc);
@@ -201,7 +210,11 @@ static void qeth_l2_del_all_mc(struct qeth_card *card)
201 210
202 spin_lock_bh(&card->mclock); 211 spin_lock_bh(&card->mclock);
203 list_for_each_entry_safe(mc, tmp, &card->mc_list, list) { 212 list_for_each_entry_safe(mc, tmp, &card->mc_list, list) {
204 qeth_l2_send_delgroupmac(card, mc->mc_addr); 213 if (mc->is_vmac)
214 qeth_l2_send_setdelmac(card, mc->mc_addr,
215 IPA_CMD_DELVMAC, NULL);
216 else
217 qeth_l2_send_delgroupmac(card, mc->mc_addr);
205 list_del(&mc->list); 218 list_del(&mc->list);
206 kfree(mc); 219 kfree(mc);
207 } 220 }
@@ -590,7 +603,7 @@ static int qeth_l2_set_mac_address(struct net_device *dev, void *p)
590static void qeth_l2_set_multicast_list(struct net_device *dev) 603static void qeth_l2_set_multicast_list(struct net_device *dev)
591{ 604{
592 struct qeth_card *card = dev->ml_priv; 605 struct qeth_card *card = dev->ml_priv;
593 struct dev_mc_list *dm; 606 struct dev_addr_list *dm;
594 607
595 if (card->info.type == QETH_CARD_TYPE_OSN) 608 if (card->info.type == QETH_CARD_TYPE_OSN)
596 return ; 609 return ;
@@ -599,7 +612,11 @@ static void qeth_l2_set_multicast_list(struct net_device *dev)
599 qeth_l2_del_all_mc(card); 612 qeth_l2_del_all_mc(card);
600 spin_lock_bh(&card->mclock); 613 spin_lock_bh(&card->mclock);
601 for (dm = dev->mc_list; dm; dm = dm->next) 614 for (dm = dev->mc_list; dm; dm = dm->next)
602 qeth_l2_add_mc(card, dm->dmi_addr); 615 qeth_l2_add_mc(card, dm->da_addr, 0);
616
617 for (dm = dev->uc_list; dm; dm = dm->next)
618 qeth_l2_add_mc(card, dm->da_addr, 1);
619
603 spin_unlock_bh(&card->mclock); 620 spin_unlock_bh(&card->mclock);
604 if (!qeth_adp_supported(card, IPA_SETADP_SET_PROMISC_MODE)) 621 if (!qeth_adp_supported(card, IPA_SETADP_SET_PROMISC_MODE))
605 return; 622 return;
diff --git a/drivers/s390/net/qeth_l3_sys.c b/drivers/s390/net/qeth_l3_sys.c
index ac1993708ae9..210ddb639748 100644
--- a/drivers/s390/net/qeth_l3_sys.c
+++ b/drivers/s390/net/qeth_l3_sys.c
@@ -136,7 +136,7 @@ static ssize_t qeth_l3_dev_route6_store(struct device *dev,
136 return -EINVAL; 136 return -EINVAL;
137 137
138 if (!qeth_is_supported(card, IPA_IPV6)) { 138 if (!qeth_is_supported(card, IPA_IPV6)) {
139 return -ENOTSUPP; 139 return -EOPNOTSUPP;
140 } 140 }
141 141
142 return qeth_l3_dev_route_store(card, &card->options.route6, 142 return qeth_l3_dev_route_store(card, &card->options.route6,
diff --git a/include/linux/Kbuild b/include/linux/Kbuild
index 7d970678f940..59391250d51c 100644
--- a/include/linux/Kbuild
+++ b/include/linux/Kbuild
@@ -297,7 +297,6 @@ unifdef-y += parport.h
297unifdef-y += patchkey.h 297unifdef-y += patchkey.h
298unifdef-y += pci.h 298unifdef-y += pci.h
299unifdef-y += personality.h 299unifdef-y += personality.h
300unifdef-y += pim.h
301unifdef-y += pktcdvd.h 300unifdef-y += pktcdvd.h
302unifdef-y += pmu.h 301unifdef-y += pmu.h
303unifdef-y += poll.h 302unifdef-y += poll.h
diff --git a/include/linux/mroute.h b/include/linux/mroute.h
index 07112ee9293a..8a455694d682 100644
--- a/include/linux/mroute.h
+++ b/include/linux/mroute.h
@@ -6,7 +6,6 @@
6#ifdef __KERNEL__ 6#ifdef __KERNEL__
7#include <linux/in.h> 7#include <linux/in.h>
8#endif 8#endif
9#include <linux/pim.h>
10 9
11/* 10/*
12 * Based on the MROUTING 3.5 defines primarily to keep 11 * Based on the MROUTING 3.5 defines primarily to keep
@@ -130,6 +129,7 @@ struct igmpmsg
130 */ 129 */
131 130
132#ifdef __KERNEL__ 131#ifdef __KERNEL__
132#include <linux/pim.h>
133#include <net/sock.h> 133#include <net/sock.h>
134 134
135#ifdef CONFIG_IP_MROUTE 135#ifdef CONFIG_IP_MROUTE
diff --git a/include/linux/mroute6.h b/include/linux/mroute6.h
index 5cf50473a10f..6f4c180179e2 100644
--- a/include/linux/mroute6.h
+++ b/include/linux/mroute6.h
@@ -115,6 +115,7 @@ struct sioc_mif_req6
115 115
116#ifdef __KERNEL__ 116#ifdef __KERNEL__
117 117
118#include <linux/pim.h>
118#include <linux/skbuff.h> /* for struct sk_buff_head */ 119#include <linux/skbuff.h> /* for struct sk_buff_head */
119 120
120#ifdef CONFIG_IPV6_MROUTE 121#ifdef CONFIG_IPV6_MROUTE
diff --git a/include/linux/pim.h b/include/linux/pim.h
index 236ffd317394..1ba0661561a4 100644
--- a/include/linux/pim.h
+++ b/include/linux/pim.h
@@ -3,22 +3,6 @@
3 3
4#include <asm/byteorder.h> 4#include <asm/byteorder.h>
5 5
6#ifndef __KERNEL__
7struct pim {
8#if defined(__LITTLE_ENDIAN_BITFIELD)
9 __u8 pim_type:4, /* PIM message type */
10 pim_ver:4; /* PIM version */
11#elif defined(__BIG_ENDIAN_BITFIELD)
12 __u8 pim_ver:4; /* PIM version */
13 pim_type:4; /* PIM message type */
14#endif
15 __u8 pim_rsv; /* Reserved */
16 __be16 pim_cksum; /* Checksum */
17};
18
19#define PIM_MINLEN 8
20#endif
21
22/* Message types - V1 */ 6/* Message types - V1 */
23#define PIM_V1_VERSION __constant_htonl(0x10000000) 7#define PIM_V1_VERSION __constant_htonl(0x10000000)
24#define PIM_V1_REGISTER 1 8#define PIM_V1_REGISTER 1
@@ -27,7 +11,6 @@ struct pim {
27#define PIM_VERSION 2 11#define PIM_VERSION 2
28#define PIM_REGISTER 1 12#define PIM_REGISTER 1
29 13
30#if defined(__KERNEL__)
31#define PIM_NULL_REGISTER __constant_htonl(0x40000000) 14#define PIM_NULL_REGISTER __constant_htonl(0x40000000)
32 15
33/* PIMv2 register message header layout (ietf-draft-idmr-pimvsm-v2-00.ps */ 16/* PIMv2 register message header layout (ietf-draft-idmr-pimvsm-v2-00.ps */
@@ -42,4 +25,3 @@ struct pimreghdr
42struct sk_buff; 25struct sk_buff;
43extern int pim_rcv_v1(struct sk_buff *); 26extern int pim_rcv_v1(struct sk_buff *);
44#endif 27#endif
45#endif
diff --git a/include/net/pkt_sched.h b/include/net/pkt_sched.h
index 853fe83d9f37..b786a5b09253 100644
--- a/include/net/pkt_sched.h
+++ b/include/net/pkt_sched.h
@@ -78,6 +78,7 @@ extern struct Qdisc *fifo_create_dflt(struct Qdisc *sch, struct Qdisc_ops *ops,
78 78
79extern int register_qdisc(struct Qdisc_ops *qops); 79extern int register_qdisc(struct Qdisc_ops *qops);
80extern int unregister_qdisc(struct Qdisc_ops *qops); 80extern int unregister_qdisc(struct Qdisc_ops *qops);
81extern void qdisc_list_del(struct Qdisc *q);
81extern struct Qdisc *qdisc_lookup(struct net_device *dev, u32 handle); 82extern struct Qdisc *qdisc_lookup(struct net_device *dev, u32 handle);
82extern struct Qdisc *qdisc_lookup_class(struct net_device *dev, u32 handle); 83extern struct Qdisc *qdisc_lookup_class(struct net_device *dev, u32 handle);
83extern struct qdisc_rate_table *qdisc_get_rtab(struct tc_ratespec *r, 84extern struct qdisc_rate_table *qdisc_get_rtab(struct tc_ratespec *r,
diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h
index b1d2cfea89c5..e5569625d2a5 100644
--- a/include/net/sch_generic.h
+++ b/include/net/sch_generic.h
@@ -217,6 +217,14 @@ static inline spinlock_t *qdisc_root_lock(struct Qdisc *qdisc)
217 return qdisc_lock(root); 217 return qdisc_lock(root);
218} 218}
219 219
220static inline spinlock_t *qdisc_root_sleeping_lock(struct Qdisc *qdisc)
221{
222 struct Qdisc *root = qdisc_root_sleeping(qdisc);
223
224 ASSERT_RTNL();
225 return qdisc_lock(root);
226}
227
220static inline struct net_device *qdisc_dev(struct Qdisc *qdisc) 228static inline struct net_device *qdisc_dev(struct Qdisc *qdisc)
221{ 229{
222 return qdisc->dev_queue->dev; 230 return qdisc->dev_queue->dev;
@@ -224,12 +232,12 @@ static inline struct net_device *qdisc_dev(struct Qdisc *qdisc)
224 232
225static inline void sch_tree_lock(struct Qdisc *q) 233static inline void sch_tree_lock(struct Qdisc *q)
226{ 234{
227 spin_lock_bh(qdisc_root_lock(q)); 235 spin_lock_bh(qdisc_root_sleeping_lock(q));
228} 236}
229 237
230static inline void sch_tree_unlock(struct Qdisc *q) 238static inline void sch_tree_unlock(struct Qdisc *q)
231{ 239{
232 spin_unlock_bh(qdisc_root_lock(q)); 240 spin_unlock_bh(qdisc_root_sleeping_lock(q));
233} 241}
234 242
235#define tcf_tree_lock(tp) sch_tree_lock((tp)->q) 243#define tcf_tree_lock(tp) sch_tree_lock((tp)->q)
diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c
index 860558633b2c..55c355e63234 100644
--- a/net/ipv4/icmp.c
+++ b/net/ipv4/icmp.c
@@ -204,18 +204,22 @@ static struct sock *icmp_sk(struct net *net)
204 return net->ipv4.icmp_sk[smp_processor_id()]; 204 return net->ipv4.icmp_sk[smp_processor_id()];
205} 205}
206 206
207static inline int icmp_xmit_lock(struct sock *sk) 207static inline struct sock *icmp_xmit_lock(struct net *net)
208{ 208{
209 struct sock *sk;
210
209 local_bh_disable(); 211 local_bh_disable();
210 212
213 sk = icmp_sk(net);
214
211 if (unlikely(!spin_trylock(&sk->sk_lock.slock))) { 215 if (unlikely(!spin_trylock(&sk->sk_lock.slock))) {
212 /* This can happen if the output path signals a 216 /* This can happen if the output path signals a
213 * dst_link_failure() for an outgoing ICMP packet. 217 * dst_link_failure() for an outgoing ICMP packet.
214 */ 218 */
215 local_bh_enable(); 219 local_bh_enable();
216 return 1; 220 return NULL;
217 } 221 }
218 return 0; 222 return sk;
219} 223}
220 224
221static inline void icmp_xmit_unlock(struct sock *sk) 225static inline void icmp_xmit_unlock(struct sock *sk)
@@ -354,15 +358,17 @@ static void icmp_reply(struct icmp_bxm *icmp_param, struct sk_buff *skb)
354 struct ipcm_cookie ipc; 358 struct ipcm_cookie ipc;
355 struct rtable *rt = skb->rtable; 359 struct rtable *rt = skb->rtable;
356 struct net *net = dev_net(rt->u.dst.dev); 360 struct net *net = dev_net(rt->u.dst.dev);
357 struct sock *sk = icmp_sk(net); 361 struct sock *sk;
358 struct inet_sock *inet = inet_sk(sk); 362 struct inet_sock *inet;
359 __be32 daddr; 363 __be32 daddr;
360 364
361 if (ip_options_echo(&icmp_param->replyopts, skb)) 365 if (ip_options_echo(&icmp_param->replyopts, skb))
362 return; 366 return;
363 367
364 if (icmp_xmit_lock(sk)) 368 sk = icmp_xmit_lock(net);
369 if (sk == NULL)
365 return; 370 return;
371 inet = inet_sk(sk);
366 372
367 icmp_param->data.icmph.checksum = 0; 373 icmp_param->data.icmph.checksum = 0;
368 374
@@ -419,7 +425,6 @@ void icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info)
419 if (!rt) 425 if (!rt)
420 goto out; 426 goto out;
421 net = dev_net(rt->u.dst.dev); 427 net = dev_net(rt->u.dst.dev);
422 sk = icmp_sk(net);
423 428
424 /* 429 /*
425 * Find the original header. It is expected to be valid, of course. 430 * Find the original header. It is expected to be valid, of course.
@@ -483,7 +488,8 @@ void icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info)
483 } 488 }
484 } 489 }
485 490
486 if (icmp_xmit_lock(sk)) 491 sk = icmp_xmit_lock(net);
492 if (sk == NULL)
487 return; 493 return;
488 494
489 /* 495 /*
diff --git a/net/ipv4/route.c b/net/ipv4/route.c
index 71598f64c113..f62187bb6d08 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -3122,14 +3122,23 @@ static ctl_table ipv4_route_table[] = {
3122 { .ctl_name = 0 } 3122 { .ctl_name = 0 }
3123}; 3123};
3124 3124
3125static __net_initdata struct ctl_path ipv4_route_path[] = { 3125static struct ctl_table empty[1];
3126
3127static struct ctl_table ipv4_skeleton[] =
3128{
3129 { .procname = "route", .ctl_name = NET_IPV4_ROUTE,
3130 .mode = 0555, .child = ipv4_route_table},
3131 { .procname = "neigh", .ctl_name = NET_IPV4_NEIGH,
3132 .mode = 0555, .child = empty},
3133 { }
3134};
3135
3136static __net_initdata struct ctl_path ipv4_path[] = {
3126 { .procname = "net", .ctl_name = CTL_NET, }, 3137 { .procname = "net", .ctl_name = CTL_NET, },
3127 { .procname = "ipv4", .ctl_name = NET_IPV4, }, 3138 { .procname = "ipv4", .ctl_name = NET_IPV4, },
3128 { .procname = "route", .ctl_name = NET_IPV4_ROUTE, },
3129 { }, 3139 { },
3130}; 3140};
3131 3141
3132
3133static struct ctl_table ipv4_route_flush_table[] = { 3142static struct ctl_table ipv4_route_flush_table[] = {
3134 { 3143 {
3135 .ctl_name = NET_IPV4_ROUTE_FLUSH, 3144 .ctl_name = NET_IPV4_ROUTE_FLUSH,
@@ -3142,6 +3151,13 @@ static struct ctl_table ipv4_route_flush_table[] = {
3142 { .ctl_name = 0 }, 3151 { .ctl_name = 0 },
3143}; 3152};
3144 3153
3154static __net_initdata struct ctl_path ipv4_route_path[] = {
3155 { .procname = "net", .ctl_name = CTL_NET, },
3156 { .procname = "ipv4", .ctl_name = NET_IPV4, },
3157 { .procname = "route", .ctl_name = NET_IPV4_ROUTE, },
3158 { },
3159};
3160
3145static __net_init int sysctl_route_net_init(struct net *net) 3161static __net_init int sysctl_route_net_init(struct net *net)
3146{ 3162{
3147 struct ctl_table *tbl; 3163 struct ctl_table *tbl;
@@ -3293,7 +3309,7 @@ int __init ip_rt_init(void)
3293 */ 3309 */
3294void __init ip_static_sysctl_init(void) 3310void __init ip_static_sysctl_init(void)
3295{ 3311{
3296 register_sysctl_paths(ipv4_route_path, ipv4_route_table); 3312 register_sysctl_paths(ipv4_path, ipv4_skeleton);
3297} 3313}
3298#endif 3314#endif
3299 3315
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index a00532de2a8c..8165f5aa8c71 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -468,7 +468,8 @@ static unsigned tcp_syn_options(struct sock *sk, struct sk_buff *skb,
468 } 468 }
469 if (likely(sysctl_tcp_window_scaling)) { 469 if (likely(sysctl_tcp_window_scaling)) {
470 opts->ws = tp->rx_opt.rcv_wscale; 470 opts->ws = tp->rx_opt.rcv_wscale;
471 size += TCPOLEN_WSCALE_ALIGNED; 471 if(likely(opts->ws))
472 size += TCPOLEN_WSCALE_ALIGNED;
472 } 473 }
473 if (likely(sysctl_tcp_sack)) { 474 if (likely(sysctl_tcp_sack)) {
474 opts->options |= OPTION_SACK_ADVERTISE; 475 opts->options |= OPTION_SACK_ADVERTISE;
@@ -509,7 +510,8 @@ static unsigned tcp_synack_options(struct sock *sk,
509 510
510 if (likely(ireq->wscale_ok)) { 511 if (likely(ireq->wscale_ok)) {
511 opts->ws = ireq->rcv_wscale; 512 opts->ws = ireq->rcv_wscale;
512 size += TCPOLEN_WSCALE_ALIGNED; 513 if(likely(opts->ws))
514 size += TCPOLEN_WSCALE_ALIGNED;
513 } 515 }
514 if (likely(doing_ts)) { 516 if (likely(doing_ts)) {
515 opts->options |= OPTION_TS; 517 opts->options |= OPTION_TS;
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index e2d3b7580b76..7b6a584b62dd 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -1688,6 +1688,7 @@ addrconf_prefix_route(struct in6_addr *pfx, int plen, struct net_device *dev,
1688 .fc_dst_len = plen, 1688 .fc_dst_len = plen,
1689 .fc_flags = RTF_UP | flags, 1689 .fc_flags = RTF_UP | flags,
1690 .fc_nlinfo.nl_net = dev_net(dev), 1690 .fc_nlinfo.nl_net = dev_net(dev),
1691 .fc_protocol = RTPROT_KERNEL,
1691 }; 1692 };
1692 1693
1693 ipv6_addr_copy(&cfg.fc_dst, pfx); 1694 ipv6_addr_copy(&cfg.fc_dst, pfx);
diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c
index abedf95fdf2d..b3157a0cc15d 100644
--- a/net/ipv6/icmp.c
+++ b/net/ipv6/icmp.c
@@ -91,19 +91,22 @@ static struct inet6_protocol icmpv6_protocol = {
91 .flags = INET6_PROTO_NOPOLICY|INET6_PROTO_FINAL, 91 .flags = INET6_PROTO_NOPOLICY|INET6_PROTO_FINAL,
92}; 92};
93 93
94static __inline__ int icmpv6_xmit_lock(struct sock *sk) 94static __inline__ struct sock *icmpv6_xmit_lock(struct net *net)
95{ 95{
96 struct sock *sk;
97
96 local_bh_disable(); 98 local_bh_disable();
97 99
100 sk = icmpv6_sk(net);
98 if (unlikely(!spin_trylock(&sk->sk_lock.slock))) { 101 if (unlikely(!spin_trylock(&sk->sk_lock.slock))) {
99 /* This can happen if the output path (f.e. SIT or 102 /* This can happen if the output path (f.e. SIT or
100 * ip6ip6 tunnel) signals dst_link_failure() for an 103 * ip6ip6 tunnel) signals dst_link_failure() for an
101 * outgoing ICMP6 packet. 104 * outgoing ICMP6 packet.
102 */ 105 */
103 local_bh_enable(); 106 local_bh_enable();
104 return 1; 107 return NULL;
105 } 108 }
106 return 0; 109 return sk;
107} 110}
108 111
109static __inline__ void icmpv6_xmit_unlock(struct sock *sk) 112static __inline__ void icmpv6_xmit_unlock(struct sock *sk)
@@ -392,11 +395,10 @@ void icmpv6_send(struct sk_buff *skb, int type, int code, __u32 info,
392 fl.fl_icmp_code = code; 395 fl.fl_icmp_code = code;
393 security_skb_classify_flow(skb, &fl); 396 security_skb_classify_flow(skb, &fl);
394 397
395 sk = icmpv6_sk(net); 398 sk = icmpv6_xmit_lock(net);
396 np = inet6_sk(sk); 399 if (sk == NULL)
397
398 if (icmpv6_xmit_lock(sk))
399 return; 400 return;
401 np = inet6_sk(sk);
400 402
401 if (!icmpv6_xrlim_allow(sk, type, &fl)) 403 if (!icmpv6_xrlim_allow(sk, type, &fl))
402 goto out; 404 goto out;
@@ -539,11 +541,10 @@ static void icmpv6_echo_reply(struct sk_buff *skb)
539 fl.fl_icmp_type = ICMPV6_ECHO_REPLY; 541 fl.fl_icmp_type = ICMPV6_ECHO_REPLY;
540 security_skb_classify_flow(skb, &fl); 542 security_skb_classify_flow(skb, &fl);
541 543
542 sk = icmpv6_sk(net); 544 sk = icmpv6_xmit_lock(net);
543 np = inet6_sk(sk); 545 if (sk == NULL)
544
545 if (icmpv6_xmit_lock(sk))
546 return; 546 return;
547 np = inet6_sk(sk);
547 548
548 if (!fl.oif && ipv6_addr_is_multicast(&fl.fl6_dst)) 549 if (!fl.oif && ipv6_addr_is_multicast(&fl.fl6_dst))
549 fl.oif = np->mcast_oif; 550 fl.oif = np->mcast_oif;
diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
index 01d47674f7e5..e53e493606c5 100644
--- a/net/ipv6/raw.c
+++ b/net/ipv6/raw.c
@@ -377,14 +377,14 @@ static inline int rawv6_rcv_skb(struct sock * sk, struct sk_buff * skb)
377 skb_checksum_complete(skb)) { 377 skb_checksum_complete(skb)) {
378 atomic_inc(&sk->sk_drops); 378 atomic_inc(&sk->sk_drops);
379 kfree_skb(skb); 379 kfree_skb(skb);
380 return 0; 380 return NET_RX_DROP;
381 } 381 }
382 382
383 /* Charge it to the socket. */ 383 /* Charge it to the socket. */
384 if (sock_queue_rcv_skb(sk,skb)<0) { 384 if (sock_queue_rcv_skb(sk,skb)<0) {
385 atomic_inc(&sk->sk_drops); 385 atomic_inc(&sk->sk_drops);
386 kfree_skb(skb); 386 kfree_skb(skb);
387 return 0; 387 return NET_RX_DROP;
388 } 388 }
389 389
390 return 0; 390 return 0;
@@ -429,7 +429,7 @@ int rawv6_rcv(struct sock *sk, struct sk_buff *skb)
429 if (skb_checksum_complete(skb)) { 429 if (skb_checksum_complete(skb)) {
430 atomic_inc(&sk->sk_drops); 430 atomic_inc(&sk->sk_drops);
431 kfree_skb(skb); 431 kfree_skb(skb);
432 return 0; 432 return NET_RX_DROP;
433 } 433 }
434 } 434 }
435 435
diff --git a/net/ipv6/sysctl_net_ipv6.c b/net/ipv6/sysctl_net_ipv6.c
index e6dfaeac6be3..587f8f60c489 100644
--- a/net/ipv6/sysctl_net_ipv6.c
+++ b/net/ipv6/sysctl_net_ipv6.c
@@ -156,7 +156,7 @@ static struct ctl_table_header *ip6_base;
156int ipv6_static_sysctl_register(void) 156int ipv6_static_sysctl_register(void)
157{ 157{
158 static struct ctl_table empty[1]; 158 static struct ctl_table empty[1];
159 ip6_base = register_net_sysctl_rotable(net_ipv6_ctl_path, empty); 159 ip6_base = register_sysctl_paths(net_ipv6_ctl_path, empty);
160 if (ip6_base == NULL) 160 if (ip6_base == NULL)
161 return -ENOMEM; 161 return -ENOMEM;
162 return 0; 162 return 0;
diff --git a/net/mac80211/debugfs_netdev.c b/net/mac80211/debugfs_netdev.c
index 475f89a8aee1..8165df578c92 100644
--- a/net/mac80211/debugfs_netdev.c
+++ b/net/mac80211/debugfs_netdev.c
@@ -248,8 +248,8 @@ IEEE80211_IF_WFILE(min_discovery_timeout,
248static void add_sta_files(struct ieee80211_sub_if_data *sdata) 248static void add_sta_files(struct ieee80211_sub_if_data *sdata)
249{ 249{
250 DEBUGFS_ADD(drop_unencrypted, sta); 250 DEBUGFS_ADD(drop_unencrypted, sta);
251 DEBUGFS_ADD(force_unicast_rateidx, ap); 251 DEBUGFS_ADD(force_unicast_rateidx, sta);
252 DEBUGFS_ADD(max_ratectrl_rateidx, ap); 252 DEBUGFS_ADD(max_ratectrl_rateidx, sta);
253 253
254 DEBUGFS_ADD(state, sta); 254 DEBUGFS_ADD(state, sta);
255 DEBUGFS_ADD(bssid, sta); 255 DEBUGFS_ADD(bssid, sta);
@@ -283,8 +283,8 @@ static void add_ap_files(struct ieee80211_sub_if_data *sdata)
283static void add_wds_files(struct ieee80211_sub_if_data *sdata) 283static void add_wds_files(struct ieee80211_sub_if_data *sdata)
284{ 284{
285 DEBUGFS_ADD(drop_unencrypted, wds); 285 DEBUGFS_ADD(drop_unencrypted, wds);
286 DEBUGFS_ADD(force_unicast_rateidx, ap); 286 DEBUGFS_ADD(force_unicast_rateidx, wds);
287 DEBUGFS_ADD(max_ratectrl_rateidx, ap); 287 DEBUGFS_ADD(max_ratectrl_rateidx, wds);
288 288
289 DEBUGFS_ADD(peer, wds); 289 DEBUGFS_ADD(peer, wds);
290} 290}
@@ -292,8 +292,8 @@ static void add_wds_files(struct ieee80211_sub_if_data *sdata)
292static void add_vlan_files(struct ieee80211_sub_if_data *sdata) 292static void add_vlan_files(struct ieee80211_sub_if_data *sdata)
293{ 293{
294 DEBUGFS_ADD(drop_unencrypted, vlan); 294 DEBUGFS_ADD(drop_unencrypted, vlan);
295 DEBUGFS_ADD(force_unicast_rateidx, ap); 295 DEBUGFS_ADD(force_unicast_rateidx, vlan);
296 DEBUGFS_ADD(max_ratectrl_rateidx, ap); 296 DEBUGFS_ADD(max_ratectrl_rateidx, vlan);
297} 297}
298 298
299static void add_monitor_files(struct ieee80211_sub_if_data *sdata) 299static void add_monitor_files(struct ieee80211_sub_if_data *sdata)
@@ -381,8 +381,8 @@ static void add_files(struct ieee80211_sub_if_data *sdata)
381static void del_sta_files(struct ieee80211_sub_if_data *sdata) 381static void del_sta_files(struct ieee80211_sub_if_data *sdata)
382{ 382{
383 DEBUGFS_DEL(drop_unencrypted, sta); 383 DEBUGFS_DEL(drop_unencrypted, sta);
384 DEBUGFS_DEL(force_unicast_rateidx, ap); 384 DEBUGFS_DEL(force_unicast_rateidx, sta);
385 DEBUGFS_DEL(max_ratectrl_rateidx, ap); 385 DEBUGFS_DEL(max_ratectrl_rateidx, sta);
386 386
387 DEBUGFS_DEL(state, sta); 387 DEBUGFS_DEL(state, sta);
388 DEBUGFS_DEL(bssid, sta); 388 DEBUGFS_DEL(bssid, sta);
@@ -416,8 +416,8 @@ static void del_ap_files(struct ieee80211_sub_if_data *sdata)
416static void del_wds_files(struct ieee80211_sub_if_data *sdata) 416static void del_wds_files(struct ieee80211_sub_if_data *sdata)
417{ 417{
418 DEBUGFS_DEL(drop_unencrypted, wds); 418 DEBUGFS_DEL(drop_unencrypted, wds);
419 DEBUGFS_DEL(force_unicast_rateidx, ap); 419 DEBUGFS_DEL(force_unicast_rateidx, wds);
420 DEBUGFS_DEL(max_ratectrl_rateidx, ap); 420 DEBUGFS_DEL(max_ratectrl_rateidx, wds);
421 421
422 DEBUGFS_DEL(peer, wds); 422 DEBUGFS_DEL(peer, wds);
423} 423}
@@ -425,8 +425,8 @@ static void del_wds_files(struct ieee80211_sub_if_data *sdata)
425static void del_vlan_files(struct ieee80211_sub_if_data *sdata) 425static void del_vlan_files(struct ieee80211_sub_if_data *sdata)
426{ 426{
427 DEBUGFS_DEL(drop_unencrypted, vlan); 427 DEBUGFS_DEL(drop_unencrypted, vlan);
428 DEBUGFS_DEL(force_unicast_rateidx, ap); 428 DEBUGFS_DEL(force_unicast_rateidx, vlan);
429 DEBUGFS_DEL(max_ratectrl_rateidx, ap); 429 DEBUGFS_DEL(max_ratectrl_rateidx, vlan);
430} 430}
431 431
432static void del_monitor_files(struct ieee80211_sub_if_data *sdata) 432static void del_monitor_files(struct ieee80211_sub_if_data *sdata)
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index 2bb546744b94..570ae83c71b1 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -472,6 +472,8 @@ struct ieee80211_sub_if_data {
472 struct dentry *auth_transaction; 472 struct dentry *auth_transaction;
473 struct dentry *flags; 473 struct dentry *flags;
474 struct dentry *num_beacons_sta; 474 struct dentry *num_beacons_sta;
475 struct dentry *force_unicast_rateidx;
476 struct dentry *max_ratectrl_rateidx;
475 } sta; 477 } sta;
476 struct { 478 struct {
477 struct dentry *drop_unencrypted; 479 struct dentry *drop_unencrypted;
@@ -485,9 +487,13 @@ struct ieee80211_sub_if_data {
485 struct { 487 struct {
486 struct dentry *drop_unencrypted; 488 struct dentry *drop_unencrypted;
487 struct dentry *peer; 489 struct dentry *peer;
490 struct dentry *force_unicast_rateidx;
491 struct dentry *max_ratectrl_rateidx;
488 } wds; 492 } wds;
489 struct { 493 struct {
490 struct dentry *drop_unencrypted; 494 struct dentry *drop_unencrypted;
495 struct dentry *force_unicast_rateidx;
496 struct dentry *max_ratectrl_rateidx;
491 } vlan; 497 } vlan;
492 struct { 498 struct {
493 struct dentry *mode; 499 struct dentry *mode;
diff --git a/net/mac80211/mesh.c b/net/mac80211/mesh.c
index b631703bcc82..3ccb3599c04f 100644
--- a/net/mac80211/mesh.c
+++ b/net/mac80211/mesh.c
@@ -376,7 +376,7 @@ errcopy:
376 hlist_for_each_safe(p, q, &newtbl->hash_buckets[i]) 376 hlist_for_each_safe(p, q, &newtbl->hash_buckets[i])
377 tbl->free_node(p, 0); 377 tbl->free_node(p, 0);
378 } 378 }
379 __mesh_table_free(tbl); 379 __mesh_table_free(newtbl);
380endgrow: 380endgrow:
381 return NULL; 381 return NULL;
382} 382}
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index e088b440aafa..7d53382f1a5b 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -500,51 +500,21 @@ int ieee80211_ht_addt_info_ie_to_ht_bss_info(
500static void ieee80211_sta_send_associnfo(struct ieee80211_sub_if_data *sdata, 500static void ieee80211_sta_send_associnfo(struct ieee80211_sub_if_data *sdata,
501 struct ieee80211_if_sta *ifsta) 501 struct ieee80211_if_sta *ifsta)
502{ 502{
503 char *buf;
504 size_t len;
505 int i;
506 union iwreq_data wrqu; 503 union iwreq_data wrqu;
507 504
508 if (!ifsta->assocreq_ies && !ifsta->assocresp_ies)
509 return;
510
511 buf = kmalloc(50 + 2 * (ifsta->assocreq_ies_len +
512 ifsta->assocresp_ies_len), GFP_KERNEL);
513 if (!buf)
514 return;
515
516 len = sprintf(buf, "ASSOCINFO(");
517 if (ifsta->assocreq_ies) { 505 if (ifsta->assocreq_ies) {
518 len += sprintf(buf + len, "ReqIEs="); 506 memset(&wrqu, 0, sizeof(wrqu));
519 for (i = 0; i < ifsta->assocreq_ies_len; i++) { 507 wrqu.data.length = ifsta->assocreq_ies_len;
520 len += sprintf(buf + len, "%02x", 508 wireless_send_event(sdata->dev, IWEVASSOCREQIE, &wrqu,
521 ifsta->assocreq_ies[i]); 509 ifsta->assocreq_ies);
522 }
523 } 510 }
524 if (ifsta->assocresp_ies) {
525 if (ifsta->assocreq_ies)
526 len += sprintf(buf + len, " ");
527 len += sprintf(buf + len, "RespIEs=");
528 for (i = 0; i < ifsta->assocresp_ies_len; i++) {
529 len += sprintf(buf + len, "%02x",
530 ifsta->assocresp_ies[i]);
531 }
532 }
533 len += sprintf(buf + len, ")");
534 511
535 if (len > IW_CUSTOM_MAX) { 512 if (ifsta->assocresp_ies) {
536 len = sprintf(buf, "ASSOCRESPIE="); 513 memset(&wrqu, 0, sizeof(wrqu));
537 for (i = 0; i < ifsta->assocresp_ies_len; i++) { 514 wrqu.data.length = ifsta->assocresp_ies_len;
538 len += sprintf(buf + len, "%02x", 515 wireless_send_event(sdata->dev, IWEVASSOCRESPIE, &wrqu,
539 ifsta->assocresp_ies[i]); 516 ifsta->assocresp_ies);
540 }
541 } 517 }
542
543 memset(&wrqu, 0, sizeof(wrqu));
544 wrqu.data.length = len;
545 wireless_send_event(sdata->dev, IWEVCUSTOM, &wrqu, buf);
546
547 kfree(buf);
548} 518}
549 519
550 520
@@ -864,7 +834,7 @@ static void ieee80211_send_assoc(struct ieee80211_sub_if_data *sdata,
864 } 834 }
865 } 835 }
866 836
867 if (count == 8) { 837 if (rates_len > count) {
868 pos = skb_put(skb, rates_len - count + 2); 838 pos = skb_put(skb, rates_len - count + 2);
869 *pos++ = WLAN_EID_EXT_SUPP_RATES; 839 *pos++ = WLAN_EID_EXT_SUPP_RATES;
870 *pos++ = rates_len - count; 840 *pos++ = rates_len - count;
@@ -2788,7 +2758,7 @@ static void ieee80211_rx_bss_info(struct ieee80211_sub_if_data *sdata,
2788 jiffies); 2758 jiffies);
2789#endif /* CONFIG_MAC80211_IBSS_DEBUG */ 2759#endif /* CONFIG_MAC80211_IBSS_DEBUG */
2790 if (beacon_timestamp > rx_timestamp) { 2760 if (beacon_timestamp > rx_timestamp) {
2791#ifndef CONFIG_MAC80211_IBSS_DEBUG 2761#ifdef CONFIG_MAC80211_IBSS_DEBUG
2792 printk(KERN_DEBUG "%s: beacon TSF higher than " 2762 printk(KERN_DEBUG "%s: beacon TSF higher than "
2793 "local TSF - IBSS merge with BSSID %s\n", 2763 "local TSF - IBSS merge with BSSID %s\n",
2794 sdata->dev->name, print_mac(mac, mgmt->bssid)); 2764 sdata->dev->name, print_mac(mac, mgmt->bssid));
diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c
index 5cafdd4c8018..8eb79e92e94c 100644
--- a/net/sched/cls_api.c
+++ b/net/sched/cls_api.c
@@ -205,7 +205,7 @@ replay:
205 } 205 }
206 } 206 }
207 207
208 root_lock = qdisc_root_lock(q); 208 root_lock = qdisc_root_sleeping_lock(q);
209 209
210 if (tp == NULL) { 210 if (tp == NULL) {
211 /* Proto-tcf does not exist, create new one */ 211 /* Proto-tcf does not exist, create new one */
diff --git a/net/sched/cls_route.c b/net/sched/cls_route.c
index 481260a4f10f..e3d8455eebc2 100644
--- a/net/sched/cls_route.c
+++ b/net/sched/cls_route.c
@@ -75,7 +75,7 @@ static __inline__ int route4_fastmap_hash(u32 id, int iif)
75static inline 75static inline
76void route4_reset_fastmap(struct Qdisc *q, struct route4_head *head, u32 id) 76void route4_reset_fastmap(struct Qdisc *q, struct route4_head *head, u32 id)
77{ 77{
78 spinlock_t *root_lock = qdisc_root_lock(q); 78 spinlock_t *root_lock = qdisc_root_sleeping_lock(q);
79 79
80 spin_lock_bh(root_lock); 80 spin_lock_bh(root_lock);
81 memset(head->fastmap, 0, sizeof(head->fastmap)); 81 memset(head->fastmap, 0, sizeof(head->fastmap));
diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c
index 45f442d7de47..1122c952aa99 100644
--- a/net/sched/sch_api.c
+++ b/net/sched/sch_api.c
@@ -199,19 +199,53 @@ struct Qdisc *qdisc_match_from_root(struct Qdisc *root, u32 handle)
199 return NULL; 199 return NULL;
200} 200}
201 201
202/*
203 * This lock is needed until some qdiscs stop calling qdisc_tree_decrease_qlen()
204 * without rtnl_lock(); currently hfsc_dequeue(), netem_dequeue(), tbf_dequeue()
205 */
206static DEFINE_SPINLOCK(qdisc_list_lock);
207
208static void qdisc_list_add(struct Qdisc *q)
209{
210 if ((q->parent != TC_H_ROOT) && !(q->flags & TCQ_F_INGRESS)) {
211 spin_lock_bh(&qdisc_list_lock);
212 list_add_tail(&q->list, &qdisc_root_sleeping(q)->list);
213 spin_unlock_bh(&qdisc_list_lock);
214 }
215}
216
217void qdisc_list_del(struct Qdisc *q)
218{
219 if ((q->parent != TC_H_ROOT) && !(q->flags & TCQ_F_INGRESS)) {
220 spin_lock_bh(&qdisc_list_lock);
221 list_del(&q->list);
222 spin_unlock_bh(&qdisc_list_lock);
223 }
224}
225EXPORT_SYMBOL(qdisc_list_del);
226
202struct Qdisc *qdisc_lookup(struct net_device *dev, u32 handle) 227struct Qdisc *qdisc_lookup(struct net_device *dev, u32 handle)
203{ 228{
204 unsigned int i; 229 unsigned int i;
230 struct Qdisc *q;
231
232 spin_lock_bh(&qdisc_list_lock);
205 233
206 for (i = 0; i < dev->num_tx_queues; i++) { 234 for (i = 0; i < dev->num_tx_queues; i++) {
207 struct netdev_queue *txq = netdev_get_tx_queue(dev, i); 235 struct netdev_queue *txq = netdev_get_tx_queue(dev, i);
208 struct Qdisc *q, *txq_root = txq->qdisc_sleeping; 236 struct Qdisc *txq_root = txq->qdisc_sleeping;
209 237
210 q = qdisc_match_from_root(txq_root, handle); 238 q = qdisc_match_from_root(txq_root, handle);
211 if (q) 239 if (q)
212 return q; 240 goto unlock;
213 } 241 }
214 return qdisc_match_from_root(dev->rx_queue.qdisc_sleeping, handle); 242
243 q = qdisc_match_from_root(dev->rx_queue.qdisc_sleeping, handle);
244
245unlock:
246 spin_unlock_bh(&qdisc_list_lock);
247
248 return q;
215} 249}
216 250
217static struct Qdisc *qdisc_leaf(struct Qdisc *p, u32 classid) 251static struct Qdisc *qdisc_leaf(struct Qdisc *p, u32 classid)
@@ -590,7 +624,7 @@ static struct Qdisc *dev_graft_qdisc(struct netdev_queue *dev_queue,
590 struct Qdisc *oqdisc = dev_queue->qdisc_sleeping; 624 struct Qdisc *oqdisc = dev_queue->qdisc_sleeping;
591 spinlock_t *root_lock; 625 spinlock_t *root_lock;
592 626
593 root_lock = qdisc_root_lock(oqdisc); 627 root_lock = qdisc_lock(oqdisc);
594 spin_lock_bh(root_lock); 628 spin_lock_bh(root_lock);
595 629
596 /* Prune old scheduler */ 630 /* Prune old scheduler */
@@ -601,7 +635,7 @@ static struct Qdisc *dev_graft_qdisc(struct netdev_queue *dev_queue,
601 if (qdisc == NULL) 635 if (qdisc == NULL)
602 qdisc = &noop_qdisc; 636 qdisc = &noop_qdisc;
603 dev_queue->qdisc_sleeping = qdisc; 637 dev_queue->qdisc_sleeping = qdisc;
604 dev_queue->qdisc = &noop_qdisc; 638 rcu_assign_pointer(dev_queue->qdisc, &noop_qdisc);
605 639
606 spin_unlock_bh(root_lock); 640 spin_unlock_bh(root_lock);
607 641
@@ -796,9 +830,16 @@ qdisc_create(struct net_device *dev, struct netdev_queue *dev_queue,
796 sch->stab = stab; 830 sch->stab = stab;
797 } 831 }
798 if (tca[TCA_RATE]) { 832 if (tca[TCA_RATE]) {
833 spinlock_t *root_lock;
834
835 if ((sch->parent != TC_H_ROOT) &&
836 !(sch->flags & TCQ_F_INGRESS))
837 root_lock = qdisc_root_sleeping_lock(sch);
838 else
839 root_lock = qdisc_lock(sch);
840
799 err = gen_new_estimator(&sch->bstats, &sch->rate_est, 841 err = gen_new_estimator(&sch->bstats, &sch->rate_est,
800 qdisc_root_lock(sch), 842 root_lock, tca[TCA_RATE]);
801 tca[TCA_RATE]);
802 if (err) { 843 if (err) {
803 /* 844 /*
804 * Any broken qdiscs that would require 845 * Any broken qdiscs that would require
@@ -810,8 +851,8 @@ qdisc_create(struct net_device *dev, struct netdev_queue *dev_queue,
810 goto err_out3; 851 goto err_out3;
811 } 852 }
812 } 853 }
813 if ((parent != TC_H_ROOT) && !(sch->flags & TCQ_F_INGRESS)) 854
814 list_add_tail(&sch->list, &dev_queue->qdisc_sleeping->list); 855 qdisc_list_add(sch);
815 856
816 return sch; 857 return sch;
817 } 858 }
@@ -850,7 +891,8 @@ static int qdisc_change(struct Qdisc *sch, struct nlattr **tca)
850 891
851 if (tca[TCA_RATE]) 892 if (tca[TCA_RATE])
852 gen_replace_estimator(&sch->bstats, &sch->rate_est, 893 gen_replace_estimator(&sch->bstats, &sch->rate_est,
853 qdisc_root_lock(sch), tca[TCA_RATE]); 894 qdisc_root_sleeping_lock(sch),
895 tca[TCA_RATE]);
854 return 0; 896 return 0;
855} 897}
856 898
@@ -1127,8 +1169,8 @@ static int tc_fill_qdisc(struct sk_buff *skb, struct Qdisc *q, u32 clid,
1127 if (q->stab && qdisc_dump_stab(skb, q->stab) < 0) 1169 if (q->stab && qdisc_dump_stab(skb, q->stab) < 0)
1128 goto nla_put_failure; 1170 goto nla_put_failure;
1129 1171
1130 if (gnet_stats_start_copy_compat(skb, TCA_STATS2, TCA_STATS, 1172 if (gnet_stats_start_copy_compat(skb, TCA_STATS2, TCA_STATS, TCA_XSTATS,
1131 TCA_XSTATS, qdisc_root_lock(q), &d) < 0) 1173 qdisc_root_sleeping_lock(q), &d) < 0)
1132 goto nla_put_failure; 1174 goto nla_put_failure;
1133 1175
1134 if (q->ops->dump_stats && q->ops->dump_stats(q, &d) < 0) 1176 if (q->ops->dump_stats && q->ops->dump_stats(q, &d) < 0)
@@ -1419,8 +1461,8 @@ static int tc_fill_tclass(struct sk_buff *skb, struct Qdisc *q,
1419 if (cl_ops->dump && cl_ops->dump(q, cl, skb, tcm) < 0) 1461 if (cl_ops->dump && cl_ops->dump(q, cl, skb, tcm) < 0)
1420 goto nla_put_failure; 1462 goto nla_put_failure;
1421 1463
1422 if (gnet_stats_start_copy_compat(skb, TCA_STATS2, TCA_STATS, 1464 if (gnet_stats_start_copy_compat(skb, TCA_STATS2, TCA_STATS, TCA_XSTATS,
1423 TCA_XSTATS, qdisc_root_lock(q), &d) < 0) 1465 qdisc_root_sleeping_lock(q), &d) < 0)
1424 goto nla_put_failure; 1466 goto nla_put_failure;
1425 1467
1426 if (cl_ops->dump_stats && cl_ops->dump_stats(q, cl, &d) < 0) 1468 if (cl_ops->dump_stats && cl_ops->dump_stats(q, cl, &d) < 0)
diff --git a/net/sched/sch_cbq.c b/net/sched/sch_cbq.c
index 8fa90d68ec6d..8b06fa900482 100644
--- a/net/sched/sch_cbq.c
+++ b/net/sched/sch_cbq.c
@@ -1754,7 +1754,7 @@ static void cbq_put(struct Qdisc *sch, unsigned long arg)
1754 1754
1755 if (--cl->refcnt == 0) { 1755 if (--cl->refcnt == 0) {
1756#ifdef CONFIG_NET_CLS_ACT 1756#ifdef CONFIG_NET_CLS_ACT
1757 spinlock_t *root_lock = qdisc_root_lock(sch); 1757 spinlock_t *root_lock = qdisc_root_sleeping_lock(sch);
1758 struct cbq_sched_data *q = qdisc_priv(sch); 1758 struct cbq_sched_data *q = qdisc_priv(sch);
1759 1759
1760 spin_lock_bh(root_lock); 1760 spin_lock_bh(root_lock);
@@ -1839,7 +1839,7 @@ cbq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, struct nlattr **t
1839 1839
1840 if (tca[TCA_RATE]) 1840 if (tca[TCA_RATE])
1841 gen_replace_estimator(&cl->bstats, &cl->rate_est, 1841 gen_replace_estimator(&cl->bstats, &cl->rate_est,
1842 qdisc_root_lock(sch), 1842 qdisc_root_sleeping_lock(sch),
1843 tca[TCA_RATE]); 1843 tca[TCA_RATE]);
1844 return 0; 1844 return 0;
1845 } 1845 }
@@ -1930,7 +1930,7 @@ cbq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, struct nlattr **t
1930 1930
1931 if (tca[TCA_RATE]) 1931 if (tca[TCA_RATE])
1932 gen_new_estimator(&cl->bstats, &cl->rate_est, 1932 gen_new_estimator(&cl->bstats, &cl->rate_est,
1933 qdisc_root_lock(sch), tca[TCA_RATE]); 1933 qdisc_root_sleeping_lock(sch), tca[TCA_RATE]);
1934 1934
1935 *arg = (unsigned long)cl; 1935 *arg = (unsigned long)cl;
1936 return 0; 1936 return 0;
diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
index c3ed4d44fc14..9634091ee2f0 100644
--- a/net/sched/sch_generic.c
+++ b/net/sched/sch_generic.c
@@ -526,10 +526,9 @@ void qdisc_destroy(struct Qdisc *qdisc)
526 !atomic_dec_and_test(&qdisc->refcnt)) 526 !atomic_dec_and_test(&qdisc->refcnt))
527 return; 527 return;
528 528
529 if (qdisc->parent)
530 list_del(&qdisc->list);
531
532#ifdef CONFIG_NET_SCHED 529#ifdef CONFIG_NET_SCHED
530 qdisc_list_del(qdisc);
531
533 qdisc_put_stab(qdisc->stab); 532 qdisc_put_stab(qdisc->stab);
534#endif 533#endif
535 gen_kill_estimator(&qdisc->bstats, &qdisc->rate_est); 534 gen_kill_estimator(&qdisc->bstats, &qdisc->rate_est);
@@ -635,7 +634,7 @@ static void dev_deactivate_queue(struct net_device *dev,
635 if (!(qdisc->flags & TCQ_F_BUILTIN)) 634 if (!(qdisc->flags & TCQ_F_BUILTIN))
636 set_bit(__QDISC_STATE_DEACTIVATED, &qdisc->state); 635 set_bit(__QDISC_STATE_DEACTIVATED, &qdisc->state);
637 636
638 dev_queue->qdisc = qdisc_default; 637 rcu_assign_pointer(dev_queue->qdisc, qdisc_default);
639 qdisc_reset(qdisc); 638 qdisc_reset(qdisc);
640 639
641 spin_unlock_bh(qdisc_lock(qdisc)); 640 spin_unlock_bh(qdisc_lock(qdisc));
@@ -710,7 +709,7 @@ static void shutdown_scheduler_queue(struct net_device *dev,
710 struct Qdisc *qdisc_default = _qdisc_default; 709 struct Qdisc *qdisc_default = _qdisc_default;
711 710
712 if (qdisc) { 711 if (qdisc) {
713 dev_queue->qdisc = qdisc_default; 712 rcu_assign_pointer(dev_queue->qdisc, qdisc_default);
714 dev_queue->qdisc_sleeping = qdisc_default; 713 dev_queue->qdisc_sleeping = qdisc_default;
715 714
716 qdisc_destroy(qdisc); 715 qdisc_destroy(qdisc);
diff --git a/net/sched/sch_hfsc.c b/net/sched/sch_hfsc.c
index c2b8d9cce3d2..c1e77da8cd09 100644
--- a/net/sched/sch_hfsc.c
+++ b/net/sched/sch_hfsc.c
@@ -1045,7 +1045,7 @@ hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
1045 1045
1046 if (tca[TCA_RATE]) 1046 if (tca[TCA_RATE])
1047 gen_replace_estimator(&cl->bstats, &cl->rate_est, 1047 gen_replace_estimator(&cl->bstats, &cl->rate_est,
1048 qdisc_root_lock(sch), 1048 qdisc_root_sleeping_lock(sch),
1049 tca[TCA_RATE]); 1049 tca[TCA_RATE]);
1050 return 0; 1050 return 0;
1051 } 1051 }
@@ -1104,7 +1104,7 @@ hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
1104 1104
1105 if (tca[TCA_RATE]) 1105 if (tca[TCA_RATE])
1106 gen_new_estimator(&cl->bstats, &cl->rate_est, 1106 gen_new_estimator(&cl->bstats, &cl->rate_est,
1107 qdisc_root_lock(sch), tca[TCA_RATE]); 1107 qdisc_root_sleeping_lock(sch), tca[TCA_RATE]);
1108 *arg = (unsigned long)cl; 1108 *arg = (unsigned long)cl;
1109 return 0; 1109 return 0;
1110} 1110}
diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c
index 0df0df202ed0..d14f02056ae6 100644
--- a/net/sched/sch_htb.c
+++ b/net/sched/sch_htb.c
@@ -1043,7 +1043,7 @@ static int htb_init(struct Qdisc *sch, struct nlattr *opt)
1043 1043
1044static int htb_dump(struct Qdisc *sch, struct sk_buff *skb) 1044static int htb_dump(struct Qdisc *sch, struct sk_buff *skb)
1045{ 1045{
1046 spinlock_t *root_lock = qdisc_root_lock(sch); 1046 spinlock_t *root_lock = qdisc_root_sleeping_lock(sch);
1047 struct htb_sched *q = qdisc_priv(sch); 1047 struct htb_sched *q = qdisc_priv(sch);
1048 struct nlattr *nest; 1048 struct nlattr *nest;
1049 struct tc_htb_glob gopt; 1049 struct tc_htb_glob gopt;
@@ -1075,7 +1075,7 @@ static int htb_dump_class(struct Qdisc *sch, unsigned long arg,
1075 struct sk_buff *skb, struct tcmsg *tcm) 1075 struct sk_buff *skb, struct tcmsg *tcm)
1076{ 1076{
1077 struct htb_class *cl = (struct htb_class *)arg; 1077 struct htb_class *cl = (struct htb_class *)arg;
1078 spinlock_t *root_lock = qdisc_root_lock(sch); 1078 spinlock_t *root_lock = qdisc_root_sleeping_lock(sch);
1079 struct nlattr *nest; 1079 struct nlattr *nest;
1080 struct tc_htb_opt opt; 1080 struct tc_htb_opt opt;
1081 1081
@@ -1372,7 +1372,7 @@ static int htb_change_class(struct Qdisc *sch, u32 classid,
1372 goto failure; 1372 goto failure;
1373 1373
1374 gen_new_estimator(&cl->bstats, &cl->rate_est, 1374 gen_new_estimator(&cl->bstats, &cl->rate_est,
1375 qdisc_root_lock(sch), 1375 qdisc_root_sleeping_lock(sch),
1376 tca[TCA_RATE] ? : &est.nla); 1376 tca[TCA_RATE] ? : &est.nla);
1377 cl->refcnt = 1; 1377 cl->refcnt = 1;
1378 cl->children = 0; 1378 cl->children = 0;
@@ -1427,7 +1427,7 @@ static int htb_change_class(struct Qdisc *sch, u32 classid,
1427 } else { 1427 } else {
1428 if (tca[TCA_RATE]) 1428 if (tca[TCA_RATE])
1429 gen_replace_estimator(&cl->bstats, &cl->rate_est, 1429 gen_replace_estimator(&cl->bstats, &cl->rate_est,
1430 qdisc_root_lock(sch), 1430 qdisc_root_sleeping_lock(sch),
1431 tca[TCA_RATE]); 1431 tca[TCA_RATE]);
1432 sch_tree_lock(sch); 1432 sch_tree_lock(sch);
1433 } 1433 }
diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c
index fb0294d0b55e..3781e55046d0 100644
--- a/net/sched/sch_netem.c
+++ b/net/sched/sch_netem.c
@@ -341,7 +341,7 @@ static int get_dist_table(struct Qdisc *sch, const struct nlattr *attr)
341 for (i = 0; i < n; i++) 341 for (i = 0; i < n; i++)
342 d->table[i] = data[i]; 342 d->table[i] = data[i];
343 343
344 root_lock = qdisc_root_lock(sch); 344 root_lock = qdisc_root_sleeping_lock(sch);
345 345
346 spin_lock_bh(root_lock); 346 spin_lock_bh(root_lock);
347 d = xchg(&q->delay_dist, d); 347 d = xchg(&q->delay_dist, d);
diff --git a/net/sched/sch_teql.c b/net/sched/sch_teql.c
index 2c35c678563b..d35ef059abb1 100644
--- a/net/sched/sch_teql.c
+++ b/net/sched/sch_teql.c
@@ -161,7 +161,7 @@ teql_destroy(struct Qdisc* sch)
161 txq = netdev_get_tx_queue(master->dev, 0); 161 txq = netdev_get_tx_queue(master->dev, 0);
162 master->slaves = NULL; 162 master->slaves = NULL;
163 163
164 root_lock = qdisc_root_lock(txq->qdisc); 164 root_lock = qdisc_root_sleeping_lock(txq->qdisc);
165 spin_lock_bh(root_lock); 165 spin_lock_bh(root_lock);
166 qdisc_reset(txq->qdisc); 166 qdisc_reset(txq->qdisc);
167 spin_unlock_bh(root_lock); 167 spin_unlock_bh(root_lock);
diff --git a/net/sctp/auth.c b/net/sctp/auth.c
index 675a5c3e68a6..52db5f60daa0 100644
--- a/net/sctp/auth.c
+++ b/net/sctp/auth.c
@@ -80,6 +80,10 @@ static struct sctp_auth_bytes *sctp_auth_create_key(__u32 key_len, gfp_t gfp)
80{ 80{
81 struct sctp_auth_bytes *key; 81 struct sctp_auth_bytes *key;
82 82
83 /* Verify that we are not going to overflow INT_MAX */
84 if ((INT_MAX - key_len) < sizeof(struct sctp_auth_bytes))
85 return NULL;
86
83 /* Allocate the shared key */ 87 /* Allocate the shared key */
84 key = kmalloc(sizeof(struct sctp_auth_bytes) + key_len, gfp); 88 key = kmalloc(sizeof(struct sctp_auth_bytes) + key_len, gfp);
85 if (!key) 89 if (!key)
@@ -782,6 +786,9 @@ int sctp_auth_ep_set_hmacs(struct sctp_endpoint *ep,
782 for (i = 0; i < hmacs->shmac_num_idents; i++) { 786 for (i = 0; i < hmacs->shmac_num_idents; i++) {
783 id = hmacs->shmac_idents[i]; 787 id = hmacs->shmac_idents[i];
784 788
789 if (id > SCTP_AUTH_HMAC_ID_MAX)
790 return -EOPNOTSUPP;
791
785 if (SCTP_AUTH_HMAC_ID_SHA1 == id) 792 if (SCTP_AUTH_HMAC_ID_SHA1 == id)
786 has_sha1 = 1; 793 has_sha1 = 1;
787 794
diff --git a/net/sctp/socket.c b/net/sctp/socket.c
index bb5c9ef13046..5ffb9dec1c3f 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -3086,6 +3086,7 @@ static int sctp_setsockopt_hmac_ident(struct sock *sk,
3086 int optlen) 3086 int optlen)
3087{ 3087{
3088 struct sctp_hmacalgo *hmacs; 3088 struct sctp_hmacalgo *hmacs;
3089 u32 idents;
3089 int err; 3090 int err;
3090 3091
3091 if (!sctp_auth_enable) 3092 if (!sctp_auth_enable)
@@ -3103,8 +3104,9 @@ static int sctp_setsockopt_hmac_ident(struct sock *sk,
3103 goto out; 3104 goto out;
3104 } 3105 }
3105 3106
3106 if (hmacs->shmac_num_idents == 0 || 3107 idents = hmacs->shmac_num_idents;
3107 hmacs->shmac_num_idents > SCTP_AUTH_NUM_HMACS) { 3108 if (idents == 0 || idents > SCTP_AUTH_NUM_HMACS ||
3109 (idents * sizeof(u16)) > (optlen - sizeof(struct sctp_hmacalgo))) {
3108 err = -EINVAL; 3110 err = -EINVAL;
3109 goto out; 3111 goto out;
3110 } 3112 }
@@ -3144,6 +3146,11 @@ static int sctp_setsockopt_auth_key(struct sock *sk,
3144 goto out; 3146 goto out;
3145 } 3147 }
3146 3148
3149 if (authkey->sca_keylength > optlen - sizeof(struct sctp_authkey)) {
3150 ret = -EINVAL;
3151 goto out;
3152 }
3153
3147 asoc = sctp_id2assoc(sk, authkey->sca_assoc_id); 3154 asoc = sctp_id2assoc(sk, authkey->sca_assoc_id);
3148 if (!asoc && authkey->sca_assoc_id && sctp_style(sk, UDP)) { 3155 if (!asoc && authkey->sca_assoc_id && sctp_style(sk, UDP)) {
3149 ret = -EINVAL; 3156 ret = -EINVAL;