forked from Minki/linux
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: e1000: Add device IDs of new 82571 board variants xen-netfront: Avoid deref'ing skbafter it is potentially freed. 3c59x maintainer 3c59x: fix duplex configuration natsemi: fix netdev error acounting ax88796 printk fixes myri10ge: Use the pause counter to avoid a needless device reset via-rhine: disable rx_copybreak on archs that don't allow unaligned DMA access
This commit is contained in:
commit
c4e7ac5d42
@ -97,6 +97,12 @@ M: philb@gnu.org
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
3C59X NETWORK DRIVER
|
||||
P: Steffen Klassert
|
||||
M: klassert@mathematik.tu-chemnitz.de
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
3CR990 NETWORK DRIVER
|
||||
P: David Dillow
|
||||
M: dave@thedillows.org
|
||||
|
@ -1555,6 +1555,7 @@ vortex_up(struct net_device *dev)
|
||||
mii_reg1 = mdio_read(dev, vp->phys[0], MII_BMSR);
|
||||
mii_reg5 = mdio_read(dev, vp->phys[0], MII_LPA);
|
||||
vp->partner_flow_ctrl = ((mii_reg5 & 0x0400) != 0);
|
||||
vp->mii.full_duplex = vp->full_duplex;
|
||||
|
||||
vortex_check_media(dev, 1);
|
||||
}
|
||||
|
@ -821,8 +821,9 @@ static int ax_probe(struct platform_device *pdev)
|
||||
dev->base_addr = (unsigned long)ei_status.mem;
|
||||
|
||||
if (ei_status.mem == NULL) {
|
||||
dev_err(&pdev->dev, "Cannot ioremap area (%08zx,%08zx)\n",
|
||||
res->start, res->end);
|
||||
dev_err(&pdev->dev, "Cannot ioremap area (%08llx,%08llx)\n",
|
||||
(unsigned long long)res->start,
|
||||
(unsigned long long)res->end);
|
||||
|
||||
ret = -ENXIO;
|
||||
goto exit_req;
|
||||
|
@ -1706,6 +1706,7 @@ static int e1000_wol_exclusion(struct e1000_adapter *adapter, struct ethtool_wol
|
||||
case E1000_DEV_ID_82545EM_COPPER:
|
||||
case E1000_DEV_ID_82546GB_QUAD_COPPER:
|
||||
case E1000_DEV_ID_82546GB_PCIE:
|
||||
case E1000_DEV_ID_82571EB_SERDES_QUAD:
|
||||
/* these don't support WoL at all */
|
||||
wol->supported = 0;
|
||||
break;
|
||||
@ -1723,6 +1724,7 @@ static int e1000_wol_exclusion(struct e1000_adapter *adapter, struct ethtool_wol
|
||||
retval = 0;
|
||||
break;
|
||||
case E1000_DEV_ID_82571EB_QUAD_COPPER:
|
||||
case E1000_DEV_ID_82571EB_QUAD_FIBER:
|
||||
case E1000_DEV_ID_82571EB_QUAD_COPPER_LOWPROFILE:
|
||||
case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3:
|
||||
/* quad port adapters only support WoL on port A */
|
||||
|
@ -384,7 +384,10 @@ e1000_set_mac_type(struct e1000_hw *hw)
|
||||
case E1000_DEV_ID_82571EB_COPPER:
|
||||
case E1000_DEV_ID_82571EB_FIBER:
|
||||
case E1000_DEV_ID_82571EB_SERDES:
|
||||
case E1000_DEV_ID_82571EB_SERDES_DUAL:
|
||||
case E1000_DEV_ID_82571EB_SERDES_QUAD:
|
||||
case E1000_DEV_ID_82571EB_QUAD_COPPER:
|
||||
case E1000_DEV_ID_82571EB_QUAD_FIBER:
|
||||
case E1000_DEV_ID_82571EB_QUAD_COPPER_LOWPROFILE:
|
||||
hw->mac_type = e1000_82571;
|
||||
break;
|
||||
@ -485,6 +488,8 @@ e1000_set_media_type(struct e1000_hw *hw)
|
||||
case E1000_DEV_ID_82545GM_SERDES:
|
||||
case E1000_DEV_ID_82546GB_SERDES:
|
||||
case E1000_DEV_ID_82571EB_SERDES:
|
||||
case E1000_DEV_ID_82571EB_SERDES_DUAL:
|
||||
case E1000_DEV_ID_82571EB_SERDES_QUAD:
|
||||
case E1000_DEV_ID_82572EI_SERDES:
|
||||
case E1000_DEV_ID_80003ES2LAN_SERDES_DPT:
|
||||
hw->media_type = e1000_media_type_internal_serdes;
|
||||
|
@ -475,7 +475,10 @@ int32_t e1000_check_phy_reset_block(struct e1000_hw *hw);
|
||||
#define E1000_DEV_ID_82571EB_FIBER 0x105F
|
||||
#define E1000_DEV_ID_82571EB_SERDES 0x1060
|
||||
#define E1000_DEV_ID_82571EB_QUAD_COPPER 0x10A4
|
||||
#define E1000_DEV_ID_82571EB_QUAD_FIBER 0x10A5
|
||||
#define E1000_DEV_ID_82571EB_QUAD_COPPER_LOWPROFILE 0x10BC
|
||||
#define E1000_DEV_ID_82571EB_SERDES_DUAL 0x10D9
|
||||
#define E1000_DEV_ID_82571EB_SERDES_QUAD 0x10DA
|
||||
#define E1000_DEV_ID_82572EI_COPPER 0x107D
|
||||
#define E1000_DEV_ID_82572EI_FIBER 0x107E
|
||||
#define E1000_DEV_ID_82572EI_SERDES 0x107F
|
||||
|
@ -100,6 +100,7 @@ static struct pci_device_id e1000_pci_tbl[] = {
|
||||
INTEL_E1000_ETHERNET_DEVICE(0x1099),
|
||||
INTEL_E1000_ETHERNET_DEVICE(0x109A),
|
||||
INTEL_E1000_ETHERNET_DEVICE(0x10A4),
|
||||
INTEL_E1000_ETHERNET_DEVICE(0x10A5),
|
||||
INTEL_E1000_ETHERNET_DEVICE(0x10B5),
|
||||
INTEL_E1000_ETHERNET_DEVICE(0x10B9),
|
||||
INTEL_E1000_ETHERNET_DEVICE(0x10BA),
|
||||
@ -107,6 +108,8 @@ static struct pci_device_id e1000_pci_tbl[] = {
|
||||
INTEL_E1000_ETHERNET_DEVICE(0x10BC),
|
||||
INTEL_E1000_ETHERNET_DEVICE(0x10C4),
|
||||
INTEL_E1000_ETHERNET_DEVICE(0x10C5),
|
||||
INTEL_E1000_ETHERNET_DEVICE(0x10D9),
|
||||
INTEL_E1000_ETHERNET_DEVICE(0x10DA),
|
||||
/* required last entry */
|
||||
{0,}
|
||||
};
|
||||
@ -1096,6 +1099,7 @@ e1000_probe(struct pci_dev *pdev,
|
||||
break;
|
||||
case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3:
|
||||
case E1000_DEV_ID_82571EB_QUAD_COPPER:
|
||||
case E1000_DEV_ID_82571EB_QUAD_FIBER:
|
||||
case E1000_DEV_ID_82571EB_QUAD_COPPER_LOWPROFILE:
|
||||
/* if quad port adapter, disable WoL on all but port A */
|
||||
if (global_quad_port_a != 0)
|
||||
|
@ -191,6 +191,7 @@ struct myri10ge_priv {
|
||||
struct timer_list watchdog_timer;
|
||||
int watchdog_tx_done;
|
||||
int watchdog_tx_req;
|
||||
int watchdog_pause;
|
||||
int watchdog_resets;
|
||||
int tx_linearized;
|
||||
int pause;
|
||||
@ -2800,6 +2801,7 @@ static void myri10ge_watchdog(struct work_struct *work)
|
||||
static void myri10ge_watchdog_timer(unsigned long arg)
|
||||
{
|
||||
struct myri10ge_priv *mgp;
|
||||
u32 rx_pause_cnt;
|
||||
|
||||
mgp = (struct myri10ge_priv *)arg;
|
||||
|
||||
@ -2816,19 +2818,28 @@ static void myri10ge_watchdog_timer(unsigned long arg)
|
||||
myri10ge_fill_thresh)
|
||||
mgp->rx_big.watchdog_needed = 0;
|
||||
}
|
||||
rx_pause_cnt = ntohl(mgp->fw_stats->dropped_pause);
|
||||
|
||||
if (mgp->tx.req != mgp->tx.done &&
|
||||
mgp->tx.done == mgp->watchdog_tx_done &&
|
||||
mgp->watchdog_tx_req != mgp->watchdog_tx_done)
|
||||
mgp->watchdog_tx_req != mgp->watchdog_tx_done) {
|
||||
/* nic seems like it might be stuck.. */
|
||||
schedule_work(&mgp->watchdog_work);
|
||||
else
|
||||
/* rearm timer */
|
||||
mod_timer(&mgp->watchdog_timer,
|
||||
jiffies + myri10ge_watchdog_timeout * HZ);
|
||||
|
||||
if (rx_pause_cnt != mgp->watchdog_pause) {
|
||||
if (net_ratelimit())
|
||||
printk(KERN_WARNING "myri10ge %s:"
|
||||
"TX paused, check link partner\n",
|
||||
mgp->dev->name);
|
||||
} else {
|
||||
schedule_work(&mgp->watchdog_work);
|
||||
return;
|
||||
}
|
||||
}
|
||||
/* rearm timer */
|
||||
mod_timer(&mgp->watchdog_timer,
|
||||
jiffies + myri10ge_watchdog_timeout * HZ);
|
||||
mgp->watchdog_tx_done = mgp->tx.done;
|
||||
mgp->watchdog_tx_req = mgp->tx.req;
|
||||
mgp->watchdog_pause = rx_pause_cnt;
|
||||
}
|
||||
|
||||
static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
|
@ -2438,13 +2438,16 @@ static void netdev_error(struct net_device *dev, int intr_status)
|
||||
dev->name);
|
||||
}
|
||||
np->stats.rx_fifo_errors++;
|
||||
np->stats.rx_errors++;
|
||||
}
|
||||
/* Hmmmmm, it's not clear how to recover from PCI faults. */
|
||||
if (intr_status & IntrPCIErr) {
|
||||
printk(KERN_NOTICE "%s: PCI error %#08x\n", dev->name,
|
||||
intr_status & IntrPCIErr);
|
||||
np->stats.tx_fifo_errors++;
|
||||
np->stats.tx_errors++;
|
||||
np->stats.rx_fifo_errors++;
|
||||
np->stats.rx_errors++;
|
||||
}
|
||||
spin_unlock(&np->lock);
|
||||
}
|
||||
|
@ -42,7 +42,13 @@ static int max_interrupt_work = 20;
|
||||
|
||||
/* Set the copy breakpoint for the copy-only-tiny-frames scheme.
|
||||
Setting to > 1518 effectively disables this feature. */
|
||||
#if defined(__alpha__) || defined(__arm__) || defined(__hppa__) \
|
||||
|| defined(CONFIG_SPARC) || defined(__ia64__) \
|
||||
|| defined(__sh__) || defined(__mips__)
|
||||
static int rx_copybreak = 1518;
|
||||
#else
|
||||
static int rx_copybreak;
|
||||
#endif
|
||||
|
||||
/* Work-around for broken BIOSes: they are unable to get the chip back out of
|
||||
power state D3 so PXE booting fails. bootparam(7): via-rhine.avoid_D3=1 */
|
||||
|
@ -566,6 +566,10 @@ static int xennet_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
if (notify)
|
||||
notify_remote_via_irq(np->netdev->irq);
|
||||
|
||||
np->stats.tx_bytes += skb->len;
|
||||
np->stats.tx_packets++;
|
||||
|
||||
/* Note: It is not safe to access skb after xennet_tx_buf_gc()! */
|
||||
xennet_tx_buf_gc(dev);
|
||||
|
||||
if (!netfront_tx_slot_available(np))
|
||||
@ -573,9 +577,6 @@ static int xennet_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
|
||||
spin_unlock_irq(&np->tx_lock);
|
||||
|
||||
np->stats.tx_bytes += skb->len;
|
||||
np->stats.tx_packets++;
|
||||
|
||||
return 0;
|
||||
|
||||
drop:
|
||||
|
Loading…
Reference in New Issue
Block a user