Commit-ID: 9d4c0313f24a05e5252e7106636bf3c5b6318f5d Gitweb: http://git.kernel.org/tip/9d4c0313f24a05e5252e7106636bf3c5b6318f5d Author: Thomas Gleixner <t...@linutronix.de> AuthorDate: Mon, 4 May 2015 10:47:40 +0800 Committer: Thomas Gleixner <t...@linutronix.de> CommitDate: Tue, 5 May 2015 11:14:48 +0200
irq_remapping/vt-d: Init all MSI entries not just the first one Commit b106ee63abcc ("irq_remapping/vt-d: Enhance Intel IR driver to support hierarchical irqdomains") caused a regression, which forgot to initialize remapping data structures other than the first entry when setting up remapping entries for multiple MSIs. [ Jiang: Commit message ] Fixes: b106ee63abcc ("irq_remapping/vt-d: Enhance Intel IR driver to support hierarchical irqdomains") Signed-off-by: Thomas Gleixner <t...@linutronix.de> Signed-off-by: Jiang Liu <jiang....@linux.intel.com> Cc: Konrad Rzeszutek Wilk <konrad.w...@oracle.com> Cc: David Cohen <david.a.co...@linux.intel.com> Cc: Sander Eikelenboom <li...@eikelenboom.it> Cc: David Vrabel <david.vra...@citrix.com> Cc: Tony Luck <tony.l...@intel.com> Cc: Greg Kroah-Hartman <gre...@linuxfoundation.org> Cc: io...@lists.linux-foundation.org Cc: Bjorn Helgaas <bhelg...@google.com> Cc: Benjamin Herrenschmidt <b...@kernel.crashing.org> Cc: Rafael J. Wysocki <r...@rjwysocki.net> Cc: Randy Dunlap <rdun...@infradead.org> Cc: Yinghai Lu <ying...@kernel.org> Cc: Borislav Petkov <b...@alien8.de> Cc: Dimitri Sivanich <sivan...@sgi.com> Cc: Joerg Roedel <j...@8bytes.org> Link: http://lkml.kernel.org/r/1430707662-28598-2-git-send-email-jiang....@linux.intel.com Signed-off-by: Thomas Gleixner <t...@linutronix.de> --- drivers/iommu/intel_irq_remapping.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/drivers/iommu/intel_irq_remapping.c b/drivers/iommu/intel_irq_remapping.c index 14d9569..7ecc6b3 100644 --- a/drivers/iommu/intel_irq_remapping.c +++ b/drivers/iommu/intel_irq_remapping.c @@ -1113,7 +1113,7 @@ static int intel_irq_remapping_alloc(struct irq_domain *domain, { struct intel_iommu *iommu = domain->host_data; struct irq_alloc_info *info = arg; - struct intel_ir_data *data; + struct intel_ir_data *data, *ird; struct irq_data *irq_data; struct irq_cfg *irq_cfg; int i, ret, index; @@ -1158,14 +1158,20 @@ static int intel_irq_remapping_alloc(struct irq_domain *domain, } if (i > 0) { - data = kzalloc(sizeof(*data), GFP_KERNEL); - if (!data) + ird = kzalloc(sizeof(*ird), GFP_KERNEL); + if (!ird) goto out_free_data; + /* Initialize the common data */ + ird->irq_2_iommu = data->irq_2_iommu; + ird->irq_2_iommu.sub_handle = i; + } else { + ird = data; } + irq_data->hwirq = (index << 16) + i; - irq_data->chip_data = data; + irq_data->chip_data = ird; irq_data->chip = &intel_ir_chip; - intel_irq_remapping_prepare_irte(data, irq_cfg, info, index, i); + intel_irq_remapping_prepare_irte(ird, irq_cfg, info, index, i); irq_set_status_flags(virq + i, IRQ_MOVE_PCNTXT); } return 0; -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/