Re: [RFC PATCH 11/11] x86/MSI: Refactor x86 MSI code

2014-08-20 Thread Yijing Wang
On 2014/8/20 14:20, bharat.bhus...@freescale.com wrote:
> 
> 
>> -Original Message-
>> From: linux-pci-ow...@vger.kernel.org 
>> [mailto:linux-pci-ow...@vger.kernel.org]
>> On Behalf Of Yijing Wang
>> Sent: Saturday, July 26, 2014 8:39 AM
>> To: linux-kernel@vger.kernel.org
>> Cc: Xinwei Hu; Wuyun; Bjorn Helgaas; linux-...@vger.kernel.org;
>> paul.mu...@huawei.com; James E.J. Bottomley; Marc Zyngier; linux-arm-
>> ker...@lists.infradead.org; Russell King; linux-a...@vger.kernel.org; Basu
>> Arnab-B45036; virtualizat...@lists.linux-foundation.org; Hanjun Guo; Yijing 
>> Wang
>> Subject: [RFC PATCH 11/11] x86/MSI: Refactor x86 MSI code
> 
> Please provide description about what this refactoring is? Also does other 
> architecture also need similar refactoring ?

Sorry, I will update all description in my new proposal.

I provided another patchset to decouple MSI driver and arch MSI code,
link: http://marc.info/?l=linux-pci=140782732604433=2

Based that, there are few changes related to arch MSI code.

I will rebas the patchset based that~

