Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a130e69f authored by Joerg Roedel's avatar Joerg Roedel
Browse files

iommu/amd: Simplify allocation in irq_remapping_alloc()



Allocate the irq data only in the loop.

Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
parent f7644cbf
Loading
Loading
Loading
Loading
+6 −11
Original line number Original line Diff line number Diff line
@@ -3947,11 +3947,6 @@ static int irq_remapping_alloc(struct irq_domain *domain, unsigned int virq,
	if (ret < 0)
	if (ret < 0)
		return ret;
		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 (info->type == X86_IRQ_ALLOC_TYPE_IOAPIC) {
		if (get_irq_table(devid, true))
		if (get_irq_table(devid, true))
			index = info->ioapic_pin;
			index = info->ioapic_pin;
@@ -3962,7 +3957,6 @@ static int irq_remapping_alloc(struct irq_domain *domain, unsigned int virq,
	}
	}
	if (index < 0) {
	if (index < 0) {
		pr_warn("Failed to allocate IRTE\n");
		pr_warn("Failed to allocate IRTE\n");
		kfree(data);
		goto out_free_parent;
		goto out_free_parent;
	}
	}


@@ -3974,17 +3968,18 @@ static int irq_remapping_alloc(struct irq_domain *domain, unsigned int virq,
			goto out_free_data;
			goto out_free_data;
		}
		}


		if (i > 0) {
		ret = -ENOMEM;
		data = kzalloc(sizeof(*data), GFP_KERNEL);
		data = kzalloc(sizeof(*data), GFP_KERNEL);
		if (!data)
		if (!data)
			goto out_free_data;
			goto out_free_data;
		}

		irq_data->hwirq = (devid << 16) + i;
		irq_data->hwirq = (devid << 16) + i;
		irq_data->chip_data = data;
		irq_data->chip_data = data;
		irq_data->chip = &amd_ir_chip;
		irq_data->chip = &amd_ir_chip;
		irq_remapping_prepare_irte(data, cfg, info, devid, index, i);
		irq_remapping_prepare_irte(data, cfg, info, devid, index, i);
		irq_set_status_flags(virq + i, IRQ_MOVE_PCNTXT);
		irq_set_status_flags(virq + i, IRQ_MOVE_PCNTXT);
	}
	}

	return 0;
	return 0;


out_free_data:
out_free_data: