Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6

* 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6:
Broadcom 4400 resume small fix
b44: src_desc->addr is little-endian
e100: fix irq leak on suspend/resume
bonding: ARP monitoring broken on x86_64
ehea: Fixed missing tasklet_kill() call
ehea: Fixed wrong jumbo frames status query
82596 warning fixes
FS_ENET: OF-related fixup for FEC and SCC MAC's
net: ifb error path loop fix
b44: Fix frequent link changes

+83 -40
+4 -3
drivers/net/82596.c
··· 1066 1066 short length = skb->len; 1067 1067 dev->trans_start = jiffies; 1068 1068 1069 - DEB(DEB_STARTTX,printk(KERN_DEBUG "%s: i596_start_xmit(%x,%x) called\n", dev->name, 1070 - skb->len, (unsigned int)skb->data)); 1069 + DEB(DEB_STARTTX,printk(KERN_DEBUG "%s: i596_start_xmit(%x,%p) called\n", 1070 + dev->name, skb->len, skb->data)); 1071 1071 1072 1072 if (skb->len < ETH_ZLEN) { 1073 1073 if (skb_padto(skb, ETH_ZLEN)) ··· 1246 1246 dev->priv = (void *)(dev->mem_start); 1247 1247 1248 1248 lp = dev->priv; 1249 - DEB(DEB_INIT,printk(KERN_DEBUG "%s: lp at 0x%08lx (%d bytes), lp->scb at 0x%08lx\n", 1249 + DEB(DEB_INIT,printk(KERN_DEBUG "%s: lp at 0x%08lx (%zd bytes), " 1250 + "lp->scb at 0x%08lx\n", 1250 1251 dev->name, (unsigned long)lp, 1251 1252 sizeof(struct i596_private), (unsigned long)&lp->scb)); 1252 1253 memset((void *) lp, 0, sizeof(struct i596_private));
+33 -17
drivers/net/b44.c
··· 110 110 111 111 static void b44_halt(struct b44 *); 112 112 static void b44_init_rings(struct b44 *); 113 + 114 + #define B44_FULL_RESET 1 115 + #define B44_FULL_RESET_SKIP_PHY 2 116 + #define B44_PARTIAL_RESET 3 117 + 113 118 static void b44_init_hw(struct b44 *, int); 114 119 115 120 static int dma_desc_align_mask; ··· 889 884 spin_lock_irqsave(&bp->lock, flags); 890 885 b44_halt(bp); 891 886 b44_init_rings(bp); 892 - b44_init_hw(bp, 1); 887 + b44_init_hw(bp, B44_FULL_RESET_SKIP_PHY); 893 888 netif_wake_queue(bp->dev); 894 889 spin_unlock_irqrestore(&bp->lock, flags); 895 890 done = 1; ··· 959 954 960 955 b44_halt(bp); 961 956 b44_init_rings(bp); 962 - b44_init_hw(bp, 1); 957 + b44_init_hw(bp, B44_FULL_RESET); 963 958 964 959 spin_unlock_irq(&bp->lock); 965 960 ··· 1076 1071 b44_halt(bp); 1077 1072 dev->mtu = new_mtu; 1078 1073 b44_init_rings(bp); 1079 - b44_init_hw(bp, 1); 1074 + b44_init_hw(bp, B44_FULL_RESET); 1080 1075 spin_unlock_irq(&bp->lock); 1081 1076 1082 1077 b44_enable_ints(bp); ··· 1373 1368 * packet processing. Invoked with bp->lock held. 1374 1369 */ 1375 1370 static void __b44_set_rx_mode(struct net_device *); 1376 - static void b44_init_hw(struct b44 *bp, int full_reset) 1371 + static void b44_init_hw(struct b44 *bp, int reset_kind) 1377 1372 { 1378 1373 u32 val; 1379 1374 1380 1375 b44_chip_reset(bp); 1381 - if (full_reset) { 1376 + if (reset_kind == B44_FULL_RESET) { 1382 1377 b44_phy_reset(bp); 1383 1378 b44_setup_phy(bp); 1384 1379 } ··· 1395 1390 bw32(bp, B44_TXMAXLEN, bp->dev->mtu + ETH_HLEN + 8 + RX_HEADER_LEN); 1396 1391 1397 1392 bw32(bp, B44_TX_WMARK, 56); /* XXX magic */ 1398 - if (full_reset) { 1393 + if (reset_kind == B44_PARTIAL_RESET) { 1394 + bw32(bp, B44_DMARX_CTRL, (DMARX_CTRL_ENABLE | 1395 + (bp->rx_offset << DMARX_CTRL_ROSHIFT))); 1396 + } else { 1399 1397 bw32(bp, B44_DMATX_CTRL, DMATX_CTRL_ENABLE); 1400 1398 bw32(bp, B44_DMATX_ADDR, bp->tx_ring_dma + bp->dma_offset); 1401 1399 bw32(bp, B44_DMARX_CTRL, (DMARX_CTRL_ENABLE | ··· 1409 1401 bp->rx_prod = bp->rx_pending; 1410 1402 1411 1403 bw32(bp, B44_MIB_CTRL, MIB_CTRL_CLR_ON_READ); 1412 - } else { 1413 - bw32(bp, B44_DMARX_CTRL, (DMARX_CTRL_ENABLE | 1414 - (bp->rx_offset << DMARX_CTRL_ROSHIFT))); 1415 1404 } 1416 1405 1417 1406 val = br32(bp, B44_ENET_CTRL); ··· 1425 1420 goto out; 1426 1421 1427 1422 b44_init_rings(bp); 1428 - b44_init_hw(bp, 1); 1423 + b44_init_hw(bp, B44_FULL_RESET); 1429 1424 1430 1425 b44_check_phy(bp); 1431 1426 ··· 1634 1629 netif_poll_enable(dev); 1635 1630 1636 1631 if (bp->flags & B44_FLAG_WOL_ENABLE) { 1637 - b44_init_hw(bp, 0); 1632 + b44_init_hw(bp, B44_PARTIAL_RESET); 1638 1633 b44_setup_wol(bp); 1639 1634 } 1640 1635 ··· 1910 1905 1911 1906 b44_halt(bp); 1912 1907 b44_init_rings(bp); 1913 - b44_init_hw(bp, 1); 1908 + b44_init_hw(bp, B44_FULL_RESET); 1914 1909 netif_wake_queue(bp->dev); 1915 1910 spin_unlock_irq(&bp->lock); 1916 1911 ··· 1953 1948 if (bp->flags & B44_FLAG_PAUSE_AUTO) { 1954 1949 b44_halt(bp); 1955 1950 b44_init_rings(bp); 1956 - b44_init_hw(bp, 1); 1951 + b44_init_hw(bp, B44_FULL_RESET); 1957 1952 } else { 1958 1953 __b44_set_flow_ctrl(bp, bp->flags); 1959 1954 } ··· 2309 2304 2310 2305 free_irq(dev->irq, dev); 2311 2306 if (bp->flags & B44_FLAG_WOL_ENABLE) { 2312 - b44_init_hw(bp, 0); 2307 + b44_init_hw(bp, B44_PARTIAL_RESET); 2313 2308 b44_setup_wol(bp); 2314 2309 } 2315 2310 pci_disable_device(pdev); ··· 2320 2315 { 2321 2316 struct net_device *dev = pci_get_drvdata(pdev); 2322 2317 struct b44 *bp = netdev_priv(dev); 2318 + int rc = 0; 2323 2319 2324 2320 pci_restore_state(pdev); 2325 - pci_enable_device(pdev); 2321 + rc = pci_enable_device(pdev); 2322 + if (rc) { 2323 + printk(KERN_ERR PFX "%s: pci_enable_device failed\n", 2324 + dev->name); 2325 + return rc; 2326 + } 2327 + 2326 2328 pci_set_master(pdev); 2327 2329 2328 2330 if (!netif_running(dev)) 2329 2331 return 0; 2330 2332 2331 - if (request_irq(dev->irq, b44_interrupt, IRQF_SHARED, dev->name, dev)) 2333 + rc = request_irq(dev->irq, b44_interrupt, IRQF_SHARED, dev->name, dev); 2334 + if (rc) { 2332 2335 printk(KERN_ERR PFX "%s: request_irq failed\n", dev->name); 2336 + pci_disable_device(pdev); 2337 + return rc; 2338 + } 2333 2339 2334 2340 spin_lock_irq(&bp->lock); 2335 2341 2336 2342 b44_init_rings(bp); 2337 - b44_init_hw(bp, 1); 2343 + b44_init_hw(bp, B44_FULL_RESET); 2338 2344 netif_device_attach(bp->dev); 2339 2345 spin_unlock_irq(&bp->lock); 2340 2346
+4 -3
drivers/net/bonding/bonding.h
··· 151 151 struct slave *next; 152 152 struct slave *prev; 153 153 int delay; 154 - u32 jiffies; 155 - u32 last_arp_rx; 154 + unsigned long jiffies; 155 + unsigned long last_arp_rx; 156 156 s8 link; /* one of BOND_LINK_XXXX */ 157 157 s8 state; /* one of BOND_STATE_XXXX */ 158 158 u32 original_flags; ··· 242 242 return bond->params.arp_validate & (1 << slave->state); 243 243 } 244 244 245 - extern inline u32 slave_last_rx(struct bonding *bond, struct slave *slave) 245 + extern inline unsigned long slave_last_rx(struct bonding *bond, 246 + struct slave *slave) 246 247 { 247 248 if (slave_do_arp_validate(bond, slave)) 248 249 return slave->last_arp_rx;
+2
drivers/net/e100.c
··· 2725 2725 del_timer_sync(&nic->watchdog); 2726 2726 netif_carrier_off(nic->netdev); 2727 2727 2728 + netif_device_detach(netdev); 2728 2729 pci_save_state(pdev); 2729 2730 2730 2731 if ((nic->flags & wol_magic) | e100_asf(nic)) { ··· 2737 2736 } 2738 2737 2739 2738 pci_disable_device(pdev); 2739 + free_irq(pdev->irq, netdev); 2740 2740 pci_set_power_state(pdev, PCI_D3hot); 2741 2741 2742 2742 return 0;
+1 -1
drivers/net/ehea/ehea.h
··· 39 39 #include <asm/io.h> 40 40 41 41 #define DRV_NAME "ehea" 42 - #define DRV_VERSION "EHEA_0044" 42 + #define DRV_VERSION "EHEA_0045" 43 43 44 44 #define EHEA_MSG_DEFAULT (NETIF_MSG_LINK | NETIF_MSG_TIMER \ 45 45 | NETIF_MSG_RX_ERR | NETIF_MSG_TX_ERR)
+24 -7
drivers/net/ehea/ehea_main.c
··· 2316 2316 struct ehea_adapter *adapter = port->adapter; 2317 2317 struct hcp_ehea_port_cb4 *cb4; 2318 2318 u32 *dn_log_port_id; 2319 + int jumbo = 0; 2319 2320 2320 2321 sema_init(&port->port_lock, 1); 2321 2322 port->state = EHEA_PORT_DOWN; ··· 2358 2357 if (!cb4) { 2359 2358 ehea_error("no mem for cb4"); 2360 2359 } else { 2361 - cb4->jumbo_frame = 1; 2362 - hret = ehea_h_modify_ehea_port(adapter->handle, 2363 - port->logical_port_id, 2364 - H_PORT_CB4, H_PORT_CB4_JUMBO, 2365 - cb4); 2366 - if (hret != H_SUCCESS) { 2367 - ehea_info("Jumbo frames not activated"); 2360 + hret = ehea_h_query_ehea_port(adapter->handle, 2361 + port->logical_port_id, 2362 + H_PORT_CB4, 2363 + H_PORT_CB4_JUMBO, cb4); 2364 + 2365 + if (hret == H_SUCCESS) { 2366 + if (cb4->jumbo_frame) 2367 + jumbo = 1; 2368 + else { 2369 + cb4->jumbo_frame = 1; 2370 + hret = ehea_h_modify_ehea_port(adapter->handle, 2371 + port-> 2372 + logical_port_id, 2373 + H_PORT_CB4, 2374 + H_PORT_CB4_JUMBO, 2375 + cb4); 2376 + if (hret == H_SUCCESS) 2377 + jumbo = 1; 2378 + } 2368 2379 } 2369 2380 kfree(cb4); 2370 2381 } ··· 2414 2401 ehea_error("register_netdev failed. ret=%d", ret); 2415 2402 goto out_free; 2416 2403 } 2404 + 2405 + ehea_info("%s: Jumbo frames are %sabled", dev->name, 2406 + jumbo == 1 ? "en" : "dis"); 2417 2407 2418 2408 port->netdev = dev; 2419 2409 ret = 0; ··· 2598 2582 destroy_workqueue(adapter->ehea_wq); 2599 2583 2600 2584 ibmebus_free_irq(NULL, adapter->neq->attr.ist1, adapter); 2585 + tasklet_kill(&adapter->neq_tasklet); 2601 2586 2602 2587 ehea_destroy_eq(adapter->neq); 2603 2588
+9 -4
drivers/net/fs_enet/mac-fec.c
··· 104 104 fep->interrupt = platform_get_irq_byname(pdev,"interrupt"); 105 105 if (fep->interrupt < 0) 106 106 return -EINVAL; 107 - 107 + 108 108 r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "regs"); 109 - fep->fec.fecp =(void*)r->start; 109 + fep->fec.fecp = ioremap(r->start, r->end - r->start + 1); 110 110 111 111 if(fep->fec.fecp == NULL) 112 112 return -EINVAL; ··· 319 319 * Clear any outstanding interrupt. 320 320 */ 321 321 FW(fecp, ievent, 0xffc0); 322 + #ifndef CONFIG_PPC_MERGE 322 323 FW(fecp, ivec, (fep->interrupt / 2) << 29); 323 - 324 + #else 325 + FW(fecp, ivec, (virq_to_hw(fep->interrupt) / 2) << 29); 326 + #endif 324 327 325 328 /* 326 - * adjust to speed (only for DUET & RMII) 329 + * adjust to speed (only for DUET & RMII) 327 330 */ 328 331 #ifdef CONFIG_DUET 329 332 if (fpi->use_rmii) { ··· 421 418 422 419 static void pre_request_irq(struct net_device *dev, int irq) 423 420 { 421 + #ifndef CONFIG_PPC_MERGE 424 422 immap_t *immap = fs_enet_immap; 425 423 u32 siel; 426 424 ··· 435 431 siel &= ~(0x80000000 >> (irq & ~1)); 436 432 out_be32(&immap->im_siu_conf.sc_siel, siel); 437 433 } 434 + #endif 438 435 } 439 436 440 437 static void post_free_irq(struct net_device *dev, int irq)
+4 -2
drivers/net/fs_enet/mac-scc.c
··· 121 121 return -EINVAL; 122 122 123 123 r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "regs"); 124 - fep->scc.sccp = (void *)r->start; 124 + fep->scc.sccp = ioremap(r->start, r->end - r->start + 1); 125 125 126 126 if (fep->scc.sccp == NULL) 127 127 return -EINVAL; 128 128 129 129 r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pram"); 130 - fep->scc.ep = (void *)r->start; 130 + fep->scc.ep = ioremap(r->start, r->end - r->start + 1); 131 131 132 132 if (fep->scc.ep == NULL) 133 133 return -EINVAL; ··· 397 397 398 398 static void pre_request_irq(struct net_device *dev, int irq) 399 399 { 400 + #ifndef CONFIG_PPC_MERGE 400 401 immap_t *immap = fs_enet_immap; 401 402 u32 siel; 402 403 ··· 411 410 siel &= ~(0x80000000 >> (irq & ~1)); 412 411 out_be32(&immap->im_siu_conf.sc_siel, siel); 413 412 } 413 + #endif 414 414 } 415 415 416 416 static void post_free_irq(struct net_device *dev, int irq)
+1 -2
drivers/net/ifb.c
··· 271 271 for (i = 0; i < numifbs && !err; i++) 272 272 err = ifb_init_one(i); 273 273 if (err) { 274 - i--; 275 - while (--i >= 0) 274 + while (i--) 276 275 ifb_free_one(i); 277 276 } 278 277
+1 -1
drivers/net/phy/fixed.c
··· 349 349 fixed_mdio_register_device(0, 100, 1); 350 350 #endif 351 351 352 - #ifdef CONFIX_FIXED_MII_10_FDX 352 + #ifdef CONFIG_FIXED_MII_10_FDX 353 353 fixed_mdio_register_device(0, 10, 1); 354 354 #endif 355 355 return 0;