> 
> Thanks
> -Bharat
> 
>>
>> Signed-off-by: Yijing Wang 
>> ---
>>  arch/x86/include/asm/io_apic.h   |2 +-
>>  arch/x86/include/asm/irq_remapping.h |4 +-
>>  arch/x86/include/asm/pci.h   |6 ++--
>>  arch/x86/include/asm/x86_init.h  |   10 +++---
>>  arch/x86/kernel/apic/io_apic.c   |   23 +++
>>  arch/x86/kernel/x86_init.c   |   12 
>>  drivers/iommu/amd_iommu.c|   16 ++
>>  drivers/iommu/intel_irq_remapping.c  |9 --
>>  drivers/iommu/irq_remapping.c|   51 
>> -
>>  drivers/iommu/irq_remapping.h|6 ++--
>>  drivers/msi/msi.c|3 +-
>>  11 files changed, 72 insertions(+), 70 deletions(-)
>>
>> diff --git a/arch/x86/include/asm/io_apic.h b/arch/x86/include/asm/io_apic.h
>> index 90f97b4..692a90f 100644
>> --- a/arch/x86/include/asm/io_apic.h
>> +++ b/arch/x86/include/asm/io_apic.h
>> @@ -158,7 +158,7 @@ extern int native_setup_ioapic_entry(int, struct
>> IO_APIC_route_entry *,
>>   struct io_apic_irq_attr *);
>>  extern void eoi_ioapic_irq(unsigned int irq, struct irq_cfg *cfg);
>>
>> -extern void native_compose_msi_msg(struct pci_dev *pdev,
>> +extern void native_compose_msi_msg(struct msi_irqs *msi,
>> unsigned int irq, unsigned int dest,
>> struct msi_msg *msg, u8 hpet_id);
>>  extern void native_eoi_ioapic_pin(int apic, int pin, int vector);
>> diff --git a/arch/x86/include/asm/irq_remapping.h
>> b/arch/x86/include/asm/irq_remapping.h
>> index b7747c4..a10003d 100644
>> --- a/arch/x86/include/asm/irq_remapping.h
>> +++ b/arch/x86/include/asm/irq_remapping.h
>> @@ -47,7 +47,7 @@ extern int setup_ioapic_remapped_entry(int irq,
>> int vector,
>> struct io_apic_irq_attr *attr);
>>  extern void free_remapped_irq(int irq);
>> -extern void compose_remapped_msi_msg(struct pci_dev *pdev,
>> +extern void compose_remapped_msi_msg(struct msi_irqs *msi,
>>   unsigned int irq, unsigned int dest,
>>   struct msi_msg *msg, u8 hpet_id);
>>  extern int setup_hpet_msi_remapped(unsigned int irq, unsigned int id);
>> @@ -77,7 +77,7 @@ static inline int setup_ioapic_remapped_entry(int irq,
>>  return -ENODEV;
>>  }
>>  static inline void free_remapped_irq(int irq) { }
>> -static inline void compose_remapped_msi_msg(struct pci_dev *pdev,
>> +static inline void compose_remapped_msi_msg(struct msi_irqs *msi,
>>  unsigned int irq, unsigned int dest,
>>  struct msi_msg *msg, u8 hpet_id)
>>  {
>> diff --git a/arch/x86/include/asm/pci.h b/arch/x86/include/asm/pci.h
>> index 0892ea0..04c9ef6 100644
>> --- a/arch/x86/include/asm/pci.h
>> +++ b/arch/x86/include/asm/pci.h
>> @@ -96,10 +96,10 @@ extern void pci_iommu_alloc(void);
>>  #ifdef CONFIG_PCI_MSI
>>  /* implemented in arch/x86/kernel/apic/io_apic. */
>>  struct msi_desc;
>> -int native_setup_msi_irqs(struct pci_dev *dev, int nvec, int type);
>> +int native_setup_msi_irqs(struct msi_irqs *msi, int nvec, int type);
>>  void native_teardown_msi_irq(unsigned int irq);
>> -void native_restore_msi_irqs(struct pci_dev *dev);
>> -int setup_msi_irq(struct pci_dev *dev, struct msi_de

RE: [RFC PATCH 11/11] x86/MSI: Refactor x86 MSI code

2014-08-20 Thread bharat.bhus...@freescale.com


> -Original Message-
> From: linux-pci-ow...@vger.kernel.org [mailto:linux-pci-ow...@vger.kernel.org]
> On Behalf Of Yijing Wang
> Sent: Saturday, July 26, 2014 8:39 AM
> To: linux-kernel@vger.kernel.org
> Cc: Xinwei Hu; Wuyun; Bjorn Helgaas; linux-...@vger.kernel.org;
> paul.mu...@huawei.com; James E.J. Bottomley; Marc Zyngier; linux-arm-
> ker...@lists.infradead.org; Russell King; linux-a...@vger.kernel.org; Basu
> Arnab-B45036; virtualizat...@lists.linux-foundation.org; Hanjun Guo; Yijing 
> Wang
> Subject: [RFC PATCH 11/11] x86/MSI: Refactor x86 MSI code

Please provide description about what this refactoring is? Also does other 
architecture also need similar refactoring ?

Thanks
-Bharat

> 
> Signed-off-by: Yijing Wang 
> ---
>  arch/x86/include/asm/io_apic.h   |2 +-
>  arch/x86/include/asm/irq_remapping.h |4 +-
>  arch/x86/include/asm/pci.h   |6 ++--
>  arch/x86/include/asm/x86_init.h  |   10 +++---
>  arch/x86/kernel/apic/io_apic.c   |   23 +++
>  arch/x86/kernel/x86_init.c   |   12 
>  drivers/iommu/amd_iommu.c|   16 ++
>  drivers/iommu/intel_irq_remapping.c  |9 --
>  drivers/iommu/irq_remapping.c|   51 -
>  drivers/iommu/irq_remapping.h|6 ++--
>  drivers/msi/msi.c|3 +-
>  11 files changed, 72 insertions(+), 70 deletions(-)
> 
> diff --git a/arch/x86/include/asm/io_apic.h b/arch/x86/include/asm/io_apic.h
> index 90f97b4..692a90f 100644
> --- a/arch/x86/include/asm/io_apic.h
> +++ b/arch/x86/include/asm/io_apic.h
> @@ -158,7 +158,7 @@ extern int native_setup_ioapic_entry(int, struct
> IO_APIC_route_entry *,
>struct io_apic_irq_attr *);
>  extern void eoi_ioapic_irq(unsigned int irq, struct irq_cfg *cfg);
> 
> -extern void native_compose_msi_msg(struct pci_dev *pdev,
> +extern void native_compose_msi_msg(struct msi_irqs *msi,
>  unsigned int irq, unsigned int dest,
>  struct msi_msg *msg, u8 hpet_id);
>  extern void native_eoi_ioapic_pin(int apic, int pin, int vector);
> diff --git a/arch/x86/include/asm/irq_remapping.h
> b/arch/x86/include/asm/irq_remapping.h
> index b7747c4..a10003d 100644
> --- a/arch/x86/include/asm/irq_remapping.h
> +++ b/arch/x86/include/asm/irq_remapping.h
> @@ -47,7 +47,7 @@ extern int setup_ioapic_remapped_entry(int irq,
>  int vector,
>  struct io_apic_irq_attr *attr);
>  extern void free_remapped_irq(int irq);
> -extern void compose_remapped_msi_msg(struct pci_dev *pdev,
> +extern void compose_remapped_msi_msg(struct msi_irqs *msi,
>unsigned int irq, unsigned int dest,
>struct msi_msg *msg, u8 hpet_id);
>  extern int setup_hpet_msi_remapped(unsigned int irq, unsigned int id);
> @@ -77,7 +77,7 @@ static inline int setup_ioapic_remapped_entry(int irq,
>   return -ENODEV;
>  }
>  static inline void free_remapped_irq(int irq) { }
> -static inline void compose_remapped_msi_msg(struct pci_dev *pdev,
> +static inline void compose_remapped_msi_msg(struct msi_irqs *msi,
>   unsigned int irq, unsigned int dest,
>   struct msi_msg *msg, u8 hpet_id)
>  {
> diff --git a/arch/x86/include/asm/pci.h b/arch/x86/include/asm/pci.h
> index 0892ea0..04c9ef6 100644
> --- a/arch/x86/include/asm/pci.h
> +++ b/arch/x86/include/asm/pci.h
> @@ -96,10 +96,10 @@ extern void pci_iommu_alloc(void);
>  #ifdef CONFIG_PCI_MSI
>  /* implemented in arch/x86/kernel/apic/io_apic. */
>  struct msi_desc;
> -int native_setup_msi_irqs(struct pci_dev *dev, int nvec, int type);
> +int native_setup_msi_irqs(struct msi_irqs *msi, int nvec, int type);
>  void native_teardown_msi_irq(unsigned int irq);
> -void native_restore_msi_irqs(struct pci_dev *dev);
> -int setup_msi_irq(struct pci_dev *dev, struct msi_desc *msidesc,
> +void native_restore_msi_irqs(struct msi_irqs *msi);
> +int setup_msi_irq(struct msi_irqs *msi, struct msi_desc *msidesc,
> unsigned int irq_base, unsigned int irq_offset);
>  #else
>  #define native_setup_msi_irqsNULL
> diff --git a/arch/x86/include/asm/x86_init.h b/arch/x86/include/asm/x86_init.h
> index e45e4da..8e42f17 100644
> --- a/arch/x86/include/asm/x86_init.h
> +++ b/arch/x86/include/asm/x86_init.h
> @@ -170,18 +170,18 @@ struct x86_platform_ops {
>   void (*apic_post_init)(void);
>  };
> 
> -struct pci_dev;
> +struct msi_irqs;
>  struct msi_msg;
>  struct msi_desc;
> 
>  s

RE: [RFC PATCH 11/11] x86/MSI: Refactor x86 MSI code

2014-08-20 Thread bharat.bhus...@freescale.com


 -Original Message-
 From: linux-pci-ow...@vger.kernel.org [mailto:linux-pci-ow...@vger.kernel.org]
 On Behalf Of Yijing Wang
 Sent: Saturday, July 26, 2014 8:39 AM
 To: linux-kernel@vger.kernel.org
 Cc: Xinwei Hu; Wuyun; Bjorn Helgaas; linux-...@vger.kernel.org;
 paul.mu...@huawei.com; James E.J. Bottomley; Marc Zyngier; linux-arm-
 ker...@lists.infradead.org; Russell King; linux-a...@vger.kernel.org; Basu
 Arnab-B45036; virtualizat...@lists.linux-foundation.org; Hanjun Guo; Yijing 
 Wang
 Subject: [RFC PATCH 11/11] x86/MSI: Refactor x86 MSI code

Please provide description about what this refactoring is? Also does other 
architecture also need similar refactoring ?

Thanks
-Bharat

 
 Signed-off-by: Yijing Wang wangyij...@huawei.com
 ---
  arch/x86/include/asm/io_apic.h   |2 +-
  arch/x86/include/asm/irq_remapping.h |4 +-
  arch/x86/include/asm/pci.h   |6 ++--
  arch/x86/include/asm/x86_init.h  |   10 +++---
  arch/x86/kernel/apic/io_apic.c   |   23 +++
  arch/x86/kernel/x86_init.c   |   12 
  drivers/iommu/amd_iommu.c|   16 ++
  drivers/iommu/intel_irq_remapping.c  |9 --
  drivers/iommu/irq_remapping.c|   51 -
  drivers/iommu/irq_remapping.h|6 ++--
  drivers/msi/msi.c|3 +-
  11 files changed, 72 insertions(+), 70 deletions(-)
 
 diff --git a/arch/x86/include/asm/io_apic.h b/arch/x86/include/asm/io_apic.h
 index 90f97b4..692a90f 100644
 --- a/arch/x86/include/asm/io_apic.h
 +++ b/arch/x86/include/asm/io_apic.h
 @@ -158,7 +158,7 @@ extern int native_setup_ioapic_entry(int, struct
 IO_APIC_route_entry *,
struct io_apic_irq_attr *);
  extern void eoi_ioapic_irq(unsigned int irq, struct irq_cfg *cfg);
 
 -extern void native_compose_msi_msg(struct pci_dev *pdev,
 +extern void native_compose_msi_msg(struct msi_irqs *msi,
  unsigned int irq, unsigned int dest,
  struct msi_msg *msg, u8 hpet_id);
  extern void native_eoi_ioapic_pin(int apic, int pin, int vector);
 diff --git a/arch/x86/include/asm/irq_remapping.h
 b/arch/x86/include/asm/irq_remapping.h
 index b7747c4..a10003d 100644
 --- a/arch/x86/include/asm/irq_remapping.h
 +++ b/arch/x86/include/asm/irq_remapping.h
 @@ -47,7 +47,7 @@ extern int setup_ioapic_remapped_entry(int irq,
  int vector,
  struct io_apic_irq_attr *attr);
  extern void free_remapped_irq(int irq);
 -extern void compose_remapped_msi_msg(struct pci_dev *pdev,
 +extern void compose_remapped_msi_msg(struct msi_irqs *msi,
unsigned int irq, unsigned int dest,
struct msi_msg *msg, u8 hpet_id);
  extern int setup_hpet_msi_remapped(unsigned int irq, unsigned int id);
 @@ -77,7 +77,7 @@ static inline int setup_ioapic_remapped_entry(int irq,
   return -ENODEV;
  }
  static inline void free_remapped_irq(int irq) { }
 -static inline void compose_remapped_msi_msg(struct pci_dev *pdev,
 +static inline void compose_remapped_msi_msg(struct msi_irqs *msi,
   unsigned int irq, unsigned int dest,
   struct msi_msg *msg, u8 hpet_id)
  {
 diff --git a/arch/x86/include/asm/pci.h b/arch/x86/include/asm/pci.h
 index 0892ea0..04c9ef6 100644
 --- a/arch/x86/include/asm/pci.h
 +++ b/arch/x86/include/asm/pci.h
 @@ -96,10 +96,10 @@ extern void pci_iommu_alloc(void);
  #ifdef CONFIG_PCI_MSI
  /* implemented in arch/x86/kernel/apic/io_apic. */
  struct msi_desc;
 -int native_setup_msi_irqs(struct pci_dev *dev, int nvec, int type);
 +int native_setup_msi_irqs(struct msi_irqs *msi, int nvec, int type);
  void native_teardown_msi_irq(unsigned int irq);
 -void native_restore_msi_irqs(struct pci_dev *dev);
 -int setup_msi_irq(struct pci_dev *dev, struct msi_desc *msidesc,
 +void native_restore_msi_irqs(struct msi_irqs *msi);
 +int setup_msi_irq(struct msi_irqs *msi, struct msi_desc *msidesc,
 unsigned int irq_base, unsigned int irq_offset);
  #else
  #define native_setup_msi_irqsNULL
 diff --git a/arch/x86/include/asm/x86_init.h b/arch/x86/include/asm/x86_init.h
 index e45e4da..8e42f17 100644
 --- a/arch/x86/include/asm/x86_init.h
 +++ b/arch/x86/include/asm/x86_init.h
 @@ -170,18 +170,18 @@ struct x86_platform_ops {
   void (*apic_post_init)(void);
  };
 
 -struct pci_dev;
 +struct msi_irqs;
  struct msi_msg;
  struct msi_desc;
 
  struct x86_msi_ops {
 - int (*setup_msi_irqs)(struct pci_dev *dev, int nvec, int type);
 - void (*compose_msi_msg)(struct pci_dev *dev, unsigned int irq,
 + int (*setup_msi_irqs)(struct msi_irqs *msi, int nvec, int type);
 + void (*compose_msi_msg)(struct msi_irqs *msi, unsigned int irq,
   unsigned int dest, struct

Re: [RFC PATCH 11/11] x86/MSI: Refactor x86 MSI code

2014-08-20 Thread Yijing Wang
On 2014/8/20 14:20, bharat.bhus...@freescale.com wrote:
 
 
 -Original Message-
 From: linux-pci-ow...@vger.kernel.org 
 [mailto:linux-pci-ow...@vger.kernel.org]
 On Behalf Of Yijing Wang
 Sent: Saturday, July 26, 2014 8:39 AM
 To: linux-kernel@vger.kernel.org
 Cc: Xinwei Hu; Wuyun; Bjorn Helgaas; linux-...@vger.kernel.org;
 paul.mu...@huawei.com; James E.J. Bottomley; Marc Zyngier; linux-arm-
 ker...@lists.infradead.org; Russell King; linux-a...@vger.kernel.org; Basu
 Arnab-B45036; virtualizat...@lists.linux-foundation.org; Hanjun Guo; Yijing 
 Wang
 Subject: [RFC PATCH 11/11] x86/MSI: Refactor x86 MSI code
 
 Please provide description about what this refactoring is? Also does other 
 architecture also need similar refactoring ?

Sorry, I will update all description in my new proposal.

I provided another patchset to decouple MSI driver and arch MSI code,
link: http://marc.info/?l=linux-pcim=140782732604433w=2

Based that, there are few changes related to arch MSI code.

I will rebas the patchset based that~

 
 Thanks
 -Bharat
 

 Signed-off-by: Yijing Wang wangyij...@huawei.com
 ---
  arch/x86/include/asm/io_apic.h   |2 +-
  arch/x86/include/asm/irq_remapping.h |4 +-
  arch/x86/include/asm/pci.h   |6 ++--
  arch/x86/include/asm/x86_init.h  |   10 +++---
  arch/x86/kernel/apic/io_apic.c   |   23 +++
  arch/x86/kernel/x86_init.c   |   12 
  drivers/iommu/amd_iommu.c|   16 ++
  drivers/iommu/intel_irq_remapping.c  |9 --
  drivers/iommu/irq_remapping.c|   51 
 -
  drivers/iommu/irq_remapping.h|6 ++--
  drivers/msi/msi.c|3 +-
  11 files changed, 72 insertions(+), 70 deletions(-)

 diff --git a/arch/x86/include/asm/io_apic.h b/arch/x86/include/asm/io_apic.h
 index 90f97b4..692a90f 100644
 --- a/arch/x86/include/asm/io_apic.h
 +++ b/arch/x86/include/asm/io_apic.h
 @@ -158,7 +158,7 @@ extern int native_setup_ioapic_entry(int, struct
 IO_APIC_route_entry *,
   struct io_apic_irq_attr *);
  extern void eoi_ioapic_irq(unsigned int irq, struct irq_cfg *cfg);

 -extern void native_compose_msi_msg(struct pci_dev *pdev,
 +extern void native_compose_msi_msg(struct msi_irqs *msi,
 unsigned int irq, unsigned int dest,
 struct msi_msg *msg, u8 hpet_id);
  extern void native_eoi_ioapic_pin(int apic, int pin, int vector);
 diff --git a/arch/x86/include/asm/irq_remapping.h
 b/arch/x86/include/asm/irq_remapping.h
 index b7747c4..a10003d 100644
 --- a/arch/x86/include/asm/irq_remapping.h
 +++ b/arch/x86/include/asm/irq_remapping.h
 @@ -47,7 +47,7 @@ extern int setup_ioapic_remapped_entry(int irq,
 int vector,
 struct io_apic_irq_attr *attr);
  extern void free_remapped_irq(int irq);
 -extern void compose_remapped_msi_msg(struct pci_dev *pdev,
 +extern void compose_remapped_msi_msg(struct msi_irqs *msi,
   unsigned int irq, unsigned int dest,
   struct msi_msg *msg, u8 hpet_id);
  extern int setup_hpet_msi_remapped(unsigned int irq, unsigned int id);
 @@ -77,7 +77,7 @@ static inline int setup_ioapic_remapped_entry(int irq,
  return -ENODEV;
  }
  static inline void free_remapped_irq(int irq) { }
 -static inline void compose_remapped_msi_msg(struct pci_dev *pdev,
 +static inline void compose_remapped_msi_msg(struct msi_irqs *msi,
  unsigned int irq, unsigned int dest,
  struct msi_msg *msg, u8 hpet_id)
  {
 diff --git a/arch/x86/include/asm/pci.h b/arch/x86/include/asm/pci.h
 index 0892ea0..04c9ef6 100644
 --- a/arch/x86/include/asm/pci.h
 +++ b/arch/x86/include/asm/pci.h
 @@ -96,10 +96,10 @@ extern void pci_iommu_alloc(void);
  #ifdef CONFIG_PCI_MSI
  /* implemented in arch/x86/kernel/apic/io_apic. */
  struct msi_desc;
 -int native_setup_msi_irqs(struct pci_dev *dev, int nvec, int type);
 +int native_setup_msi_irqs(struct msi_irqs *msi, int nvec, int type);
  void native_teardown_msi_irq(unsigned int irq);
 -void native_restore_msi_irqs(struct pci_dev *dev);
 -int setup_msi_irq(struct pci_dev *dev, struct msi_desc *msidesc,
 +void native_restore_msi_irqs(struct msi_irqs *msi);
 +int setup_msi_irq(struct msi_irqs *msi, struct msi_desc *msidesc,
unsigned int irq_base, unsigned int irq_offset);
  #else
  #define native_setup_msi_irqs   NULL
 diff --git a/arch/x86/include/asm/x86_init.h 
 b/arch/x86/include/asm/x86_init.h
 index e45e4da..8e42f17 100644
 --- a/arch/x86/include/asm/x86_init.h
 +++ b/arch/x86/include/asm/x86_init.h
 @@ -170,18 +170,18 @@ struct x86_platform_ops {
  void (*apic_post_init)(void);
  };

 -struct pci_dev;
 +struct msi_irqs;
  struct msi_msg;
  struct msi_desc;

  struct x86_msi_ops

[RFC PATCH 11/11] x86/MSI: Refactor x86 MSI code

2014-07-25 Thread Yijing Wang
Signed-off-by: Yijing Wang 
---
 arch/x86/include/asm/io_apic.h   |2 +-
 arch/x86/include/asm/irq_remapping.h |4 +-
 arch/x86/include/asm/pci.h   |6 ++--
 arch/x86/include/asm/x86_init.h  |   10 +++---
 arch/x86/kernel/apic/io_apic.c   |   23 +++
 arch/x86/kernel/x86_init.c   |   12 
 drivers/iommu/amd_iommu.c|   16 ++
 drivers/iommu/intel_irq_remapping.c  |9 --
 drivers/iommu/irq_remapping.c|   51 -
 drivers/iommu/irq_remapping.h|6 ++--
 drivers/msi/msi.c|3 +-
 11 files changed, 72 insertions(+), 70 deletions(-)

diff --git a/arch/x86/include/asm/io_apic.h b/arch/x86/include/asm/io_apic.h
index 90f97b4..692a90f 100644
--- a/arch/x86/include/asm/io_apic.h
+++ b/arch/x86/include/asm/io_apic.h
@@ -158,7 +158,7 @@ extern int native_setup_ioapic_entry(int, struct 
IO_APIC_route_entry *,
 struct io_apic_irq_attr *);
 extern void eoi_ioapic_irq(unsigned int irq, struct irq_cfg *cfg);
 
-extern void native_compose_msi_msg(struct pci_dev *pdev,
+extern void native_compose_msi_msg(struct msi_irqs *msi,
   unsigned int irq, unsigned int dest,
   struct msi_msg *msg, u8 hpet_id);
 extern void native_eoi_ioapic_pin(int apic, int pin, int vector);
diff --git a/arch/x86/include/asm/irq_remapping.h 
b/arch/x86/include/asm/irq_remapping.h
index b7747c4..a10003d 100644
--- a/arch/x86/include/asm/irq_remapping.h
+++ b/arch/x86/include/asm/irq_remapping.h
@@ -47,7 +47,7 @@ extern int setup_ioapic_remapped_entry(int irq,
   int vector,
   struct io_apic_irq_attr *attr);
 extern void free_remapped_irq(int irq);
-extern void compose_remapped_msi_msg(struct pci_dev *pdev,
+extern void compose_remapped_msi_msg(struct msi_irqs *msi,
 unsigned int irq, unsigned int dest,
 struct msi_msg *msg, u8 hpet_id);
 extern int setup_hpet_msi_remapped(unsigned int irq, unsigned int id);
@@ -77,7 +77,7 @@ static inline int setup_ioapic_remapped_entry(int irq,
return -ENODEV;
 }
 static inline void free_remapped_irq(int irq) { }
-static inline void compose_remapped_msi_msg(struct pci_dev *pdev,
+static inline void compose_remapped_msi_msg(struct msi_irqs *msi,
unsigned int irq, unsigned int dest,
struct msi_msg *msg, u8 hpet_id)
 {
diff --git a/arch/x86/include/asm/pci.h b/arch/x86/include/asm/pci.h
index 0892ea0..04c9ef6 100644
--- a/arch/x86/include/asm/pci.h
+++ b/arch/x86/include/asm/pci.h
@@ -96,10 +96,10 @@ extern void pci_iommu_alloc(void);
 #ifdef CONFIG_PCI_MSI
 /* implemented in arch/x86/kernel/apic/io_apic. */
 struct msi_desc;
-int native_setup_msi_irqs(struct pci_dev *dev, int nvec, int type);
+int native_setup_msi_irqs(struct msi_irqs *msi, int nvec, int type);
 void native_teardown_msi_irq(unsigned int irq);
-void native_restore_msi_irqs(struct pci_dev *dev);
-int setup_msi_irq(struct pci_dev *dev, struct msi_desc *msidesc,
+void native_restore_msi_irqs(struct msi_irqs *msi);
+int setup_msi_irq(struct msi_irqs *msi, struct msi_desc *msidesc,
  unsigned int irq_base, unsigned int irq_offset);
 #else
 #define native_setup_msi_irqs  NULL
diff --git a/arch/x86/include/asm/x86_init.h b/arch/x86/include/asm/x86_init.h
index e45e4da..8e42f17 100644
--- a/arch/x86/include/asm/x86_init.h
+++ b/arch/x86/include/asm/x86_init.h
@@ -170,18 +170,18 @@ struct x86_platform_ops {
void (*apic_post_init)(void);
 };
 
-struct pci_dev;
+struct msi_irqs;
 struct msi_msg;
 struct msi_desc;
 
 struct x86_msi_ops {
-   int (*setup_msi_irqs)(struct pci_dev *dev, int nvec, int type);
-   void (*compose_msi_msg)(struct pci_dev *dev, unsigned int irq,
+   int (*setup_msi_irqs)(struct msi_irqs *msi, int nvec, int type);
+   void (*compose_msi_msg)(struct msi_irqs *msi, unsigned int irq,
unsigned int dest, struct msi_msg *msg,
   u8 hpet_id);
void (*teardown_msi_irq)(unsigned int irq);
-   void (*teardown_msi_irqs)(struct pci_dev *dev);
-   void (*restore_msi_irqs)(struct pci_dev *dev);
+   void (*teardown_msi_irqs)(struct msi_irqs *msi);
+   void (*restore_msi_irqs)(struct msi_irqs *msi);
int  (*setup_hpet_msi)(unsigned int irq, unsigned int id);
u32 (*msi_mask_irq)(struct msi_desc *desc, u32 mask, u32 flag);
u32 (*msix_mask_irq)(struct msi_desc *desc, u32 flag);
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index b833042..3cb4a6a 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -2939,7 +2939,7 @@ void arch_teardown_hwirq(unsigned int irq)
 /*
  

[RFC PATCH 11/11] x86/MSI: Refactor x86 MSI code

2014-07-25 Thread Yijing Wang
Signed-off-by: Yijing Wang wangyij...@huawei.com
---
 arch/x86/include/asm/io_apic.h   |2 +-
 arch/x86/include/asm/irq_remapping.h |4 +-
 arch/x86/include/asm/pci.h   |6 ++--
 arch/x86/include/asm/x86_init.h  |   10 +++---
 arch/x86/kernel/apic/io_apic.c   |   23 +++
 arch/x86/kernel/x86_init.c   |   12 
 drivers/iommu/amd_iommu.c|   16 ++
 drivers/iommu/intel_irq_remapping.c  |9 --
 drivers/iommu/irq_remapping.c|   51 -
 drivers/iommu/irq_remapping.h|6 ++--
 drivers/msi/msi.c|3 +-
 11 files changed, 72 insertions(+), 70 deletions(-)

diff --git a/arch/x86/include/asm/io_apic.h b/arch/x86/include/asm/io_apic.h
index 90f97b4..692a90f 100644
--- a/arch/x86/include/asm/io_apic.h
+++ b/arch/x86/include/asm/io_apic.h
@@ -158,7 +158,7 @@ extern int native_setup_ioapic_entry(int, struct 
IO_APIC_route_entry *,
 struct io_apic_irq_attr *);
 extern void eoi_ioapic_irq(unsigned int irq, struct irq_cfg *cfg);
 
-extern void native_compose_msi_msg(struct pci_dev *pdev,
+extern void native_compose_msi_msg(struct msi_irqs *msi,
   unsigned int irq, unsigned int dest,
   struct msi_msg *msg, u8 hpet_id);
 extern void native_eoi_ioapic_pin(int apic, int pin, int vector);
diff --git a/arch/x86/include/asm/irq_remapping.h 
b/arch/x86/include/asm/irq_remapping.h
index b7747c4..a10003d 100644
--- a/arch/x86/include/asm/irq_remapping.h
+++ b/arch/x86/include/asm/irq_remapping.h
@@ -47,7 +47,7 @@ extern int setup_ioapic_remapped_entry(int irq,
   int vector,
   struct io_apic_irq_attr *attr);
 extern void free_remapped_irq(int irq);
-extern void compose_remapped_msi_msg(struct pci_dev *pdev,
+extern void compose_remapped_msi_msg(struct msi_irqs *msi,
 unsigned int irq, unsigned int dest,
 struct msi_msg *msg, u8 hpet_id);
 extern int setup_hpet_msi_remapped(unsigned int irq, unsigned int id);
@@ -77,7 +77,7 @@ static inline int setup_ioapic_remapped_entry(int irq,
return -ENODEV;
 }
 static inline void free_remapped_irq(int irq) { }
-static inline void compose_remapped_msi_msg(struct pci_dev *pdev,
+static inline void compose_remapped_msi_msg(struct msi_irqs *msi,
unsigned int irq, unsigned int dest,
struct msi_msg *msg, u8 hpet_id)
 {
diff --git a/arch/x86/include/asm/pci.h b/arch/x86/include/asm/pci.h
index 0892ea0..04c9ef6 100644
--- a/arch/x86/include/asm/pci.h
+++ b/arch/x86/include/asm/pci.h
@@ -96,10 +96,10 @@ extern void pci_iommu_alloc(void);
 #ifdef CONFIG_PCI_MSI
 /* implemented in arch/x86/kernel/apic/io_apic. */
 struct msi_desc;
-int native_setup_msi_irqs(struct pci_dev *dev, int nvec, int type);
+int native_setup_msi_irqs(struct msi_irqs *msi, int nvec, int type);
 void native_teardown_msi_irq(unsigned int irq);
-void native_restore_msi_irqs(struct pci_dev *dev);
-int setup_msi_irq(struct pci_dev *dev, struct msi_desc *msidesc,
+void native_restore_msi_irqs(struct msi_irqs *msi);
+int setup_msi_irq(struct msi_irqs *msi, struct msi_desc *msidesc,
  unsigned int irq_base, unsigned int irq_offset);
 #else
 #define native_setup_msi_irqs  NULL
diff --git a/arch/x86/include/asm/x86_init.h b/arch/x86/include/asm/x86_init.h
index e45e4da..8e42f17 100644
--- a/arch/x86/include/asm/x86_init.h
+++ b/arch/x86/include/asm/x86_init.h
@@ -170,18 +170,18 @@ struct x86_platform_ops {
void (*apic_post_init)(void);
 };
 
-struct pci_dev;
+struct msi_irqs;
 struct msi_msg;
 struct msi_desc;
 
 struct x86_msi_ops {
-   int (*setup_msi_irqs)(struct pci_dev *dev, int nvec, int type);
-   void (*compose_msi_msg)(struct pci_dev *dev, unsigned int irq,
+   int (*setup_msi_irqs)(struct msi_irqs *msi, int nvec, int type);
+   void (*compose_msi_msg)(struct msi_irqs *msi, unsigned int irq,
unsigned int dest, struct msi_msg *msg,
   u8 hpet_id);
void (*teardown_msi_irq)(unsigned int irq);
-   void (*teardown_msi_irqs)(struct pci_dev *dev);
-   void (*restore_msi_irqs)(struct pci_dev *dev);
+   void (*teardown_msi_irqs)(struct msi_irqs *msi);
+   void (*restore_msi_irqs)(struct msi_irqs *msi);
int  (*setup_hpet_msi)(unsigned int irq, unsigned int id);
u32 (*msi_mask_irq)(struct msi_desc *desc, u32 mask, u32 flag);
u32 (*msix_mask_irq)(struct msi_desc *desc, u32 flag);
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index b833042..3cb4a6a 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -2939,7 +2939,7 @@ void