Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 25678 Details for
Bug 41577
e1000 locks up the system (Intel Gigabit onboard adapter)
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
The new patch
e1000.linux-2.6.3_rc1-linux-2.6.2_rc2.diff (text/plain), 14.14 KB, created by
Nick Demchenko
on 2004-02-15 11:53:21 UTC
(
hide
)
Description:
The new patch
Filename:
MIME Type:
Creator:
Nick Demchenko
Created:
2004-02-15 11:53:21 UTC
Size:
14.14 KB
patch
obsolete
>diff -urNad /usr/src/linux-2.6.3-rc1/drivers/net/e1000/e1000.h /usr/src/linux-2.6.2-rc2-mm1/drivers/net/e1000/e1000.h >--- /usr/src/linux-2.6.3-rc1/drivers/net/e1000/e1000.h 2004-02-08 16:02:01.000000000 +0100 >+++ /usr/src/linux-2.6.2-rc2-mm1/drivers/net/e1000/e1000.h 2004-02-14 22:03:03.000000000 +0100 >@@ -1,7 +1,7 @@ > /******************************************************************************* > > >- Copyright(c) 1999 - 2004 Intel Corporation. All rights reserved. >+ Copyright(c) 1999 - 2003 Intel Corporation. All rights reserved. > > This program is free software; you can redistribute it and/or modify it > under the terms of the GNU General Public License as published by the Free >@@ -202,14 +202,10 @@ > > /* TX */ > struct e1000_desc_ring tx_ring; >- spinlock_t tx_lock; > uint32_t txd_cmd; > uint32_t tx_int_delay; > uint32_t tx_abs_int_delay; > uint32_t gotcl; >- uint64_t gotcl_old; >- uint64_t tpt_old; >- uint64_t colc_old; > uint32_t tx_fifo_head; > uint32_t tx_head_addr; > uint32_t tx_fifo_size; >@@ -224,7 +220,6 @@ > uint32_t rx_abs_int_delay; > boolean_t rx_csum; > uint32_t gorcl; >- uint64_t gorcl_old; > > /* Interrupt Throttle Rate */ > uint32_t itr; >diff -urNad /usr/src/linux-2.6.3-rc1/drivers/net/e1000/e1000_ethtool.c /usr/src/linux-2.6.2-rc2-mm1/drivers/net/e1000/e1000_ethtool.c >--- /usr/src/linux-2.6.3-rc1/drivers/net/e1000/e1000_ethtool.c 2004-02-08 16:02:01.000000000 +0100 >+++ /usr/src/linux-2.6.2-rc2-mm1/drivers/net/e1000/e1000_ethtool.c 2004-02-14 22:03:03.000000000 +0100 >@@ -1,7 +1,7 @@ > /******************************************************************************* > > >- Copyright(c) 1999 - 2004 Intel Corporation. All rights reserved. >+ Copyright(c) 1999 - 2003 Intel Corporation. All rights reserved. > > This program is free software; you can redistribute it and/or modify it > under the terms of the GNU General Public License as published by the Free >@@ -43,7 +43,6 @@ > extern int e1000_setup_tx_resources(struct e1000_adapter *adapter); > extern void e1000_free_rx_resources(struct e1000_adapter *adapter); > extern void e1000_free_tx_resources(struct e1000_adapter *adapter); >-extern void e1000_update_stats(struct e1000_adapter *adapter); > > struct e1000_stats { > char stat_string[ETH_GSTRING_LEN]; >@@ -1605,7 +1604,6 @@ > } stats = { {ETHTOOL_GSTATS, E1000_STATS_LEN} }; > int i; > >- e1000_update_stats(adapter); > for(i = 0; i < E1000_STATS_LEN; i++) > stats.data[i] = (e1000_gstrings_stats[i].sizeof_stat == > sizeof(uint64_t)) ? >diff -urNad /usr/src/linux-2.6.3-rc1/drivers/net/e1000/e1000_hw.c /usr/src/linux-2.6.2-rc2-mm1/drivers/net/e1000/e1000_hw.c >--- /usr/src/linux-2.6.3-rc1/drivers/net/e1000/e1000_hw.c 2004-02-08 16:02:01.000000000 +0100 >+++ /usr/src/linux-2.6.2-rc2-mm1/drivers/net/e1000/e1000_hw.c 2004-02-14 22:03:03.000000000 +0100 >@@ -1,7 +1,7 @@ > /******************************************************************************* > > >- Copyright(c) 1999 - 2004 Intel Corporation. All rights reserved. >+ Copyright(c) 1999 - 2003 Intel Corporation. All rights reserved. > > This program is free software; you can redistribute it and/or modify it > under the terms of the GNU General Public License as published by the Free >diff -urNad /usr/src/linux-2.6.3-rc1/drivers/net/e1000/e1000_hw.h /usr/src/linux-2.6.2-rc2-mm1/drivers/net/e1000/e1000_hw.h >--- /usr/src/linux-2.6.3-rc1/drivers/net/e1000/e1000_hw.h 2004-02-08 16:02:01.000000000 +0100 >+++ /usr/src/linux-2.6.2-rc2-mm1/drivers/net/e1000/e1000_hw.h 2004-02-14 22:03:03.000000000 +0100 >@@ -1,7 +1,7 @@ > /******************************************************************************* > > >- Copyright(c) 1999 - 2004 Intel Corporation. All rights reserved. >+ Copyright(c) 1999 - 2003 Intel Corporation. All rights reserved. > > This program is free software; you can redistribute it and/or modify it > under the terms of the GNU General Public License as published by the Free >diff -urNad /usr/src/linux-2.6.3-rc1/drivers/net/e1000/e1000_main.c /usr/src/linux-2.6.2-rc2-mm1/drivers/net/e1000/e1000_main.c >--- /usr/src/linux-2.6.3-rc1/drivers/net/e1000/e1000_main.c 2004-02-08 16:02:01.000000000 +0100 >+++ /usr/src/linux-2.6.2-rc2-mm1/drivers/net/e1000/e1000_main.c 2004-02-14 22:03:03.000000000 +0100 >@@ -1,7 +1,7 @@ > /******************************************************************************* > > >- Copyright(c) 1999 - 2004 Intel Corporation. All rights reserved. >+ Copyright(c) 1999 - 2003 Intel Corporation. All rights reserved. > > This program is free software; you can redistribute it and/or modify it > under the terms of the GNU General Public License as published by the Free >@@ -30,12 +30,7 @@ > > /* Change Log > * >- * 5.2.30.1 1/29/03 >- * o Set VLAN filtering to IEEE 802.1Q after reset so we don't break >- * SoL connections that use VLANs. >- * o Allow 1000/Full setting for AutoNeg param for Fiber connections >- * Jon D Mason [jonmason@us.ibm.com]. >- * o Race between Tx queue and Tx clean fixed with a spin lock. >+ * 5.2.27 12/14/03 > * o Added netpoll support. > * o Fixed endianess bug causing ethtool loopback diags to fail on ppc. > * o Use pdev->irq rather than netdev->irq in preparation for MSI support. >@@ -68,8 +63,8 @@ > > char e1000_driver_name[] = "e1000"; > char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver"; >-char e1000_driver_version[] = "5.2.30.1-k1"; >-char e1000_copyright[] = "Copyright (c) 1999-2004 Intel Corporation."; >+char e1000_driver_version[] = "5.2.27-k1"; >+char e1000_copyright[] = "Copyright (c) 1999-2003 Intel Corporation."; > > /* e1000_pci_tbl - PCI Device ID Table > * >@@ -124,7 +119,6 @@ > int e1000_setup_rx_resources(struct e1000_adapter *adapter); > void e1000_free_tx_resources(struct e1000_adapter *adapter); > void e1000_free_rx_resources(struct e1000_adapter *adapter); >-void e1000_update_stats(struct e1000_adapter *adapter); > > /* Local Function Prototypes */ > >@@ -148,6 +142,7 @@ > static struct net_device_stats * e1000_get_stats(struct net_device *netdev); > static int e1000_change_mtu(struct net_device *netdev, int new_mtu); > static int e1000_set_mac(struct net_device *netdev, void *p); >+static void e1000_update_stats(struct e1000_adapter *adapter); > static inline void e1000_irq_disable(struct e1000_adapter *adapter); > static inline void e1000_irq_enable(struct e1000_adapter *adapter); > static irqreturn_t e1000_intr(int irq, void *data, struct pt_regs *regs); >@@ -344,10 +339,6 @@ > if(adapter->hw.mac_type >= e1000_82544) > E1000_WRITE_REG(&adapter->hw, WUC, 0); > e1000_init_hw(&adapter->hw); >- >- /* Enable h/w to recognize an 802.1Q VLAN Ethernet packet */ >- E1000_WRITE_REG(&adapter->hw, VET, ETHERNET_IEEE_VLAN_TYPE); >- > e1000_reset_adaptive(&adapter->hw); > e1000_phy_get_info(&adapter->hw, &adapter->phy_info); > } >@@ -683,7 +674,6 @@ > > atomic_set(&adapter->irq_sem, 1); > spin_lock_init(&adapter->stats_lock); >- spin_lock_init(&adapter->tx_lock); > > return 0; > } >@@ -1402,17 +1392,6 @@ > } > > e1000_update_stats(adapter); >- >- adapter->hw.tx_packet_delta = adapter->stats.tpt - adapter->tpt_old; >- adapter->tpt_old = adapter->stats.tpt; >- adapter->hw.collision_delta = adapter->stats.colc - adapter->colc_old; >- adapter->colc_old = adapter->stats.colc; >- >- adapter->gorcl = adapter->stats.gorcl - adapter->gorcl_old; >- adapter->gorcl_old = adapter->stats.gorcl; >- adapter->gotcl = adapter->stats.gotcl - adapter->gotcl_old; >- adapter->gotcl_old = adapter->stats.gotcl; >- > e1000_update_adaptive(&adapter->hw); > > if(!netif_carrier_ok(netdev)) { >@@ -1782,7 +1761,6 @@ > struct e1000_adapter *adapter = netdev->priv; > unsigned int first; > unsigned int tx_flags = 0; >- unsigned long flags; > int count; > > if(skb->len <= 0) { >@@ -1790,13 +1768,10 @@ > return 0; > } > >- spin_lock_irqsave(&adapter->tx_lock, flags); >- > if(adapter->hw.mac_type == e1000_82547) { > if(e1000_82547_fifo_workaround(adapter, skb)) { > netif_stop_queue(netdev); > mod_timer(&adapter->tx_fifo_stall_timer, jiffies); >- spin_unlock_irqrestore(&adapter->tx_lock, flags); > return 1; > } > } >@@ -1817,14 +1792,11 @@ > e1000_tx_queue(adapter, count, tx_flags); > else { > netif_stop_queue(netdev); >- spin_unlock_irqrestore(&adapter->tx_lock, flags); > return 1; > } > > netdev->trans_start = jiffies; > >- spin_unlock_irqrestore(&adapter->tx_lock, flags); >- > return 0; > } > >@@ -1866,7 +1838,6 @@ > { > struct e1000_adapter *adapter = netdev->priv; > >- e1000_update_stats(adapter); > return &adapter->net_stats; > } > >@@ -1925,7 +1896,7 @@ > * @adapter: board private structure > **/ > >-void >+static void > e1000_update_stats(struct e1000_adapter *adapter) > { > struct e1000_hw *hw = &adapter->hw; >@@ -1943,7 +1914,8 @@ > > adapter->stats.crcerrs += E1000_READ_REG(hw, CRCERRS); > adapter->stats.gprc += E1000_READ_REG(hw, GPRC); >- adapter->stats.gorcl += E1000_READ_REG(hw, GORCL); >+ adapter->gorcl = E1000_READ_REG(hw, GORCL); >+ adapter->stats.gorcl += adapter->gorcl; > adapter->stats.gorch += E1000_READ_REG(hw, GORCH); > adapter->stats.bprc += E1000_READ_REG(hw, BPRC); > adapter->stats.mprc += E1000_READ_REG(hw, MPRC); >@@ -1955,6 +1927,8 @@ > adapter->stats.prc1023 += E1000_READ_REG(hw, PRC1023); > adapter->stats.prc1522 += E1000_READ_REG(hw, PRC1522); > >+ spin_unlock_irqrestore(&adapter->stats_lock, flags); >+ > /* the rest of the counters are only modified here */ > > adapter->stats.symerrs += E1000_READ_REG(hw, SYMERRS); >@@ -1972,7 +1946,8 @@ > adapter->stats.xofftxc += E1000_READ_REG(hw, XOFFTXC); > adapter->stats.fcruc += E1000_READ_REG(hw, FCRUC); > adapter->stats.gptc += E1000_READ_REG(hw, GPTC); >- adapter->stats.gotcl += E1000_READ_REG(hw, GOTCL); >+ adapter->gotcl = E1000_READ_REG(hw, GOTCL); >+ adapter->stats.gotcl += adapter->gotcl; > adapter->stats.gotch += E1000_READ_REG(hw, GOTCH); > adapter->stats.rnbc += E1000_READ_REG(hw, RNBC); > adapter->stats.ruc += E1000_READ_REG(hw, RUC); >@@ -2054,8 +2029,6 @@ > !e1000_read_phy_reg(hw, M88E1000_RX_ERR_CNTR, &phy_tmp)) > adapter->phy_stats.receive_errors += phy_tmp; > } >- >- spin_unlock_irqrestore(&adapter->stats_lock, flags); > } > > /** >@@ -2124,26 +2097,10 @@ > __netif_rx_schedule(netdev); > } > #else >- /* Writing IMC and IMS is needed for 82547. >- Due to Hub Link bus being occupied, an interrupt >- de-assertion message is not able to be sent. >- When an interrupt assertion message is generated later, >- two messages are re-ordered and sent out. >- That causes APIC to think 82547 is in de-assertion >- state, while 82547 is in assertion state, resulting >- in dead lock. Writing IMC forces 82547 into >- de-assertion state. >- */ >- if(hw->mac_type == e1000_82547 || hw->mac_type == e1000_82547_rev_2) >- e1000_irq_disable(adapter); >- > for(i = 0; i < E1000_MAX_INTR; i++) > if(!e1000_clean_rx_irq(adapter) & > !e1000_clean_tx_irq(adapter)) > break; >- >- if(hw->mac_type == e1000_82547 || hw->mac_type == e1000_82547_rev_2) >- e1000_irq_enable(adapter); > #endif > > return IRQ_HANDLED; >@@ -2193,8 +2150,6 @@ > unsigned int i, eop; > boolean_t cleaned = FALSE; > >- spin_lock(&adapter->tx_lock); >- > i = tx_ring->next_to_clean; > eop = tx_ring->buffer_info[i].next_to_watch; > eop_desc = E1000_TX_DESC(*tx_ring, eop); >@@ -2239,8 +2194,6 @@ > if(cleaned && netif_queue_stopped(netdev) && netif_carrier_ok(netdev)) > netif_wake_queue(netdev); > >- spin_unlock(&adapter->tx_lock); >- > return cleaned; > } > >@@ -2691,6 +2644,8 @@ > if(grp) { > /* enable VLAN tag insert/strip */ > >+ E1000_WRITE_REG(&adapter->hw, VET, ETHERNET_IEEE_VLAN_TYPE); >+ > ctrl = E1000_READ_REG(&adapter->hw, CTRL); > ctrl |= E1000_CTRL_VME; > E1000_WRITE_REG(&adapter->hw, CTRL, ctrl); >diff -urNad /usr/src/linux-2.6.3-rc1/drivers/net/e1000/e1000_osdep.h /usr/src/linux-2.6.2-rc2-mm1/drivers/net/e1000/e1000_osdep.h >--- /usr/src/linux-2.6.3-rc1/drivers/net/e1000/e1000_osdep.h 2004-02-08 16:02:01.000000000 +0100 >+++ /usr/src/linux-2.6.2-rc2-mm1/drivers/net/e1000/e1000_osdep.h 2004-02-14 22:03:03.000000000 +0100 >@@ -1,7 +1,7 @@ > /******************************************************************************* > > >- Copyright(c) 1999 - 2004 Intel Corporation. All rights reserved. >+ Copyright(c) 1999 - 2003 Intel Corporation. All rights reserved. > > This program is free software; you can redistribute it and/or modify it > under the terms of the GNU General Public License as published by the Free >diff -urNad /usr/src/linux-2.6.3-rc1/drivers/net/e1000/e1000_param.c /usr/src/linux-2.6.2-rc2-mm1/drivers/net/e1000/e1000_param.c >--- /usr/src/linux-2.6.3-rc1/drivers/net/e1000/e1000_param.c 2004-02-08 16:02:01.000000000 +0100 >+++ /usr/src/linux-2.6.2-rc2-mm1/drivers/net/e1000/e1000_param.c 2004-02-14 22:03:03.000000000 +0100 >@@ -1,7 +1,7 @@ > /******************************************************************************* > > >- Copyright(c) 1999 - 2004 Intel Corporation. All rights reserved. >+ Copyright(c) 1999 - 2003 Intel Corporation. All rights reserved. > > This program is free software; you can redistribute it and/or modify it > under the terms of the GNU General Public License as published by the Free >@@ -63,7 +63,7 @@ > /* Transmit Descriptor Count > * > * Valid Range: 80-256 for 82542 and 82543 gigabit ethernet controllers >- * Valid Range: 80-4096 for 82544 and newer >+ * Valid Range: 80-4096 for 82544 > * > * Default Value: 256 > */ >@@ -73,7 +73,7 @@ > /* Receive Descriptor Count > * > * Valid Range: 80-256 for 82542 and 82543 gigabit ethernet controllers >- * Valid Range: 80-4096 for 82544 and newer >+ * Valid Range: 80-4096 for 82544 > * > * Default Value: 256 > */ >@@ -289,7 +289,7 @@ > * e1000_check_options - Range Checking for Command Line Parameters > * @adapter: board private structure > * >- * This routine checks all command line parameters for valid user >+ * This routine checks all command line paramters for valid user > * input. If an invalid value is given, or if no user specified > * value exists, a default value is used. The final value is stored > * in a variable in the adapter structure. >@@ -489,9 +489,9 @@ > printk(KERN_INFO "Duplex not valid for fiber adapters, " > "parameter ignored\n"); > } >- if((AutoNeg[bd] != OPTION_UNSET) && (AutoNeg[bd] != 0x20)) { >- printk(KERN_INFO "AutoNeg other than Full/1000 is " >- "not valid for fiber adapters, parameter ignored\n"); >+ if((AutoNeg[bd] != OPTION_UNSET)) { >+ printk(KERN_INFO "AutoNeg not valid for fiber adapters, " >+ "parameter ignored\n"); > } > } >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 41577
: 25678