|
@@ -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:
|