Sophie

Sophie

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

kernel-2.6.18-238.el5.src.rpm

From: Steve Best <sbest@redhat.com>
Date: Wed, 5 May 2010 13:01:09 -0400
Subject: [net] tg3: fix INTx fallback when MSI fails
Message-id: <20100505125200.5141.98958.sendpatchset@squad5-lp1.lab.bos.redhat.com>
Patchwork-id: 24818
O-Subject: [PATCH RHEL5.6 BZ587666] tg3: Fix INTx fallback when MSI fails
Bugzilla: 587666
RH-Acked-by: David Howells <dhowells@redhat.com>
RH-Acked-by: Jiri Pirko <jpirko@redhat.com>
RH-Acked-by: Andy Gospodarek <gospo@redhat.com>
RH-Acked-by: Stefan Assmann <sassmann@redhat.com>
RH-Acked-by: David S. Miller <davem@redhat.com>
RH-Acked-by: John Feeney <jfeeney@redhat.com>

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

Description:
============
MSI setup changes the value of irq_vec in struct tg3 *tp.
This attribute must be taken into account and restored before
we try to do a new request_irq for INTx fallback.

In powerpc, the original code was leading to an EINVAL return within
request_irq, because the driver was trying to use the disabled MSI
virtual irq number instead of tp->pdev->irq.

Signed-off-by: Andre Detsch <adetsch@br.ibm.com>
Acked-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

RHEL Version Found:
===================
RHEL 5.5

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

Brew:
=====
https://brewweb.devel.redhat.com/taskinfo?taskID=2418977

Upstream Status:
================
back port from

Upstream (accepted)
http://git.kernel.org/?p=linux/kernel/git/davem/net-2.6.git;a=commit;h=dc8bf1b1a6edfc92465526de19772061302f0929

Test Status:
============
Tested by the IBM test team.

===============================================================
Steve Best
IBM on-site partner

Signed-off-by: Jarod Wilson <jarod@redhat.com>

diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
index 939bdd7..f4768c7 100644
--- a/drivers/net/tg3.c
+++ b/drivers/net/tg3.c
@@ -8826,6 +8826,7 @@ static int tg3_test_msi(struct tg3 *tp)
 	pci_disable_msi(tp->pdev);
 
 	tp->tg3_flags2 &= ~TG3_FLG2_USING_MSI;
+	tp->napi[0].irq_vec = tp->pdev->irq;
 
 	err = tg3_request_irq(tp, 0);
 	if (err)