All of lore.kernel.org
 help / color / mirror / Atom feed
From: Boqun Feng <boqun.feng@gmail.com>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: LKML <linux-kernel@vger.kernel.org>,
	x86@kernel.org, Wei Liu <wei.liu@kernel.org>,
	"K. Y. Srinivasan" <kys@microsoft.com>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	Joerg Roedel <joro@8bytes.org>,
	linux-hyperv@vger.kernel.org, iommu@lists.linux-foundation.org,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Jon Derrick <jonathan.derrick@intel.com>,
	Lu Baolu <baolu.lu@linux.intel.com>,
	Steve Wahl <steve.wahl@hpe.com>,
	Dimitri Sivanich <sivanich@hpe.com>, Russ Anderson <rja@hpe.com>,
	linux-pci@vger.kernel.org, Bjorn Helgaas <bhelgaas@google.com>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	xen-devel@lists.xenproject.org, Juergen Gross <jgross@suse.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Marc Zyngier <maz@kernel.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	Megha Dey <megha.dey@intel.com>,
	Jason Gunthorpe <jgg@mellanox.com>,
	Dave Jiang <dave.jiang@intel.com>,
	Alex Williamson <alex.williamson@redhat.com>,
	Jacob Pan <jacob.jun.pan@intel.com>,
	Baolu Lu <baolu.lu@intel.com>, Kevin Tian <kevin.tian@intel.com>,
	Dan Williams <dan.j.williams@intel.com>
Subject: Re: [patch RFC 10/38] x86/ioapic: Consolidate IOAPIC allocation
Date: Wed, 26 Aug 2020 16:40:19 +0800	[thread overview]
Message-ID: <20200826084019.GA6174@debian-boqun.qqnc3lrjykvubdpftowmye0fmh.lx.internal.cloudapp.net> (raw)
In-Reply-To: <20200821002946.297823391@linutronix.de>

Hi Thomas,

I hit a compiler error while I was trying to compile this patchset:

arch/x86/kernel/devicetree.c: In function ‘dt_irqdomain_alloc’:
arch/x86/kernel/devicetree.c:232:6: error: ‘struct irq_alloc_info’ has no member named ‘ioapic_id’; did you mean ‘ioapic’?
  232 |  tmp.ioapic_id = mpc_ioapic_id(mp_irqdomain_ioapic_idx(domain));
      |      ^~~~~~~~~
      |      ioapic
arch/x86/kernel/devicetree.c:233:6: error: ‘struct irq_alloc_info’ has no member named ‘ioapic_pin’; did you mean ‘ioapic’?
  233 |  tmp.ioapic_pin = fwspec->param[0]
      |      ^~~~~~~~~~
      |      ioapic

with CONFIG_OF=y. IIUC, the following changes are needed to fold into
this patch. (At least I can continue to compile the kernel with this
change)

diff --git a/arch/x86/kernel/devicetree.c b/arch/x86/kernel/devicetree.c
index a0e8fc7d85f1..ddffd80f5c52 100644
--- a/arch/x86/kernel/devicetree.c
+++ b/arch/x86/kernel/devicetree.c
@@ -229,8 +229,8 @@ static int dt_irqdomain_alloc(struct irq_domain *domain, unsigned int virq,
 
 	it = &of_ioapic_type[type_index];
 	ioapic_set_alloc_attr(&tmp, NUMA_NO_NODE, it->trigger, it->polarity);
-	tmp.ioapic_id = mpc_ioapic_id(mp_irqdomain_ioapic_idx(domain));
-	tmp.ioapic_pin = fwspec->param[0];
+	tmp.devid = mpc_ioapic_id(mp_irqdomain_ioapic_idx(domain));
+	tmp.ioapic.pin = fwspec->param[0];
 
 	return mp_irqdomain_alloc(domain, virq, nr_irqs, &tmp);
 }

Regards,
Boqun

