From patchwork Tue May 12 20:28:36 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Morton X-Patchwork-Id: 23335 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n4CKp2Xe023541 for ; Tue, 12 May 2009 20:51:02 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751382AbZELUu7 (ORCPT ); Tue, 12 May 2009 16:50:59 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751625AbZELUu7 (ORCPT ); Tue, 12 May 2009 16:50:59 -0400 Received: from smtp1.linux-foundation.org ([140.211.169.13]:38549 "EHLO smtp1.linux-foundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751382AbZELUu6 (ORCPT ); Tue, 12 May 2009 16:50:58 -0400 Received: from imap1.linux-foundation.org (imap1.linux-foundation.org [140.211.169.55]) by smtp1.linux-foundation.org (8.14.2/8.13.5/Debian-3ubuntu1.1) with ESMTP id n4CKlqWi008895 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 12 May 2009 13:48:28 -0700 Received: from localhost.localdomain (localhost [127.0.0.1]) by imap1.linux-foundation.org (8.13.5.20060308/8.13.5/Debian-3ubuntu1.1) with ESMTP id n4CKlp8w029647; Tue, 12 May 2009 13:47:51 -0700 Message-Id: <200905122047.n4CKlp8w029647@imap1.linux-foundation.org> Subject: [patch for 2.6.30? 1/1] pci: fix MSI-X with NIU cards To: jbarnes@virtuousgeek.org Cc: linux-pci@vger.kernel.org, akpm@linux-foundation.org, matthew@wil.cx, davem@davemloft.net, willy@linux.intel.com From: akpm@linux-foundation.org Date: Tue, 12 May 2009 13:28:36 -0700 X-Spam-Status: No, hits=-3.489 required=5 tests=AWL, BAYES_00, OSDL_HEADER_SUBJECT_BRACKETED X-Spam-Checker-Version: SpamAssassin 3.2.4-osdl_revision__1.47__ X-MIMEDefang-Filter: lf$Revision: 1.188 $ X-Scanned-By: MIMEDefang 2.63 on 140.211.169.13 Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org From: Matthew Wilcox The NIU device refuses to allow accesses to MSI-X registers before MSI-X is enabled. This patch fixes the problem by moving the read of the mask register to after MSI-X is enabled. Reported-by: David S. Miller Tested-by: David S. Miller Reviewed-by: David S. Miller Signed-off-by: Matthew Wilcox Cc: Jesse Barnes Signed-off-by: Andrew Morton --- drivers/pci/msi.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff -puN drivers/pci/msi.c~pci-fix-msi-x-with-niu-cards drivers/pci/msi.c --- a/drivers/pci/msi.c~pci-fix-msi-x-with-niu-cards +++ a/drivers/pci/msi.c @@ -455,8 +455,6 @@ static int msix_capability_init(struct p entry->msi_attrib.default_irq = dev->irq; entry->msi_attrib.pos = pos; entry->mask_base = base; - entry->masked = readl(base + j * PCI_MSIX_ENTRY_SIZE + - PCI_MSIX_ENTRY_VECTOR_CTRL_OFFSET); msix_mask_irq(entry, 1); list_add_tail(&entry->list, &dev->msi_list); @@ -493,6 +491,12 @@ static int msix_capability_init(struct p msix_set_enable(dev, 1); dev->msix_enabled = 1; + list_for_each_entry(entry, &dev->msi_list, list) { + int vector = entry->msi_attrib.entry_nr; + entry->masked = readl(base + vector * PCI_MSIX_ENTRY_SIZE + + PCI_MSIX_ENTRY_VECTOR_CTRL_OFFSET); + } + return 0; }