Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'for-jeff' of git://electric-eye.fr.zoreil.com/home/romieu/linux-2.6

+34 -24
+21 -11
drivers/net/sky2.c
··· 74 74 #define TX_RING_SIZE 512 75 75 #define TX_DEF_PENDING (TX_RING_SIZE - 1) 76 76 #define TX_MIN_PENDING 64 77 - #define MAX_SKB_TX_LE (4 + 2*MAX_SKB_FRAGS) 77 + #define MAX_SKB_TX_LE (4 + (sizeof(dma_addr_t)/sizeof(u32))*MAX_SKB_FRAGS) 78 78 79 79 #define STATUS_RING_SIZE 2048 /* 2 ports * (TX + 2*RX) */ 80 80 #define STATUS_LE_BYTES (STATUS_RING_SIZE*sizeof(struct sky2_status_le)) ··· 622 622 623 623 /* Configure Rx MAC FIFO */ 624 624 sky2_write8(hw, SK_REG(port, RX_GMF_CTRL_T), GMF_RST_CLR); 625 - sky2_write16(hw, SK_REG(port, RX_GMF_CTRL_T), 626 - GMF_RX_CTRL_DEF); 625 + sky2_write32(hw, SK_REG(port, RX_GMF_CTRL_T), 626 + GMF_OPER_ON | GMF_RX_F_FL_ON); 627 627 628 628 /* Flush Rx MAC FIFO on any flow control or error */ 629 629 sky2_write16(hw, SK_REG(port, RX_GMF_FL_MSK), GMR_FS_ANY_ERR); ··· 995 995 sky2_rx_add(sky2, re->mapaddr); 996 996 } 997 997 998 + /* Truncate oversize frames */ 999 + sky2_write16(hw, SK_REG(sky2->port, RX_GMF_TR_THR), sky2->rx_bufsize - 8); 1000 + sky2_write32(hw, SK_REG(sky2->port, RX_GMF_CTRL_T), RX_TRUNC_ON); 1001 + 998 1002 /* Tell chip about available buffers */ 999 1003 sky2_write16(hw, Y2_QADDR(rxq, PREF_UNIT_PUT_IDX), sky2->rx_put); 1000 1004 sky2->rx_last_put = sky2_read16(hw, Y2_QADDR(rxq, PREF_UNIT_PUT_IDX)); ··· 1149 1145 struct sky2_tx_le *le = NULL; 1150 1146 struct tx_ring_info *re; 1151 1147 unsigned i, len; 1148 + int avail; 1152 1149 dma_addr_t mapping; 1153 1150 u32 addr64; 1154 1151 u16 mss; ··· 1292 1287 re->idx = sky2->tx_prod; 1293 1288 le->ctrl |= EOP; 1294 1289 1290 + avail = tx_avail(sky2); 1291 + if (mss != 0 || avail < TX_MIN_PENDING) { 1292 + le->ctrl |= FRC_STAT; 1293 + if (avail <= MAX_SKB_TX_LE) 1294 + netif_stop_queue(dev); 1295 + } 1296 + 1295 1297 sky2_put_idx(hw, txqaddr[sky2->port], sky2->tx_prod, 1296 1298 &sky2->tx_last_put, TX_RING_SIZE); 1297 - 1298 - if (tx_avail(sky2) <= MAX_SKB_TX_LE) 1299 - netif_stop_queue(dev); 1300 1299 1301 1300 out_unlock: 1302 1301 spin_unlock(&sky2->tx_lock); ··· 1716 1707 1717 1708 1718 1709 #define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) 1719 - /* Want receive buffer size to be multiple of 64 bits, and incl room for vlan */ 1710 + /* Want receive buffer size to be multiple of 64 bits 1711 + * and incl room for vlan and truncation 1712 + */ 1720 1713 static inline unsigned sky2_buf_size(int mtu) 1721 1714 { 1722 - return roundup(mtu + ETH_HLEN + 4, 8); 1715 + return roundup(mtu + ETH_HLEN + VLAN_HLEN, 8) + 8; 1723 1716 } 1724 1717 1725 1718 static int sky2_change_mtu(struct net_device *dev, int new_mtu) ··· 1804 1793 if (!(status & GMR_FS_RX_OK)) 1805 1794 goto resubmit; 1806 1795 1807 - if ((status >> 16) != length || length > sky2->rx_bufsize) 1796 + if (length > sky2->netdev->mtu + ETH_HLEN) 1808 1797 goto oversize; 1809 1798 1810 1799 if (length < copybreak) { ··· 3254 3243 } 3255 3244 } 3256 3245 3257 - err = request_irq(pdev->irq, sky2_intr, SA_SHIRQ | SA_SAMPLE_RANDOM, 3258 - DRV_NAME, hw); 3246 + err = request_irq(pdev->irq, sky2_intr, SA_SHIRQ, DRV_NAME, hw); 3259 3247 if (err) { 3260 3248 printk(KERN_ERR PFX "%s: cannot assign irq %d\n", 3261 3249 pci_name(pdev), pdev->irq);
+13 -13
drivers/net/tulip/de2104x.c
··· 1362 1362 { 1363 1363 struct de_private *de = dev->priv; 1364 1364 int rc; 1365 - unsigned long flags; 1366 1365 1367 1366 if (netif_msg_ifup(de)) 1368 1367 printk(KERN_DEBUG "%s: enabling interface\n", dev->name); ··· 1375 1376 return rc; 1376 1377 } 1377 1378 1378 - rc = de_init_hw(de); 1379 - if (rc) { 1380 - printk(KERN_ERR "%s: h/w init failure, err=%d\n", 1381 - dev->name, rc); 1382 - goto err_out_free; 1383 - } 1379 + dw32(IntrMask, 0); 1384 1380 1385 1381 rc = request_irq(dev->irq, de_interrupt, SA_SHIRQ, dev->name, dev); 1386 1382 if (rc) { 1387 1383 printk(KERN_ERR "%s: IRQ %d request failure, err=%d\n", 1388 1384 dev->name, dev->irq, rc); 1389 - goto err_out_hw; 1385 + goto err_out_free; 1386 + } 1387 + 1388 + rc = de_init_hw(de); 1389 + if (rc) { 1390 + printk(KERN_ERR "%s: h/w init failure, err=%d\n", 1391 + dev->name, rc); 1392 + goto err_out_free_irq; 1390 1393 } 1391 1394 1392 1395 netif_start_queue(dev); ··· 1396 1395 1397 1396 return 0; 1398 1397 1399 - err_out_hw: 1400 - spin_lock_irqsave(&de->lock, flags); 1401 - de_stop_hw(de); 1402 - spin_unlock_irqrestore(&de->lock, flags); 1403 - 1398 + err_out_free_irq: 1399 + free_irq(dev->irq, dev); 1404 1400 err_out_free: 1405 1401 de_free_rings(de); 1406 1402 return rc; ··· 1452 1454 1453 1455 synchronize_irq(dev->irq); 1454 1456 de_clean_rings(de); 1457 + 1458 + de_init_rings(de); 1455 1459 1456 1460 de_init_hw(de); 1457 1461