From patchwork Thu Aug 6 02:32:51 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hidetoshi Seto X-Patchwork-Id: 39502 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 n762Ugk0026395 for ; Thu, 6 Aug 2009 02:33:11 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750706AbZHFCdJ (ORCPT ); Wed, 5 Aug 2009 22:33:09 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751162AbZHFCdJ (ORCPT ); Wed, 5 Aug 2009 22:33:09 -0400 Received: from fgwmail6.fujitsu.co.jp ([192.51.44.36]:59055 "EHLO fgwmail6.fujitsu.co.jp" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750706AbZHFCdI (ORCPT ); Wed, 5 Aug 2009 22:33:08 -0400 Received: from m3.gw.fujitsu.co.jp ([10.0.50.73]) by fgwmail6.fujitsu.co.jp (Fujitsu Gateway) with ESMTP id n762X7Df028683 for (envelope-from seto.hidetoshi@jp.fujitsu.com); Thu, 6 Aug 2009 11:33:08 +0900 Received: from smail (m3 [127.0.0.1]) by outgoing.m3.gw.fujitsu.co.jp (Postfix) with ESMTP id 4E17F45DE51 for ; Thu, 6 Aug 2009 11:33:07 +0900 (JST) Received: from s3.gw.fujitsu.co.jp (s3.gw.fujitsu.co.jp [10.0.50.93]) by m3.gw.fujitsu.co.jp (Postfix) with ESMTP id 04F0645DE4E for ; Thu, 6 Aug 2009 11:33:07 +0900 (JST) Received: from s3.gw.fujitsu.co.jp (localhost.localdomain [127.0.0.1]) by s3.gw.fujitsu.co.jp (Postfix) with ESMTP id C84AC1DB8037 for ; Thu, 6 Aug 2009 11:33:06 +0900 (JST) Received: from m105.s.css.fujitsu.com (m105.s.css.fujitsu.com [10.249.87.105]) by s3.gw.fujitsu.co.jp (Postfix) with ESMTP id 34AAA1DB803E for ; Thu, 6 Aug 2009 11:33:06 +0900 (JST) Received: from m105.css.fujitsu.com (m105 [127.0.0.1]) by m105.s.css.fujitsu.com (Postfix) with ESMTP id E3A755D8009; Thu, 6 Aug 2009 11:33:05 +0900 (JST) Received: from [127.0.0.1] (unknown [10.124.100.141]) by m105.s.css.fujitsu.com (Postfix) with ESMTP id 6E6515D8006; Thu, 6 Aug 2009 11:33:05 +0900 (JST) X-SecurityPolicyCheck-FJ: OK by FujitsuOutboundMailChecker v1.3.1 Received: from FMVDA2A041[10.124.100.141] by FMVDA2A041 (FujitsuOutboundMailChecker v1.3.1/9992[10.124.100.141]); Thu, 06 Aug 2009 11:32:57 +0900 (JST) Message-ID: <4A7A40D3.9000304@jp.fujitsu.com> Date: Thu, 06 Aug 2009 11:32:51 +0900 From: Hidetoshi Seto User-Agent: Thunderbird 2.0.0.22 (Windows/20090605) MIME-Version: 1.0 To: linux-pci@vger.kernel.org CC: Jesse Barnes , Matthew Wilcox Subject: [PATCH 3/8] pci/msi: Unify msi_free_irqs() and msix_free_all_irqs() References: <4A7A4036.9020007@jp.fujitsu.com> In-Reply-To: <4A7A4036.9020007@jp.fujitsu.com> Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org Unify msi_free_irqs() and msix_free_all_irqs(), and rename it to a common void function free_msi_irqs(). And relocate the common function to where the prototype is located now. Signed-off-by: Hidetoshi Seto Reviewed-by: Matthew Wilcox --- drivers/pci/msi.c | 74 ++++++++++++++++++++++------------------------------ 1 files changed, 31 insertions(+), 43 deletions(-) diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c index bdd2ca9..a7f2a01 100644 --- a/drivers/pci/msi.c +++ b/drivers/pci/msi.c @@ -272,7 +272,30 @@ void write_msi_msg(unsigned int irq, struct msi_msg *msg) write_msi_msg_desc(desc, msg); } -static int msi_free_irqs(struct pci_dev* dev); +static void free_msi_irqs(struct pci_dev *dev) +{ + struct msi_desc *entry, *tmp; + + list_for_each_entry(entry, &dev->msi_list, list) { + int i, nvec; + if (!entry->irq) + continue; + nvec = 1 << entry->msi_attrib.multiple; + for (i = 0; i < nvec; i++) + BUG_ON(irq_has_action(entry->irq + i)); + } + + arch_teardown_msi_irqs(dev); + + list_for_each_entry_safe(entry, tmp, &dev->msi_list, list) { + if (entry->msi_attrib.is_msix) { + if (list_is_last(&entry->list, &dev->msi_list)) + iounmap(entry->mask_base); + } + list_del(&entry->list); + kfree(entry); + } +} static struct msi_desc *alloc_msi_entry(struct pci_dev *dev) { @@ -396,7 +419,7 @@ static int msi_capability_init(struct pci_dev *dev, int nvec) ret = arch_setup_msi_irqs(dev, nvec, PCI_CAP_ID_MSI); if (ret) { msi_mask_irq(entry, mask, ~mask); - msi_free_irqs(dev); + free_msi_irqs(dev); return ret; } @@ -454,7 +477,7 @@ static int msix_capability_init(struct pci_dev *dev, if (!i) iounmap(base); else - msi_free_irqs(dev); + free_msi_irqs(dev); /* No enough memory. Don't try again */ return -ENOMEM; } @@ -486,7 +509,7 @@ static int msix_capability_init(struct pci_dev *dev, } if (ret) { - msi_free_irqs(dev); + free_msi_irqs(dev); return ret; } @@ -644,37 +667,10 @@ void pci_disable_msi(struct pci_dev* dev) return; pci_msi_shutdown(dev); - msi_free_irqs(dev); + free_msi_irqs(dev); } EXPORT_SYMBOL(pci_disable_msi); -static int msi_free_irqs(struct pci_dev* dev) -{ - struct msi_desc *entry, *tmp; - - list_for_each_entry(entry, &dev->msi_list, list) { - int i, nvec; - if (!entry->irq) - continue; - nvec = 1 << entry->msi_attrib.multiple; - for (i = 0; i < nvec; i++) - BUG_ON(irq_has_action(entry->irq + i)); - } - - arch_teardown_msi_irqs(dev); - - list_for_each_entry_safe(entry, tmp, &dev->msi_list, list) { - if (entry->msi_attrib.is_msix) { - if (list_is_last(&entry->list, &dev->msi_list)) - iounmap(entry->mask_base); - } - list_del(&entry->list); - kfree(entry); - } - - return 0; -} - /** * pci_msix_table_size - return the number of device's MSI-X table entries * @dev: pointer to the pci_dev data structure of MSI-X device function @@ -745,11 +741,6 @@ int pci_enable_msix(struct pci_dev* dev, struct msix_entry *entries, int nvec) } EXPORT_SYMBOL(pci_enable_msix); -static void msix_free_all_irqs(struct pci_dev *dev) -{ - msi_free_irqs(dev); -} - void pci_msix_shutdown(struct pci_dev* dev) { struct msi_desc *entry; @@ -774,7 +765,7 @@ void pci_disable_msix(struct pci_dev* dev) return; pci_msix_shutdown(dev); - msix_free_all_irqs(dev); + free_msi_irqs(dev); } EXPORT_SYMBOL(pci_disable_msix); @@ -792,11 +783,8 @@ void msi_remove_pci_irq_vectors(struct pci_dev* dev) if (!pci_msi_enable || !dev) return; - if (dev->msi_enabled) - msi_free_irqs(dev); - - if (dev->msix_enabled) - msix_free_all_irqs(dev); + if (dev->msi_enabled || dev->msix_enabled) + free_msi_irqs(dev); } void pci_no_msi(void)