On Fri, Aug 21, 2020 at 02:24:34AM +0200, Thomas Gleixner wrote:
> Move the IOAPIC specific fields into their own struct and reuse the common
> devid. Get rid of the #ifdeffery as it does not matter at all whether the
> alloc info is a couple of bytes longer or not.
> 
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> Cc: Wei Liu <wei.liu@kernel.org>
> Cc: "K. Y. Srinivasan" <kys@microsoft.com>
> Cc: Stephen Hemminger <sthemmin@microsoft.com>
> Cc: Joerg Roedel <joro@8bytes.org>
> Cc: linux-hyperv@vger.kernel.org
> Cc: iommu@lists.linux-foundation.org
> Cc: Haiyang Zhang <haiyangz@microsoft.com>
> Cc: Jon Derrick <jonathan.derrick@intel.com>
> Cc: Lu Baolu <baolu.lu@linux.intel.com>
> ---
>  arch/x86/include/asm/hw_irq.h       |   23 ++++++-----
>  arch/x86/kernel/apic/io_apic.c      |   70 ++++++++++++++++++------------------
>  drivers/iommu/amd/iommu.c           |   14 +++----
>  drivers/iommu/hyperv-iommu.c        |    2 -
>  drivers/iommu/intel/irq_remapping.c |   18 ++++-----
>  5 files changed, 64 insertions(+), 63 deletions(-)
> 
> --- a/arch/x86/include/asm/hw_irq.h
> +++ b/arch/x86/include/asm/hw_irq.h
> @@ -44,6 +44,15 @@ enum irq_alloc_type {
>  	X86_IRQ_ALLOC_TYPE_HPET_GET_PARENT,
>  };
>  
> +struct ioapic_alloc_info {
> +	int				pin;
> +	int				node;
> +	u32				trigger : 1;
> +	u32				polarity : 1;
> +	u32				valid : 1;
> +	struct IO_APIC_route_entry	*entry;
> +};
> +
>  /**
>   * irq_alloc_info - X86 specific interrupt allocation info
>   * @type:	X86 specific allocation type
> @@ -53,6 +62,8 @@ enum irq_alloc_type {
>   * @mask:	CPU mask for vector allocation
>   * @desc:	Pointer to msi descriptor
>   * @data:	Allocation specific data
> + *
> + * @ioapic:	IOAPIC specific allocation data
>   */
>  struct irq_alloc_info {
>  	enum irq_alloc_type	type;
> @@ -64,6 +75,7 @@ struct irq_alloc_info {
>  	void			*data;
>  
>  	union {
> +		struct ioapic_alloc_info	ioapic;
>  		int		unused;
>  #ifdef	CONFIG_PCI_MSI
>  		struct {
> @@ -71,17 +83,6 @@ struct irq_alloc_info {
>  			irq_hw_number_t	msi_hwirq;
>  		};
>  #endif
> -#ifdef	CONFIG_X86_IO_APIC
> -		struct {
> -			int		ioapic_id;
> -			int		ioapic_pin;
> -			int		ioapic_node;
> -			u32		ioapic_trigger : 1;
> -			u32		ioapic_polarity : 1;
> -			u32		ioapic_valid : 1;
> -			struct IO_APIC_route_entry *ioapic_entry;
> -		};
> -#endif
>  #ifdef	CONFIG_DMAR_TABLE
>  		struct {
>  			int		dmar_id;
> --- a/arch/x86/kernel/apic/io_apic.c
> +++ b/arch/x86/kernel/apic/io_apic.c
> @@ -860,10 +860,10 @@ void ioapic_set_alloc_attr(struct irq_al
>  {
>  	init_irq_alloc_info(info, NULL);
>  	info->type = X86_IRQ_ALLOC_TYPE_IOAPIC;
> -	info->ioapic_node = node;
> -	info->ioapic_trigger = trigger;
> -	info->ioapic_polarity = polarity;
> -	info->ioapic_valid = 1;
> +	info->ioapic.node = node;
> +	info->ioapic.trigger = trigger;
> +	info->ioapic.polarity = polarity;
> +	info->ioapic.valid = 1;
>  }
>  
>  #ifndef CONFIG_ACPI
> @@ -878,32 +878,32 @@ static void ioapic_copy_alloc_attr(struc
>  
>  	copy_irq_alloc_info(dst, src);
>  	dst->type = X86_IRQ_ALLOC_TYPE_IOAPIC;
> -	dst->ioapic_id = mpc_ioapic_id(ioapic_idx);
> -	dst->ioapic_pin = pin;
> -	dst->ioapic_valid = 1;
> -	if (src && src->ioapic_valid) {
> -		dst->ioapic_node = src->ioapic_node;
> -		dst->ioapic_trigger = src->ioapic_trigger;
> -		dst->ioapic_polarity = src->ioapic_polarity;
> +	dst->devid = mpc_ioapic_id(ioapic_idx);
> +	dst->ioapic.pin = pin;
> +	dst->ioapic.valid = 1;
> +	if (src && src->ioapic.valid) {
> +		dst->ioapic.node = src->ioapic.node;
> +		dst->ioapic.trigger = src->ioapic.trigger;
> +		dst->ioapic.polarity = src->ioapic.polarity;
>  	} else {
> -		dst->ioapic_node = NUMA_NO_NODE;
> +		dst->ioapic.node = NUMA_NO_NODE;
>  		if (acpi_get_override_irq(gsi, &trigger, &polarity) >= 0) {
> -			dst->ioapic_trigger = trigger;
> -			dst->ioapic_polarity = polarity;
> +			dst->ioapic.trigger = trigger;
> +			dst->ioapic.polarity = polarity;
>  		} else {
>  			/*
>  			 * PCI interrupts are always active low level
>  			 * triggered.
>  			 */
> -			dst->ioapic_trigger = IOAPIC_LEVEL;
> -			dst->ioapic_polarity = IOAPIC_POL_LOW;
> +			dst->ioapic.trigger = IOAPIC_LEVEL;
> +			dst->ioapic.polarity = IOAPIC_POL_LOW;
>  		}
>  	}
>  }
>  
>  static int ioapic_alloc_attr_node(struct irq_alloc_info *info)
>  {
> -	return (info && info->ioapic_valid) ? info->ioapic_node : NUMA_NO_NODE;
> +	return (info && info->ioapic.valid) ? info->ioapic.node : NUMA_NO_NODE;
>  }
>  
>  static void mp_register_handler(unsigned int irq, unsigned long trigger)
> @@ -933,14 +933,14 @@ static bool mp_check_pin_attr(int irq, s
>  	 * pin with real trigger and polarity attributes.
>  	 */
>  	if (irq < nr_legacy_irqs() && data->count == 1) {
> -		if (info->ioapic_trigger != data->trigger)
> -			mp_register_handler(irq, info->ioapic_trigger);
> -		data->entry.trigger = data->trigger = info->ioapic_trigger;
> -		data->entry.polarity = data->polarity = info->ioapic_polarity;
> +		if (info->ioapic.trigger != data->trigger)
> +			mp_register_handler(irq, info->ioapic.trigger);
> +		data->entry.trigger = data->trigger = info->ioapic.trigger;
> +		data->entry.polarity = data->polarity = info->ioapic.polarity;
>  	}
>  
> -	return data->trigger == info->ioapic_trigger &&
> -	       data->polarity == info->ioapic_polarity;
> +	return data->trigger == info->ioapic.trigger &&
> +	       data->polarity == info->ioapic.polarity;
>  }
>  
>  static int alloc_irq_from_domain(struct irq_domain *domain, int ioapic, u32 gsi,
> @@ -1002,7 +1002,7 @@ static int alloc_isa_irq_from_domain(str
>  		if (!mp_check_pin_attr(irq, info))
>  			return -EBUSY;
>  		if (__add_pin_to_irq_node(irq_data->chip_data, node, ioapic,
> -					  info->ioapic_pin))
> +					  info->ioapic.pin))
>  			return -ENOMEM;
>  	} else {
>  		info->flags |= X86_IRQ_ALLOC_LEGACY;
> @@ -2092,8 +2092,8 @@ static int mp_alloc_timer_irq(int ioapic
>  		struct irq_alloc_info info;
>  
>  		ioapic_set_alloc_attr(&info, NUMA_NO_NODE, 0, 0);
> -		info.ioapic_id = mpc_ioapic_id(ioapic);
> -		info.ioapic_pin = pin;
> +		info.devid = mpc_ioapic_id(ioapic);
> +		info.ioapic.pin = pin;
>  		mutex_lock(&ioapic_mutex);
>  		irq = alloc_isa_irq_from_domain(domain, 0, ioapic, pin, &info);
>  		mutex_unlock(&ioapic_mutex);
> @@ -2297,7 +2297,7 @@ static int mp_irqdomain_create(int ioapi
>  
>  	init_irq_alloc_info(&info, NULL);
>  	info.type = X86_IRQ_ALLOC_TYPE_IOAPIC_GET_PARENT;
> -	info.ioapic_id = mpc_ioapic_id(ioapic);
> +	info.devid = mpc_ioapic_id(ioapic);
>  	parent = irq_remapping_get_irq_domain(&info);
>  	if (!parent)
>  		parent = x86_vector_domain;
> @@ -2932,9 +2932,9 @@ int mp_ioapic_registered(u32 gsi_base)
>  static void mp_irqdomain_get_attr(u32 gsi, struct mp_chip_data *data,
>  				  struct irq_alloc_info *info)
>  {
> -	if (info && info->ioapic_valid) {
> -		data->trigger = info->ioapic_trigger;
> -		data->polarity = info->ioapic_polarity;
> +	if (info && info->ioapic.valid) {
> +		data->trigger = info->ioapic.trigger;
> +		data->polarity = info->ioapic.polarity;
>  	} else if (acpi_get_override_irq(gsi, &data->trigger,
>  					 &data->polarity) < 0) {
>  		/* PCI interrupts are always active low level triggered. */
> @@ -2980,7 +2980,7 @@ int mp_irqdomain_alloc(struct irq_domain
>  		return -EINVAL;
>  
>  	ioapic = mp_irqdomain_ioapic_idx(domain);
> -	pin = info->ioapic_pin;
> +	pin = info->ioapic.pin;
>  	if (irq_find_mapping(domain, (irq_hw_number_t)pin) > 0)
>  		return -EEXIST;
>  
> @@ -2988,7 +2988,7 @@ int mp_irqdomain_alloc(struct irq_domain
>  	if (!data)
>  		return -ENOMEM;
>  
> -	info->ioapic_entry = &data->entry;
> +	info->ioapic.entry = &data->entry;
>  	ret = irq_domain_alloc_irqs_parent(domain, virq, nr_irqs, info);
>  	if (ret < 0) {
>  		kfree(data);
> @@ -2996,7 +2996,7 @@ int mp_irqdomain_alloc(struct irq_domain
>  	}
>  
>  	INIT_LIST_HEAD(&data->irq_2_pin);
> -	irq_data->hwirq = info->ioapic_pin;
> +	irq_data->hwirq = info->ioapic.pin;
>  	irq_data->chip = (domain->parent == x86_vector_domain) ?
>  			  &ioapic_chip : &ioapic_ir_chip;
>  	irq_data->chip_data = data;
> @@ -3006,8 +3006,8 @@ int mp_irqdomain_alloc(struct irq_domain
>  	add_pin_to_irq_node(data, ioapic_alloc_attr_node(info), ioapic, pin);
>  
>  	local_irq_save(flags);
> -	if (info->ioapic_entry)
> -		mp_setup_entry(cfg, data, info->ioapic_entry);
> +	if (info->ioapic.entry)
> +		mp_setup_entry(cfg, data, info->ioapic.entry);
>  	mp_register_handler(virq, data->trigger);
>  	if (virq < nr_legacy_irqs())
>  		legacy_pic->mask(virq);
> --- a/drivers/iommu/amd/iommu.c
> +++ b/drivers/iommu/amd/iommu.c
> @@ -3508,7 +3508,7 @@ static int get_devid(struct irq_alloc_in
>  	switch (info->type) {
>  	case X86_IRQ_ALLOC_TYPE_IOAPIC:
>  	case X86_IRQ_ALLOC_TYPE_IOAPIC_GET_PARENT:
> -		return get_ioapic_devid(info->ioapic_id);
> +		return get_ioapic_devid(info->devid);
>  	case X86_IRQ_ALLOC_TYPE_HPET:
>  	case X86_IRQ_ALLOC_TYPE_HPET_GET_PARENT:
>  		return get_hpet_devid(info->devid);
> @@ -3586,15 +3586,15 @@ static void irq_remapping_prepare_irte(s
>  	switch (info->type) {
>  	case X86_IRQ_ALLOC_TYPE_IOAPIC:
>  		/* Setup IOAPIC entry */
> -		entry = info->ioapic_entry;
> -		info->ioapic_entry = NULL;
> +		entry = info->ioapic.entry;
> +		info->ioapic.entry = NULL;
>  		memset(entry, 0, sizeof(*entry));
>  		entry->vector        = index;
>  		entry->mask          = 0;
> -		entry->trigger       = info->ioapic_trigger;
> -		entry->polarity      = info->ioapic_polarity;
> +		entry->trigger       = info->ioapic.trigger;
> +		entry->polarity      = info->ioapic.polarity;
>  		/* Mask level triggered irqs. */
> -		if (info->ioapic_trigger)
> +		if (info->ioapic.trigger)
>  			entry->mask = 1;
>  		break;
>  
> @@ -3680,7 +3680,7 @@ static int irq_remapping_alloc(struct ir
>  					iommu->irte_ops->set_allocated(table, i);
>  			}
>  			WARN_ON(table->min_index != 32);
> -			index = info->ioapic_pin;
> +			index = info->ioapic.pin;
>  		} else {
>  			index = -ENOMEM;
>  		}
> --- a/drivers/iommu/hyperv-iommu.c
> +++ b/drivers/iommu/hyperv-iommu.c
> @@ -101,7 +101,7 @@ static int hyperv_irq_remapping_alloc(st
>  	 * in the chip_data and hyperv_irq_remapping_activate()/hyperv_ir_set_
>  	 * affinity() set vector and dest_apicid directly into IO-APIC entry.
>  	 */
> -	irq_data->chip_data = info->ioapic_entry;
> +	irq_data->chip_data = info->ioapic.entry;
>  
>  	/*
>  	 * Hypver-V IO APIC irq affinity should be in the scope of
> --- a/drivers/iommu/intel/irq_remapping.c
> +++ b/drivers/iommu/intel/irq_remapping.c
> @@ -1113,7 +1113,7 @@ static struct irq_domain *intel_get_irq_
>  
>  	switch (info->type) {
>  	case X86_IRQ_ALLOC_TYPE_IOAPIC_GET_PARENT:
> -		return map_ioapic_to_ir(info->ioapic_id);
> +		return map_ioapic_to_ir(info->devid);
>  	case X86_IRQ_ALLOC_TYPE_HPET_GET_PARENT:
>  		return map_hpet_to_ir(info->devid);
>  	case X86_IRQ_ALLOC_TYPE_PCI_MSI:
> @@ -1254,16 +1254,16 @@ static void intel_irq_remapping_prepare_
>  	switch (info->type) {
>  	case X86_IRQ_ALLOC_TYPE_IOAPIC:
>  		/* Set source-id of interrupt request */
> -		set_ioapic_sid(irte, info->ioapic_id);
> +		set_ioapic_sid(irte, info->devid);
>  		apic_printk(APIC_VERBOSE, KERN_DEBUG "IOAPIC[%d]: Set IRTE entry (P:%d FPD:%d Dst_Mode:%d Redir_hint:%d Trig_Mode:%d Dlvry_Mode:%X Avail:%X Vector:%02X Dest:%08X SID:%04X SQ:%X SVT:%X)\n",
> -			info->ioapic_id, irte->present, irte->fpd,
> +			info->devid, irte->present, irte->fpd,
>  			irte->dst_mode, irte->redir_hint,
>  			irte->trigger_mode, irte->dlvry_mode,
>  			irte->avail, irte->vector, irte->dest_id,
>  			irte->sid, irte->sq, irte->svt);
>  
> -		entry = (struct IR_IO_APIC_route_entry *)info->ioapic_entry;
> -		info->ioapic_entry = NULL;
> +		entry = (struct IR_IO_APIC_route_entry *)info->ioapic.entry;
> +		info->ioapic.entry = NULL;
>  		memset(entry, 0, sizeof(*entry));
>  		entry->index2	= (index >> 15) & 0x1;
>  		entry->zero	= 0;
> @@ -1273,11 +1273,11 @@ static void intel_irq_remapping_prepare_
>  		 * IO-APIC RTE will be configured with virtual vector.
>  		 * irq handler will do the explicit EOI to the io-apic.
>  		 */
> -		entry->vector	= info->ioapic_pin;
> +		entry->vector	= info->ioapic.pin;
>  		entry->mask	= 0;			/* enable IRQ */
> -		entry->trigger	= info->ioapic_trigger;
> -		entry->polarity	= info->ioapic_polarity;
> -		if (info->ioapic_trigger)
> +		entry->trigger	= info->ioapic.trigger;
> +		entry->polarity	= info->ioapic.polarity;
> +		if (info->ioapic.trigger)
>  			entry->mask = 1; /* Mask level triggered irqs. */
>  		break;
>  
> 

WARNING: multiple messages have this Message-ID (diff)
From: Boqun Feng <boqun.feng@gmail.com>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Dimitri Sivanich <sivanich@hpe.com>,
	linux-hyperv@vger.kernel.org, Steve Wahl <steve.wahl@hpe.com>,
	linux-pci@vger.kernel.org, "K. Y. Srinivasan" <kys@microsoft.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Wei Liu <wei.liu@kernel.org>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	Baolu Lu <baolu.lu@intel.com>, Marc Zyngier <maz@kernel.org>,
	x86@kernel.org, Jason Gunthorpe <jgg@mellanox.com>,
	Megha Dey <megha.dey@intel.com>,
	xen-devel@lists.xenproject.org, Kevin Tian <kevin.tian@intel.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Alex Williamson <alex.williamson@redhat.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Dave Jiang <dave.jiang@intel.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Jon Derrick <jonathan.derrick@intel.com>,
	Juergen Gross <jgross@suse.com>, Russ Anderson <rja@hpe.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	LKML <linux-kernel@vger.kernel.org>,
	iommu@lists.linux-foundation.org,
	Jacob Pan <jacob.jun.pan@intel.com>,
	"Rafael J. Wysocki" <rafael@kernel.org>
Subject: Re: [patch RFC 10/38] x86/ioapic: Consolidate IOAPIC allocation
Date: Wed, 26 Aug 2020 16:40:19 +0800	[thread overview]
Message-ID: <20200826084019.GA6174@debian-boqun.qqnc3lrjykvubdpftowmye0fmh.lx.internal.cloudapp.net> (raw)
In-Reply-To: <20200821002946.297823391@linutronix.de>

Hi Thomas,

I hit a compiler error while I was trying to compile this patchset:

arch/x86/kernel/devicetree.c: In function ‘dt_irqdomain_alloc’:
arch/x86/kernel/devicetree.c:232:6: error: ‘struct irq_alloc_info’ has no member named ‘ioapic_id’; did you mean ‘ioapic’?
  232 |  tmp.ioapic_id = mpc_ioapic_id(mp_irqdomain_ioapic_idx(domain));
      |      ^~~~~~~~~
      |      ioapic
arch/x86/kernel/devicetree.c:233:6: error: ‘struct irq_alloc_info’ has no member named ‘ioapic_pin’; did you mean ‘ioapic’?
  233 |  tmp.ioapic_pin = fwspec->param[0]
      |      ^~~~~~~~~~
      |      ioapic

with CONFIG_OF=y. IIUC, the following changes are needed to fold into
this patch. (At least I can continue to compile the kernel with this
change)

diff --git a/arch/x86/kernel/devicetree.c b/arch/x86/kernel/devicetree.c
index a0e8fc7d85f1..ddffd80f5c52 100644
--- a/arch/x86/kernel/devicetree.c
+++ b/arch/x86/kernel/devicetree.c
@@ -229,8 +229,8 @@ static int dt_irqdomain_alloc(struct irq_domain *domain, unsigned int virq,
 
 	it = &of_ioapic_type[type_index];
 	ioapic_set_alloc_attr(&tmp, NUMA_NO_NODE, it->trigger, it->polarity);
-	tmp.ioapic_id = mpc_ioapic_id(mp_irqdomain_ioapic_idx(domain));
-	tmp.ioapic_pin = fwspec->param[0];
+	tmp.devid = mpc_ioapic_id(mp_irqdomain_ioapic_idx(domain));
+	tmp.ioapic.pin = fwspec->param[0];
 
 	return mp_irqdomain_alloc(domain, virq, nr_irqs, &tmp);
 }

Regards,
Boqun

On Fri, Aug 21, 2020 at 02:24:34AM +0200, Thomas Gleixner wrote:
> Move the IOAPIC specific fields into their own struct and reuse the common
> devid. Get rid of the #ifdeffery as it does not matter at all whether the
> alloc info is a couple of bytes longer or not.
> 
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> Cc: Wei Liu <wei.liu@kernel.org>
> Cc: "K. Y. Srinivasan" <kys@microsoft.com>
> Cc: Stephen Hemminger <sthemmin@microsoft.com>
> Cc: Joerg Roedel <joro@8bytes.org>
> Cc: linux-hyperv@vger.kernel.org
> Cc: iommu@lists.linux-foundation.org
> Cc: Haiyang Zhang <haiyangz@microsoft.com>
> Cc: Jon Derrick <jonathan.derrick@intel.com>
> Cc: Lu Baolu <baolu.lu@linux.intel.com>
> ---
>  arch/x86/include/asm/hw_irq.h       |   23 ++++++-----
>  arch/x86/kernel/apic/io_apic.c      |   70 ++++++++++++++++++------------------
>  drivers/iommu/amd/iommu.c           |   14 +++----
>  drivers/iommu/hyperv-iommu.c        |    2 -
>  drivers/iommu/intel/irq_remapping.c |   18 ++++-----
>  5 files changed, 64 insertions(+), 63 deletions(-)
> 
> --- a/arch/x86/include/asm/hw_irq.h
> +++ b/arch/x86/include/asm/hw_irq.h
> @@ -44,6 +44,15 @@ enum irq_alloc_type {
>  	X86_IRQ_ALLOC_TYPE_HPET_GET_PARENT,
>  };
>  
> +struct ioapic_alloc_info {
> +	int				pin;
> +	int				node;
> +	u32				trigger : 1;
> +	u32				polarity : 1;
> +	u32				valid : 1;
> +	struct IO_APIC_route_entry	*entry;
> +};
> +
>  /**
>   * irq_alloc_info - X86 specific interrupt allocation info
>   * @type:	X86 specific allocation type
> @@ -53,6 +62,8 @@ enum irq_alloc_type {
>   * @mask:	CPU mask for vector allocation
>   * @desc:	Pointer to msi descriptor
>   * @data:	Allocation specific data
> + *
> + * @ioapic:	IOAPIC specific allocation data
>   */
>  struct irq_alloc_info {
>  	enum irq_alloc_type	type;
> @@ -64,6 +75,7 @@ struct irq_alloc_info {
>  	void			*data;
>  
>  	union {
> +		struct ioapic_alloc_info	ioapic;
>  		int		unused;
>  #ifdef	CONFIG_PCI_MSI
>  		struct {
> @@ -71,17 +83,6 @@ struct irq_alloc_info {
>  			irq_hw_number_t	msi_hwirq;
>  		};
>  #endif
> -#ifdef	CONFIG_X86_IO_APIC
> -		struct {
> -			int		ioapic_id;
> -			int		ioapic_pin;
> -			int		ioapic_node;
> -			u32		ioapic_trigger : 1;
> -			u32		ioapic_polarity : 1;
> -			u32		ioapic_valid : 1;
> -			struct IO_APIC_route_entry *ioapic_entry;
> -		};
> -#endif
>  #ifdef	CONFIG_DMAR_TABLE
>  		struct {
>  			int		dmar_id;
> --- a/arch/x86/kernel/apic/io_apic.c
> +++ b/arch/x86/kernel/apic/io_apic.c
> @@ -860,10 +860,10 @@ void ioapic_set_alloc_attr(struct irq_al
>  {
>  	init_irq_alloc_info(info, NULL);
>  	info->type = X86_IRQ_ALLOC_TYPE_IOAPIC;
> -	info->ioapic_node = node;
> -	info->ioapic_trigger = trigger;
> -	info->ioapic_polarity = polarity;
> -	info->ioapic_valid = 1;
> +	info->ioapic.node = node;
> +	info->ioapic.trigger = trigger;
> +	info->ioapic.polarity = polarity;
> +	info->ioapic.valid = 1;
>  }
>  
>  #ifndef CONFIG_ACPI
> @@ -878,32 +878,32 @@ static void ioapic_copy_alloc_attr(struc
>  
>  	copy_irq_alloc_info(dst, src);
>  	dst->type = X86_IRQ_ALLOC_TYPE_IOAPIC;
> -	dst->ioapic_id = mpc_ioapic_id(ioapic_idx);
> -	dst->ioapic_pin = pin;
> -	dst->ioapic_valid = 1;
> -	if (src && src->ioapic_valid) {
> -		dst->ioapic_node = src->ioapic_node;
> -		dst->ioapic_trigger = src->ioapic_trigger;
> -		dst->ioapic_polarity = src->ioapic_polarity;
> +	dst->devid = mpc_ioapic_id(ioapic_idx);
> +	dst->ioapic.pin = pin;
> +	dst->ioapic.valid = 1;
> +	if (src && src->ioapic.valid) {
> +		dst->ioapic.node = src->ioapic.node;
> +		dst->ioapic.trigger = src->ioapic.trigger;
> +		dst->ioapic.polarity = src->ioapic.polarity;
>  	} else {
> -		dst->ioapic_node = NUMA_NO_NODE;
> +		dst->ioapic.node = NUMA_NO_NODE;
>  		if (acpi_get_override_irq(gsi, &trigger, &polarity) >= 0) {
> -			dst->ioapic_trigger = trigger;
> -			dst->ioapic_polarity = polarity;
> +			dst->ioapic.trigger = trigger;
> +			dst->ioapic.polarity = polarity;
>  		} else {
>  			/*
>  			 * PCI interrupts are always active low level
>  			 * triggered.
>  			 */
> -			dst->ioapic_trigger = IOAPIC_LEVEL;
> -			dst->ioapic_polarity = IOAPIC_POL_LOW;
> +			dst->ioapic.trigger = IOAPIC_LEVEL;
> +			dst->ioapic.polarity = IOAPIC_POL_LOW;
>  		}
>  	}
>  }
>  
>  static int ioapic_alloc_attr_node(struct irq_alloc_info *info)
>  {
> -	return (info && info->ioapic_valid) ? info->ioapic_node : NUMA_NO_NODE;
> +	return (info && info->ioapic.valid) ? info->ioapic.node : NUMA_NO_NODE;
>  }
>  
>  static void mp_register_handler(unsigned int irq, unsigned long trigger)
> @@ -933,14 +933,14 @@ static bool mp_check_pin_attr(int irq, s
>  	 * pin with real trigger and polarity attributes.
>  	 */
>  	if (irq < nr_legacy_irqs() && data->count == 1) {
> -		if (info->ioapic_trigger != data->trigger)
> -			mp_register_handler(irq, info->ioapic_trigger);
> -		data->entry.trigger = data->trigger = info->ioapic_trigger;
> -		data->entry.polarity = data->polarity = info->ioapic_polarity;
> +		if (info->ioapic.trigger != data->trigger)
> +			mp_register_handler(irq, info->ioapic.trigger);
> +		data->entry.trigger = data->trigger = info->ioapic.trigger;
> +		data->entry.polarity = data->polarity = info->ioapic.polarity;
>  	}
>  
> -	return data->trigger == info->ioapic_trigger &&
> -	       data->polarity == info->ioapic_polarity;
> +	return data->trigger == info->ioapic.trigger &&
> +	       data->polarity == info->ioapic.polarity;
>  }
>  
>  static int alloc_irq_from_domain(struct irq_domain *domain, int ioapic, u32 gsi,
> @@ -1002,7 +1002,7 @@ static int alloc_isa_irq_from_domain(str
>  		if (!mp_check_pin_attr(irq, info))
>  			return -EBUSY;
>  		if (__add_pin_to_irq_node(irq_data->chip_data, node, ioapic,
> -					  info->ioapic_pin))
> +					  info->ioapic.pin))
>  			return -ENOMEM;
>  	} else {
>  		info->flags |= X86_IRQ_ALLOC_LEGACY;
> @@ -2092,8 +2092,8 @@ static int mp_alloc_timer_irq(int ioapic
>  		struct irq_alloc_info info;
>  
>  		ioapic_set_alloc_attr(&info, NUMA_NO_NODE, 0, 0);
> -		info.ioapic_id = mpc_ioapic_id(ioapic);
> -		info.ioapic_pin = pin;
> +		info.devid = mpc_ioapic_id(ioapic);
> +		info.ioapic.pin = pin;
>  		mutex_lock(&ioapic_mutex);
>  		irq = alloc_isa_irq_from_domain(domain, 0, ioapic, pin, &info);
>  		mutex_unlock(&ioapic_mutex);
> @@ -2297,7 +2297,7 @@ static int mp_irqdomain_create(int ioapi
>  
>  	init_irq_alloc_info(&info, NULL);
>  	info.type = X86_IRQ_ALLOC_TYPE_IOAPIC_GET_PARENT;
> -	info.ioapic_id = mpc_ioapic_id(ioapic);
> +	info.devid = mpc_ioapic_id(ioapic);
>  	parent = irq_remapping_get_irq_domain(&info);
>  	if (!parent)
>  		parent = x86_vector_domain;
> @@ -2932,9 +2932,9 @@ int mp_ioapic_registered(u32 gsi_base)
>  static void mp_irqdomain_get_attr(u32 gsi, struct mp_chip_data *data,
>  				  struct irq_alloc_info *info)
>  {
> -	if (info && info->ioapic_valid) {
> -		data->trigger = info->ioapic_trigger;
> -		data->polarity = info->ioapic_polarity;
> +	if (info && info->ioapic.valid) {
> +		data->trigger = info->ioapic.trigger;
> +		data->polarity = info->ioapic.polarity;
>  	} else if (acpi_get_override_irq(gsi, &data->trigger,
>  					 &data->polarity) < 0) {
>  		/* PCI interrupts are always active low level triggered. */
> @@ -2980,7 +2980,7 @@ int mp_irqdomain_alloc(struct irq_domain
>  		return -EINVAL;
>  
>  	ioapic = mp_irqdomain_ioapic_idx(domain);
> -	pin = info->ioapic_pin;
> +	pin = info->ioapic.pin;
>  	if (irq_find_mapping(domain, (irq_hw_number_t)pin) > 0)
>  		return -EEXIST;
>  
> @@ -2988,7 +2988,7 @@ int mp_irqdomain_alloc(struct irq_domain
>  	if (!data)
>  		return -ENOMEM;
>  
> -	info->ioapic_entry = &data->entry;
> +	info->ioapic.entry = &data->entry;
>  	ret = irq_domain_alloc_irqs_parent(domain, virq, nr_irqs, info);
>  	if (ret < 0) {
>  		kfree(data);
> @@ -2996,7 +2996,7 @@ int mp_irqdomain_alloc(struct irq_domain
>  	}
>  
>  	INIT_LIST_HEAD(&data->irq_2_pin);
> -	irq_data->hwirq = info->ioapic_pin;
> +	irq_data->hwirq = info->ioapic.pin;
>  	irq_data->chip = (domain->parent == x86_vector_domain) ?
>  			  &ioapic_chip : &ioapic_ir_chip;
>  	irq_data->chip_data = data;
> @@ -3006,8 +3006,8 @@ int mp_irqdomain_alloc(struct irq_domain
>  	add_pin_to_irq_node(data, ioapic_alloc_attr_node(info), ioapic, pin);
>  
>  	local_irq_save(flags);
> -	if (info->ioapic_entry)
> -		mp_setup_entry(cfg, data, info->ioapic_entry);
> +	if (info->ioapic.entry)
> +		mp_setup_entry(cfg, data, info->ioapic.entry);
>  	mp_register_handler(virq, data->trigger);
>  	if (virq < nr_legacy_irqs())
>  		legacy_pic->mask(virq);
> --- a/drivers/iommu/amd/iommu.c
> +++ b/drivers/iommu/amd/iommu.c
> @@ -3508,7 +3508,7 @@ static int get_devid(struct irq_alloc_in
>  	switch (info->type) {
>  	case X86_IRQ_ALLOC_TYPE_IOAPIC:
>  	case X86_IRQ_ALLOC_TYPE_IOAPIC_GET_PARENT:
> -		return get_ioapic_devid(info->ioapic_id);
> +		return get_ioapic_devid(info->devid);
>  	case X86_IRQ_ALLOC_TYPE_HPET:
>  	case X86_IRQ_ALLOC_TYPE_HPET_GET_PARENT:
>  		return get_hpet_devid(info->devid);
> @@ -3586,15 +3586,15 @@ static void irq_remapping_prepare_irte(s
>  	switch (info->type) {
>  	case X86_IRQ_ALLOC_TYPE_IOAPIC:
>  		/* Setup IOAPIC entry */
> -		entry = info->ioapic_entry;
> -		info->ioapic_entry = NULL;
> +		entry = info->ioapic.entry;
> +		info->ioapic.entry = NULL;
>  		memset(entry, 0, sizeof(*entry));
>  		entry->vector        = index;
>  		entry->mask          = 0;
> -		entry->trigger       = info->ioapic_trigger;
> -		entry->polarity      = info->ioapic_polarity;
> +		entry->trigger       = info->ioapic.trigger;
> +		entry->polarity      = info->ioapic.polarity;
>  		/* Mask level triggered irqs. */
> -		if (info->ioapic_trigger)
> +		if (info->ioapic.trigger)
>  			entry->mask = 1;
>  		break;
>  
> @@ -3680,7 +3680,7 @@ static int irq_remapping_alloc(struct ir
>  					iommu->irte_ops->set_allocated(table, i);
>  			}
>  			WARN_ON(table->min_index != 32);
> -			index = info->ioapic_pin;
> +			index = info->ioapic.pin;
>  		} else {
>  			index = -ENOMEM;
>  		}
> --- a/drivers/iommu/hyperv-iommu.c
> +++ b/drivers/iommu/hyperv-iommu.c
> @@ -101,7 +101,7 @@ static int hyperv_irq_remapping_alloc(st
>  	 * in the chip_data and hyperv_irq_remapping_activate()/hyperv_ir_set_
>  	 * affinity() set vector and dest_apicid directly into IO-APIC entry.
>  	 */
> -	irq_data->chip_data = info->ioapic_entry;
> +	irq_data->chip_data = info->ioapic.entry;
>  
>  	/*
>  	 * Hypver-V IO APIC irq affinity should be in the scope of
> --- a/drivers/iommu/intel/irq_remapping.c
> +++ b/drivers/iommu/intel/irq_remapping.c
> @@ -1113,7 +1113,7 @@ static struct irq_domain *intel_get_irq_
>  
>  	switch (info->type) {
>  	case X86_IRQ_ALLOC_TYPE_IOAPIC_GET_PARENT:
> -		return map_ioapic_to_ir(info->ioapic_id);
> +		return map_ioapic_to_ir(info->devid);
>  	case X86_IRQ_ALLOC_TYPE_HPET_GET_PARENT:
>  		return map_hpet_to_ir(info->devid);
>  	case X86_IRQ_ALLOC_TYPE_PCI_MSI:
> @@ -1254,16 +1254,16 @@ static void intel_irq_remapping_prepare_
>  	switch (info->type) {
>  	case X86_IRQ_ALLOC_TYPE_IOAPIC:
>  		/* Set source-id of interrupt request */
> -		set_ioapic_sid(irte, info->ioapic_id);
> +		set_ioapic_sid(irte, info->devid);
>  		apic_printk(APIC_VERBOSE, KERN_DEBUG "IOAPIC[%d]: Set IRTE entry (P:%d FPD:%d Dst_Mode:%d Redir_hint:%d Trig_Mode:%d Dlvry_Mode:%X Avail:%X Vector:%02X Dest:%08X SID:%04X SQ:%X SVT:%X)\n",
> -			info->ioapic_id, irte->present, irte->fpd,
> +			info->devid, irte->present, irte->fpd,
>  			irte->dst_mode, irte->redir_hint,
>  			irte->trigger_mode, irte->dlvry_mode,
>  			irte->avail, irte->vector, irte->dest_id,
>  			irte->sid, irte->sq, irte->svt);
>  
> -		entry = (struct IR_IO_APIC_route_entry *)info->ioapic_entry;
> -		info->ioapic_entry = NULL;
> +		entry = (struct IR_IO_APIC_route_entry *)info->ioapic.entry;
> +		info->ioapic.entry = NULL;
>  		memset(entry, 0, sizeof(*entry));
>  		entry->index2	= (index >> 15) & 0x1;
>  		entry->zero	= 0;
> @@ -1273,11 +1273,11 @@ static void intel_irq_remapping_prepare_
>  		 * IO-APIC RTE will be configured with virtual vector.
>  		 * irq handler will do the explicit EOI to the io-apic.
>  		 */
> -		entry->vector	= info->ioapic_pin;
> +		entry->vector	= info->ioapic.pin;
>  		entry->mask	= 0;			/* enable IRQ */
> -		entry->trigger	= info->ioapic_trigger;
> -		entry->polarity	= info->ioapic_polarity;
> -		if (info->ioapic_trigger)
> +		entry->trigger	= info->ioapic.trigger;
> +		entry->polarity	= info->ioapic.polarity;
> +		if (info->ioapic.trigger)
>  			entry->mask = 1; /* Mask level triggered irqs. */
>  		break;
>  
> 
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

  reply	other threads:[~2020-08-26  8:40 UTC|newest]

Thread overview: 146+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-21  0:24 [patch RFC 00/38] x86, PCI, XEN, genirq ...: Prepare for device MSI Thomas Gleixner
2020-08-21  0:24 ` Thomas Gleixner
2020-08-21  0:24 ` [patch RFC 01/38] iommu/amd: Prevent NULL pointer dereference Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-21  0:24 ` [patch RFC 02/38] x86/init: Remove unused init ops Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-21  0:24 ` [patch RFC 03/38] x86/irq: Rename X86_IRQ_ALLOC_TYPE_MSI* to reflect PCI dependency Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-21  0:24 ` [patch RFC 04/38] x86/irq: Add allocation type for parent domain retrieval Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-21  0:24 ` [patch RFC 05/38] iommu/vt-d: Consolidate irq domain getter Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-21  0:24 ` [patch RFC 06/38] iommu/amd: " Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-21  0:24 ` [patch RFC 07/38] iommu/irq_remapping: Consolidate irq domain lookup Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-21  0:24 ` [patch RFC 08/38] x86/irq: Prepare consolidation of irq_alloc_info Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-21  0:24 ` [patch RFC 09/38] x86/msi: Consolidate HPET allocation Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-21  0:24 ` [patch RFC 10/38] x86/ioapic: Consolidate IOAPIC allocation Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-26  8:40   ` Boqun Feng [this message]
2020-08-26  8:40     ` Boqun Feng
2020-08-26  8:40     ` Boqun Feng
2020-08-26  9:53     ` Thomas Gleixner
2020-08-26  9:53       ` Thomas Gleixner
2020-08-21  0:24 ` [patch RFC 11/38] x86/irq: Consolidate DMAR irq allocation Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-21  0:24 ` [patch RFC 12/38] x86/irq: Consolidate UV domain allocation Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-21  0:24 ` [patch RFC 13/38] PCI: MSI: Rework pci_msi_domain_calc_hwirq() Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-25 20:03   ` Bjorn Helgaas
2020-08-25 20:03     ` Bjorn Helgaas
2020-08-25 21:11     ` Thomas Gleixner
2020-08-25 21:11       ` Thomas Gleixner
2020-08-21  0:24 ` [patch RFC 14/38] x86/msi: Consolidate MSI allocation Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-21  0:24 ` [patch RFC 15/38] x86/msi: Use generic MSI domain ops Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-21  0:24 ` [patch RFC 16/38] x86/irq: Move apic_post_init() invocation to one place Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-21  0:24 ` [patch RFC 17/38] x86/pci: Reducde #ifdeffery in PCI init code Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-25 20:20   ` Bjorn Helgaas
2020-08-25 20:20     ` Bjorn Helgaas
2020-08-21  0:24 ` [patch RFC 18/38] x86/irq: Initialize PCI/MSI domain at PCI init time Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-21  6:31   ` kernel test robot
2020-08-21  0:24 ` [patch RFC 19/38] irqdomain/msi: Provide DOMAIN_BUS_VMD_MSI Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-21  0:24 ` [patch RFC 20/38] PCI: vmd: Mark VMD irqdomain with DOMAIN_BUS_VMD_MSI Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-25 20:04   ` Bjorn Helgaas
2020-08-25 20:04     ` Bjorn Helgaas
2020-08-21  0:24 ` [patch RFC 21/38] PCI: MSI: Provide pci_dev_has_special_msi_domain() helper Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-25 20:16   ` Bjorn Helgaas
2020-08-25 20:16     ` Bjorn Helgaas
2020-08-21  0:24 ` [patch RFC 22/38] x86/xen: Make xen_msi_init() static and rename it to xen_hvm_msi_init() Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-24  4:48   ` Jürgen Groß
2020-08-24  4:48     ` Jürgen Groß
2020-08-21  0:24 ` [patch RFC 23/38] x86/xen: Rework MSI teardown Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-24  5:09   ` Jürgen Groß
2020-08-24  5:09     ` Jürgen Groß
2020-08-21  0:24 ` [patch RFC 24/38] x86/xen: Consolidate XEN-MSI init Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-24  4:59   ` Jürgen Groß
2020-08-24  4:59     ` Jürgen Groß
2020-08-24 21:21     ` Thomas Gleixner
2020-08-24 21:21       ` Thomas Gleixner
2020-08-25  4:21       ` Jürgen Groß
2020-08-25  4:21         ` Jürgen Groß
2020-08-25  9:51         ` Thomas Gleixner
2020-08-25  9:51           ` Thomas Gleixner
2020-08-21  0:24 ` [patch RFC 25/38] irqdomain/msi: Allow to override msi_domain_alloc/free_irqs() Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-21  0:24 ` [patch RFC 26/38] x86/xen: Wrap XEN MSI management into irqdomain Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-24  6:21   ` Jürgen Groß
2020-08-24  6:21     ` Jürgen Groß
2020-08-25  7:57     ` Thomas Gleixner
2020-08-25  7:57       ` Thomas Gleixner
2020-08-21  0:24 ` [patch RFC 27/38] iommm/vt-d: Store irq domain in struct device Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-21  7:03   ` kernel test robot
2020-08-21  0:24 ` [patch RFC 28/38] iommm/amd: " Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-21  0:24 ` [patch RFC 29/38] x86/pci: Set default irq domain in pcibios_add_device() Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-21  0:24 ` [patch RFC 30/38] PCI/MSI: Allow to disable arch fallbacks Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-25 20:07   ` Bjorn Helgaas
2020-08-25 20:07     ` Bjorn Helgaas
2020-08-25 21:28     ` Thomas Gleixner
2020-08-25 21:28       ` Thomas Gleixner
2020-08-25 21:35       ` Bjorn Helgaas
2020-08-25 21:35         ` Bjorn Helgaas
2020-08-25 21:40         ` Thomas Gleixner
2020-08-25 21:40           ` Thomas Gleixner
2020-08-25 22:03           ` Thomas Gleixner
2020-08-25 22:03             ` Thomas Gleixner
2020-08-21  0:24 ` [patch RFC 31/38] x86/irq: Cleanup the arch_*_msi_irqs() leftovers Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-21  0:24 ` [patch RFC 32/38] x86/irq: Make most MSI ops XEN private Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-21  0:24 ` [patch RFC 33/38] x86/irq: Add DEV_MSI allocation type Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-21  0:24 ` [patch RFC 34/38] x86/msi: Let pci_msi_prepare() handle non-PCI MSI Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-25 20:24   ` Bjorn Helgaas
2020-08-25 20:24     ` Bjorn Helgaas
2020-08-25 21:30     ` Thomas Gleixner
2020-08-25 21:30       ` Thomas Gleixner
2020-08-25 21:50       ` Bjorn Helgaas
2020-08-25 21:50         ` Bjorn Helgaas
2020-08-21  0:24 ` [patch RFC 35/38] platform-msi: Provide default irq_chip::ack Thomas Gleixner
2020-08-21  0:24   ` Thomas Gleixner
2020-08-21  0:25 ` [patch RFC 36/38] platform-msi: Add device MSI infrastructure Thomas Gleixner
2020-08-21  0:25   ` Thomas Gleixner
2020-08-21  0:25 ` [patch RFC 37/38] irqdomain/msi: Provide msi_alloc/free_store() callbacks Thomas Gleixner
2020-08-21  0:25   ` Thomas Gleixner
2020-08-21  0:25 ` [patch RFC 38/38] irqchip: Add IMS array driver - NOT FOR MERGING Thomas Gleixner
2020-08-21  0:25   ` Thomas Gleixner
2020-08-21  8:48   ` kernel test robot
2020-08-21 12:45   ` Jason Gunthorpe
2020-08-21 12:45     ` Jason Gunthorpe
2020-08-21 19:47     ` Thomas Gleixner
2020-08-21 19:47       ` Thomas Gleixner
2020-08-21 20:17       ` Jason Gunthorpe
2020-08-21 20:17         ` Jason Gunthorpe
2020-08-21 23:47         ` Thomas Gleixner
2020-08-21 23:47           ` Thomas Gleixner
2020-08-22  0:51           ` Jason Gunthorpe
2020-08-22  0:51             ` Jason Gunthorpe
2020-08-22  1:34             ` Thomas Gleixner
2020-08-22  1:34               ` Thomas Gleixner
2020-08-22 23:05               ` Jason Gunthorpe
2020-08-22 23:05                 ` Jason Gunthorpe
2020-08-23  8:03                 ` Thomas Gleixner
2020-08-23  8:03                   ` Thomas Gleixner
2020-08-22 14:19 ` [patch RFC 00/38] x86, PCI, XEN, genirq ...: Prepare for device MSI Jürgen Groß
2020-08-22 14:19   ` Jürgen Groß

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200826084019.GA6174@debian-boqun.qqnc3lrjykvubdpftowmye0fmh.lx.internal.cloudapp.net \
    --to=boqun.feng@gmail.com \
    --cc=alex.williamson@redhat.com \
    --cc=baolu.lu@intel.com \
    --cc=baolu.lu@linux.intel.com \
    --cc=bhelgaas@google.com \
    --cc=boris.ostrovsky@oracle.com \
    --cc=dan.j.williams@intel.com \
    --cc=dave.jiang@intel.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=haiyangz@microsoft.com \
    --cc=iommu@lists.linux-foundation.org \
    --cc=jacob.jun.pan@intel.com \
    --cc=jgg@mellanox.com \
    --cc=jgross@suse.com \
    --cc=jonathan.derrick@intel.com \
    --cc=joro@8bytes.org \
    --cc=kevin.tian@intel.com \
    --cc=konrad.wilk@oracle.com \
    --cc=kys@microsoft.com \
    --cc=linux-hyperv@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=lorenzo.pieralisi@arm.com \
    --cc=maz@kernel.org \
    --cc=megha.dey@intel.com \
    --cc=rafael@kernel.org \
    --cc=rja@hpe.com \
    --cc=sivanich@hpe.com \
    --cc=sstabellini@kernel.org \
    --cc=steve.wahl@hpe.com \
    --cc=sthemmin@microsoft.com \
    --cc=tglx@linutronix.de \
    --cc=wei.liu@kernel.org \
    --cc=x86@kernel.org \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.