Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 27922b4260f65d317aabda37e42bbbff > files > 2823

kernel-2.6.18-238.el5.src.rpm

From: Brad Peters <bpeters@redhat.com>
Date: Wed, 13 Aug 2008 11:15:24 -0400
Subject: [net] ixgbe: fix EEH recovery time
Message-id: 20080813151524.20559.47428.sendpatchset@squad5-lp1.lab.bos.redhat.com
O-Subject: [PATCH RHEL5.3 bz456466] Fix EEH on ixgbe recovery time
Bugzilla: 457466
RH-Acked-by: David Howells <dhowells@redhat.com>
RH-Acked-by: Arnaldo Carvalho de Melo <acme@redhat.com>

RHBZ#:
======
https://bugzilla.redhat.com/show_bug.cgi?id=457466

Description:
===========
Bug fix / All archs

Using a systemtap script to show backtrace every time eeh_check_failure
showed that the ixgbe_get_eeprom_semaphore does a LOT of reads in timeout loops that will never succeed, once the eeh has been triggered.  These were resulting in substantial lag's in recovery time.

Fix is to not attempt to reset an already failed adapter.

RHEL Version Found:
================
RHEL 5.2

kABI Status:
============
No symbols were harmed.

Brew:
=====
Built on all platforms.
http://brewweb.devel.redhat.com/brew/taskinfo?taskID=1428048

Upstream Status:
================
Already upstream:

http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=6f4a0e45c6392f84436004d4c04d31b8ff5071c5

Test Status:
============
Adapter recovery on errinjct dropped from 23min to 7 sec

===============================================================

Brad Peters 1-978-392-1000 x 23183
IBM on-site partner.

Proposed Patch:
===============
This patch is based on 2.6.18-103.el5

diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c
index dbc370a..f9ed223 100644
--- a/drivers/net/ixgbe/ixgbe_main.c
+++ b/drivers/net/ixgbe/ixgbe_main.c
@@ -1414,7 +1414,8 @@ void ixgbe_down(struct ixgbe_adapter *adapter)
 	netif_carrier_off(netdev);
 	netif_stop_queue(netdev);
 
-	ixgbe_reset(adapter);
+	if (!pci_channel_offline(adapter->pdev))
+		ixgbe_reset(adapter);
 	ixgbe_clean_all_tx_rings(adapter);
 	ixgbe_clean_all_rx_rings(adapter);