| From stable-bounces@linux.kernel.org Fri Sep 28 09:52:23 2007 |
| From: Stephen Hemminger <shemminger@linux-foundation.org> |
| Date: Fri, 28 Sep 2007 09:48:14 -0700 |
| Subject: sky2: fix transmit state on resume |
| To: Krzysztof Oledzki <olel@ans.pl>, Greg KH <greg@kroah.com> |
| Cc: netdev@vger.kernel.org, stable@kernel.org |
| Message-ID: <20070928164858.593540259@linux-foundation.org> |
| Content-Disposition: inline; filename=sky2-tx-sum-resume.patch |
| |
| From: Stephen Hemminger <shemminger@linux-foundation.org> |
| |
| Already upstream. |
| |
| After resume, driver has reset the chip so the current state |
| of transmit checksum offload state machine and DMA state machine |
| will be undefined. |
| |
| The fix is to set the state so that first Tx will set MSS and offset |
| values. |
| |
| Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/net/sky2.c | 17 ++++++++++++++++- |
| 1 file changed, 16 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/net/sky2.c |
| +++ b/drivers/net/sky2.c |
| @@ -831,6 +831,20 @@ static inline struct sky2_tx_le *get_tx_ |
| return le; |
| } |
| |
| +static void tx_init(struct sky2_port *sky2) |
| +{ |
| + struct sky2_tx_le *le; |
| + |
| + sky2->tx_prod = sky2->tx_cons = 0; |
| + sky2->tx_tcpsum = 0; |
| + sky2->tx_last_mss = 0; |
| + |
| + le = get_tx_le(sky2); |
| + le->addr = 0; |
| + le->opcode = OP_ADDR64 | HW_OWNER; |
| + sky2->tx_addr64 = 0; |
| +} |
| + |
| static inline struct tx_ring_info *tx_le_re(struct sky2_port *sky2, |
| struct sky2_tx_le *le) |
| { |
| @@ -1244,7 +1258,8 @@ static int sky2_up(struct net_device *de |
| GFP_KERNEL); |
| if (!sky2->tx_ring) |
| goto err_out; |
| - sky2->tx_prod = sky2->tx_cons = 0; |
| + |
| + tx_init(sky2); |
| |
| sky2->rx_le = pci_alloc_consistent(hw->pdev, RX_LE_BYTES, |
| &sky2->rx_le_map); |