Re: [PATCH v1 21/21] PCI/MSI: Clean up unused MSI arch functions

2014-09-15 Thread Lucas Stach
Am Freitag, den 05.09.2014, 18:10 +0800 schrieb Yijing Wang:
 Now we use struct msi_chip in all platforms to configure
 MSI/MSI-X. We can clean up the unused arch functions.
 
 Signed-off-by: Yijing Wang wangyij...@huawei.com

Reviewed-by: Lucas Stach l.st...@pengutronix.de

 ---
  drivers/iommu/irq_remapping.c |2 +-
  drivers/pci/msi.c |   99 
 -
  include/linux/msi.h   |   14 --
  3 files changed, 39 insertions(+), 76 deletions(-)
 
 diff --git a/drivers/iommu/irq_remapping.c b/drivers/iommu/irq_remapping.c
 index 99b1c0f..6e645f0 100644
 --- a/drivers/iommu/irq_remapping.c
 +++ b/drivers/iommu/irq_remapping.c
 @@ -92,7 +92,7 @@ error:
  
   /*
* Restore altered MSI descriptor fields and prevent just destroyed
 -  * IRQs from tearing down again in default_teardown_msi_irqs()
 +  * IRQs from tearing down again in teardown_msi_irqs()
*/
   msidesc-irq = 0;
   msidesc-nvec_used = 0;
 diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
 index d78d637..e3e7f4f 100644
 --- a/drivers/pci/msi.c
 +++ b/drivers/pci/msi.c
 @@ -34,50 +34,31 @@ struct msi_chip * __weak arch_find_msi_chip(struct 
 pci_dev *dev)
   return dev-bus-msi;
  }
  
 -int __weak arch_setup_msi_irq(struct pci_dev *dev, struct msi_desc *desc)
 -{
 - struct msi_chip *chip = arch_find_msi_chip(dev);
 - int err;
 -
 - if (!chip || !chip-setup_irq)
 - return -EINVAL;
 -
 - err = chip-setup_irq(dev, desc);
 - if (err  0)
 - return err;
 -
 - return 0;
 -}
 -
 -void __weak arch_teardown_msi_irq(unsigned int irq)
 -{
 - struct msi_chip *chip = irq_get_chip_data(irq);
 -
 - if (!chip || !chip-teardown_irq)
 - return;
 -
 - chip-teardown_irq(irq);
 -}
 -
 -int __weak arch_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
 +int setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
  {
   struct msi_desc *entry;
   int ret;
   struct msi_chip *chip;
  
   chip = arch_find_msi_chip(dev);
 - if (chip  chip-setup_irqs)
 + if (!chip)
 + return -EINVAL;
 +
 + if (chip-setup_irqs)
   return chip-setup_irqs(dev, nvec, type);
  
   /*
* If an architecture wants to support multiple MSI, it needs to
 -  * override arch_setup_msi_irqs()
 +  * implement chip-setup_irqs().
*/
   if (type == PCI_CAP_ID_MSI  nvec  1)
   return 1;
  
 + if (!chip-setup_irq)
 + return -EINVAL;
 +
   list_for_each_entry(entry, dev-msi_list, list) {
 - ret = arch_setup_msi_irq(dev, entry);
 + ret = chip-setup_irq(dev, entry);
   if (ret  0)
   return ret;
   if (ret  0)
 @@ -87,13 +68,20 @@ int __weak arch_setup_msi_irqs(struct pci_dev *dev, int 
 nvec, int type)
   return 0;
  }
  
 -/*
 - * We have a default implementation available as a separate non-weak
 - * function, as it is used by the Xen x86 PCI code
 - */
 -void default_teardown_msi_irqs(struct pci_dev *dev)
 +static void teardown_msi_irqs(struct pci_dev *dev)
  {
   struct msi_desc *entry;
 + struct msi_chip *chip;
 +
 + chip = arch_find_msi_chip(dev);
 + if (!chip)
 + return;
 +
 + if (chip-teardown_irqs)
 + return chip-teardown_irqs(dev);
 +
 + if (!chip-teardown_irq)
 + return;
  
   list_for_each_entry(entry, dev-msi_list, list) {
   int i, nvec;
 @@ -104,20 +92,10 @@ void default_teardown_msi_irqs(struct pci_dev *dev)
   else
   nvec = 1  entry-msi_attrib.multiple;
   for (i = 0; i  nvec; i++)
 - arch_teardown_msi_irq(entry-irq + i);
 + chip-teardown_irq(entry-irq + i);
   }
  }
  
 -void __weak arch_teardown_msi_irqs(struct pci_dev *dev)
 -{
 - struct msi_chip *chip = arch_find_msi_chip(dev);
 -
 - if (chip  chip-teardown_irqs)
 - return chip-teardown_irqs(dev);
 -
 - return default_teardown_msi_irqs(dev);
 -}
 -
  static void default_restore_msi_irq(struct pci_dev *dev, int irq)
  {
   struct msi_desc *entry;
 @@ -136,10 +114,18 @@ static void default_restore_msi_irq(struct pci_dev 
 *dev, int irq)
   write_msi_msg(irq, entry-msg);
  }
  
 -void __weak arch_restore_msi_irqs(struct pci_dev *dev)
 +static void default_restore_msi_irqs(struct pci_dev *dev)
  {
 - struct msi_chip *chip = arch_find_msi_chip(dev);
 + struct msi_desc *entry = NULL;
 +
 + list_for_each_entry(entry, dev-msi_list, list) {
 + default_restore_msi_irq(dev, entry-irq);
 + }
 +}
  
 +static void restore_msi_irqs(struct pci_dev *dev)
 +{
 + struct msi_chip *chip = arch_find_msi_chip(dev);
   if (chip  chip-restore_irqs)
   return chip-restore_irqs(dev);
  
 @@ -248,15 +234,6 @@ void unmask_msi_irq(struct irq_data *data)
   

[PATCH v1 21/21] PCI/MSI: Clean up unused MSI arch functions

2014-09-05 Thread Yijing Wang
Now we use struct msi_chip in all platforms to configure
MSI/MSI-X. We can clean up the unused arch functions.

Signed-off-by: Yijing Wang wangyij...@huawei.com
---
 drivers/iommu/irq_remapping.c |2 +-
 drivers/pci/msi.c |   99 -
 include/linux/msi.h   |   14 --
 3 files changed, 39 insertions(+), 76 deletions(-)

diff --git a/drivers/iommu/irq_remapping.c b/drivers/iommu/irq_remapping.c
index 99b1c0f..6e645f0 100644
--- a/drivers/iommu/irq_remapping.c
+++ b/drivers/iommu/irq_remapping.c
@@ -92,7 +92,7 @@ error:
 
/*
 * Restore altered MSI descriptor fields and prevent just destroyed
-* IRQs from tearing down again in default_teardown_msi_irqs()
+* IRQs from tearing down again in teardown_msi_irqs()
 */
msidesc-irq = 0;
msidesc-nvec_used = 0;
diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
index d78d637..e3e7f4f 100644
--- a/drivers/pci/msi.c
+++ b/drivers/pci/msi.c
@@ -34,50 +34,31 @@ struct msi_chip * __weak arch_find_msi_chip(struct pci_dev 
*dev)
return dev-bus-msi;
 }
 
-int __weak arch_setup_msi_irq(struct pci_dev *dev, struct msi_desc *desc)
-{
-   struct msi_chip *chip = arch_find_msi_chip(dev);
-   int err;
-
-   if (!chip || !chip-setup_irq)
-   return -EINVAL;
-
-   err = chip-setup_irq(dev, desc);
-   if (err  0)
-   return err;
-
-   return 0;
-}
-
-void __weak arch_teardown_msi_irq(unsigned int irq)
-{
-   struct msi_chip *chip = irq_get_chip_data(irq);
-
-   if (!chip || !chip-teardown_irq)
-   return;
-
-   chip-teardown_irq(irq);
-}
-
-int __weak arch_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
+int setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
 {
struct msi_desc *entry;
int ret;
struct msi_chip *chip;
 
chip = arch_find_msi_chip(dev);
-   if (chip  chip-setup_irqs)
+   if (!chip)
+   return -EINVAL;
+
+   if (chip-setup_irqs)
return chip-setup_irqs(dev, nvec, type);
 
/*
 * If an architecture wants to support multiple MSI, it needs to
-* override arch_setup_msi_irqs()
+* implement chip-setup_irqs().
 */
if (type == PCI_CAP_ID_MSI  nvec  1)
return 1;
 
+   if (!chip-setup_irq)
+   return -EINVAL;
+
list_for_each_entry(entry, dev-msi_list, list) {
-   ret = arch_setup_msi_irq(dev, entry);
+   ret = chip-setup_irq(dev, entry);
if (ret  0)
return ret;
if (ret  0)
@@ -87,13 +68,20 @@ int __weak arch_setup_msi_irqs(struct pci_dev *dev, int 
nvec, int type)
return 0;
 }
 
-/*
- * We have a default implementation available as a separate non-weak
- * function, as it is used by the Xen x86 PCI code
- */
-void default_teardown_msi_irqs(struct pci_dev *dev)
+static void teardown_msi_irqs(struct pci_dev *dev)
 {
struct msi_desc *entry;
+   struct msi_chip *chip;
+
+   chip = arch_find_msi_chip(dev);
+   if (!chip)
+   return;
+
+   if (chip-teardown_irqs)
+   return chip-teardown_irqs(dev);
+
+   if (!chip-teardown_irq)
+   return;
 
list_for_each_entry(entry, dev-msi_list, list) {
int i, nvec;
@@ -104,20 +92,10 @@ void default_teardown_msi_irqs(struct pci_dev *dev)
else
nvec = 1  entry-msi_attrib.multiple;
for (i = 0; i  nvec; i++)
-   arch_teardown_msi_irq(entry-irq + i);
+   chip-teardown_irq(entry-irq + i);
}
 }
 
-void __weak arch_teardown_msi_irqs(struct pci_dev *dev)
-{
-   struct msi_chip *chip = arch_find_msi_chip(dev);
-
-   if (chip  chip-teardown_irqs)
-   return chip-teardown_irqs(dev);
-
-   return default_teardown_msi_irqs(dev);
-}
-
 static void default_restore_msi_irq(struct pci_dev *dev, int irq)
 {
struct msi_desc *entry;
@@ -136,10 +114,18 @@ static void default_restore_msi_irq(struct pci_dev *dev, 
int irq)
write_msi_msg(irq, entry-msg);
 }
 
-void __weak arch_restore_msi_irqs(struct pci_dev *dev)
+static void default_restore_msi_irqs(struct pci_dev *dev)
 {
-   struct msi_chip *chip = arch_find_msi_chip(dev);
+   struct msi_desc *entry = NULL;
+
+   list_for_each_entry(entry, dev-msi_list, list) {
+   default_restore_msi_irq(dev, entry-irq);
+   }
+}
 
+static void restore_msi_irqs(struct pci_dev *dev)
+{
+   struct msi_chip *chip = arch_find_msi_chip(dev);
if (chip  chip-restore_irqs)
return chip-restore_irqs(dev);
 
@@ -248,15 +234,6 @@ void unmask_msi_irq(struct irq_data *data)
msi_set_mask_bit(data, 0);
 }
 
-void default_restore_msi_irqs(struct pci_dev *dev)
-{
-   struct msi_desc *entry;
-
-