On Fri, Feb 23, 2018 at 11:27:31PM +0100, Sebastian Andrzej Siewior wrote:
> @@ -4103,10 +4093,26 @@ static int irq_remapping_alloc(struct irq_domain 
> *domain, unsigned int virq,
>               return ret;
>  
>       if (info->type == X86_IRQ_ALLOC_TYPE_IOAPIC) {
> -             if (get_irq_table(devid, true))
> +             struct irq_remap_table *table;
> +             struct amd_iommu *iommu;
> +
> +             table = get_irq_table(devid);
> +             if (table) {
> +                     if (!table->min_index) {
> +                             /*
> +                              * Keep the first 32 indexes free for IOAPIC
> +                              * interrupts.
> +                              */
> +                             table->min_index = 32;
> +                             iommu = amd_iommu_rlookup_table[devid];
> +                             for (i = 0; i < 32; ++i)
> +                                     iommu->irte_ops->set_allocated(table, 
> i);
> +                     }

I think this needs to be protected by the table->lock.

_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to