diff options
author | Joerg Roedel <jroedel@suse.de> | 2015-08-13 11:07:25 +0200 |
---|---|---|
committer | Joerg Roedel <jroedel@suse.de> | 2015-08-13 19:49:05 +0200 |
commit | a130e69f28ba1d180242b581a15d09f06dad9227 (patch) | |
tree | cfa6e3591dfcccb5c5c3c12d474d37bdca9e1d3a /drivers/iommu | |
parent | f7644cbfcdf03528f0f450f3940c4985b2291f49 (diff) | |
download | linux-stable-a130e69f28ba1d180242b581a15d09f06dad9227.tar.gz linux-stable-a130e69f28ba1d180242b581a15d09f06dad9227.tar.bz2 linux-stable-a130e69f28ba1d180242b581a15d09f06dad9227.zip |
iommu/amd: Simplify allocation in irq_remapping_alloc()
Allocate the irq data only in the loop.
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Diffstat (limited to 'drivers/iommu')
-rw-r--r-- | drivers/iommu/amd_iommu.c | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c index 658ee39e6569..a1585796785b 100644 --- a/drivers/iommu/amd_iommu.c +++ b/drivers/iommu/amd_iommu.c @@ -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: |