From patchwork Mon May 11 21:10:08 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Buesch X-Patchwork-Id: 27065 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@bilbo.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from ozlabs.org (ozlabs.org [203.10.76.45]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "mx.ozlabs.org", Issuer "CA Cert Signing Authority" (verified OK)) by bilbo.ozlabs.org (Postfix) with ESMTPS id C8D68B6F56 for ; Tue, 12 May 2009 07:12:54 +1000 (EST) Received: by ozlabs.org (Postfix) id B8834DDDF7; Tue, 12 May 2009 07:12:54 +1000 (EST) Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by ozlabs.org (Postfix) with ESMTP id 5FD30DDDEE for ; Tue, 12 May 2009 07:12:54 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756094AbZEKVMq (ORCPT ); Mon, 11 May 2009 17:12:46 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1750943AbZEKVMq (ORCPT ); Mon, 11 May 2009 17:12:46 -0400 Received: from bu3sch.de ([62.75.166.246]:49989 "EHLO vs166246.vserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752392AbZEKVMp (ORCPT ); Mon, 11 May 2009 17:12:45 -0400 Received: by vs166246.vserver.de with esmtpa (Exim 4.63) id 1M3cnj-0007nP-VM; Mon, 11 May 2009 21:12:44 +0000 From: Michael Buesch To: David Dillow Subject: Re: 2.6.27.19 + 28.7: network timeouts for r8169 and 8139too Date: Mon, 11 May 2009 23:10:08 +0200 User-Agent: KMail/1.9.9 Cc: Michael Riepe , Francois Romieu , Rui Santos , Michael =?utf-8?q?B=C3=BCker?= , linux-kernel@vger.kernel.org, netdev@vger.kernel.org References: <200903041828.49972.m.bueker@berlin.de> <1242001754.4093.12.camel@obelisk.thedillows.org> <200905112248.44868.mb@bu3sch.de> In-Reply-To: <200905112248.44868.mb@bu3sch.de> X-Move-Along: Nothing to see here. No, really... Nothing. MIME-Version: 1.0 Content-Disposition: inline Message-Id: <200905112310.08534.mb@bu3sch.de> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org On Monday 11 May 2009 22:48:44 Michael Buesch wrote: > On Monday 11 May 2009 02:29:14 David Dillow wrote: > > > Kernel: 2.6.29.2 (x86_64) > > > Board: Intel D945GCLF2 > > > BIOS version: LF94510J.86A.0099.2008.0731.0303 > > > > I'm not sure this is tied to the chip. > > Yeah maybe other chips are affected as well. > I just want to note that my failing chip/board is an Intel D945GCLF2 board > with onboard G-LAN, too. > > The device XID is: XID 3c4000c0 > (see kernel log) > > Somebody else (I think it was Rui Santos) already reported a failing chip with that XID, too. > Here's a patch which blacklists MSI support by XID. It's currently only compile-tested, because I can't reboot the machine right now. Signed-off-by: Michael Buesch Index: linux-2.6.29/drivers/net/r8169.c =================================================================== --- linux-2.6.29.orig/drivers/net/r8169.c 2009-05-11 23:00:12.000000000 +0200 +++ linux-2.6.29/drivers/net/r8169.c 2009-05-11 23:07:32.000000000 +0200 @@ -1917,14 +1917,26 @@ /* Cfg9346_Unlock assumed. */ static unsigned rtl_try_msi(struct pci_dev *pdev, void __iomem *ioaddr, - const struct rtl_cfg_info *cfg) + const struct rtl_cfg_info *cfg, u32 xid) { - unsigned msi = 0; + unsigned i, blacklisted = 0, msi = 0; u8 cfg2; + static const u32 xid_blacklist[] = { + /* Blacklisted devices with (currently) broken MSI support. + * Devices are identified by XID. */ + 0x3c4000c0, + }; + cfg2 = RTL_R8(Config2) & ~MSIEnable; + for (i = 0; i < ARRAY_SIZE(xid_blacklist); i++) { + if (xid == xid_blacklist[i]) + blacklisted = 1; + } if (cfg->features & RTL_FEATURE_MSI) { - if (pci_enable_msi(pdev)) { + if (blacklisted) { + dev_info(&pdev->dev, "MSI blacklisted. Back to INTx.\n"); + } else if (pci_enable_msi(pdev)) { dev_info(&pdev->dev, "no MSI. Back to INTx.\n"); } else { cfg2 |= MSIEnable; @@ -1974,6 +1986,7 @@ void __iomem *ioaddr; unsigned int i; int rc; + u32 xid; if (netif_msg_drv(&debug)) { printk(KERN_INFO "%s Gigabit Ethernet driver %s loaded\n", @@ -2109,6 +2122,7 @@ } tp->chipset = i; + xid = RTL_R32(TxConfig) & 0x7cf0f8ff; RTL_W8(Cfg9346, Cfg9346_Unlock); RTL_W8(Config1, RTL_R8(Config1) | PMEnable); RTL_W8(Config5, RTL_R8(Config5) & PMEStatus); @@ -2116,7 +2130,7 @@ tp->features |= RTL_FEATURE_WOL; if ((RTL_R8(Config5) & (UWF | BWF | MWF)) != 0) tp->features |= RTL_FEATURE_WOL; - tp->features |= rtl_try_msi(pdev, ioaddr, cfg); + tp->features |= rtl_try_msi(pdev, ioaddr, cfg, xid); RTL_W8(Cfg9346, Cfg9346_Lock); if ((tp->mac_version <= RTL_GIGA_MAC_VER_06) && @@ -2175,8 +2189,6 @@ pci_set_drvdata(pdev, dev); if (netif_msg_probe(tp)) { - u32 xid = RTL_R32(TxConfig) & 0x7cf0f8ff; - printk(KERN_INFO "%s: %s at 0x%lx, " "%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x, " "XID %08x IRQ %d\n",