mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-12 05:48:40 +00:00
iommu/amd: Simplify allocation in irq_remapping_alloc()
Allocate the irq data only in the loop. Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
parent
f7644cbfcd
commit
a130e69f28
1 changed files with 6 additions and 11 deletions
|
@ -3947,11 +3947,6 @@ static int irq_remapping_alloc(struct irq_domain *domain, unsigned int virq,
|
|||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = -ENOMEM;
|
||||
data = kzalloc(sizeof(*data), GFP_KERNEL);
|
||||
if (!data)
|
||||
goto out_free_parent;
|
||||
|
||||
if (info->type == X86_IRQ_ALLOC_TYPE_IOAPIC) {
|
||||
if (get_irq_table(devid, true))
|
||||
index = info->ioapic_pin;
|
||||
|
@ -3962,7 +3957,6 @@ static int irq_remapping_alloc(struct irq_domain *domain, unsigned int virq,
|
|||
}
|
||||
if (index < 0) {
|
||||
pr_warn("Failed to allocate IRTE\n");
|
||||
kfree(data);
|
||||
goto out_free_parent;
|
||||
}
|
||||
|
||||
|
@ -3974,17 +3968,18 @@ static int irq_remapping_alloc(struct irq_domain *domain, unsigned int virq,
|
|||
goto out_free_data;
|
||||
}
|
||||
|
||||
if (i > 0) {
|
||||
data = kzalloc(sizeof(*data), GFP_KERNEL);
|
||||
if (!data)
|
||||
goto out_free_data;
|
||||
}
|
||||
ret = -ENOMEM;
|
||||
data = kzalloc(sizeof(*data), GFP_KERNEL);
|
||||
if (!data)
|
||||
goto out_free_data;
|
||||
|
||||
irq_data->hwirq = (devid << 16) + i;
|
||||
irq_data->chip_data = data;
|
||||
irq_data->chip = &amd_ir_chip;
|
||||
irq_remapping_prepare_irte(data, cfg, info, devid, index, i);
|
||||
irq_set_status_flags(virq + i, IRQ_MOVE_PCNTXT);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
out_free_data:
|
||||
|
|
Loading…
Reference in a new issue