diff options
author | Robert Richter <rrichter@cavium.com> | 2017-02-01 20:38:25 +0300 |
---|---|---|
committer | Marc Zyngier <marc.zyngier@arm.com> | 2017-02-08 18:47:44 +0300 |
commit | 5bc13c2cbeec776a2b724cb51bf11fbc30c23318 (patch) | |
tree | 55498e6d7537123b40960ad94af921b78b91650d /drivers/irqchip | |
parent | 4cfffcfa5106492f5785924ce2e9af49f075999b (diff) | |
download | linux-5bc13c2cbeec776a2b724cb51bf11fbc30c23318.tar.xz |
irqchip/gic-v3-its: Fix command buffer allocation
The its command buffer must be page aligned, but kzalloc() is not
guaranteed to be (though it is mostly when allocating 64k). Use
__get_free_pages() as this is used for other buffers as well.
Signed-off-by: Robert Richter <rrichter@cavium.com>
[Marc: fixed the error path]
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Diffstat (limited to 'drivers/irqchip')
-rw-r--r-- | drivers/irqchip/irq-gic-v3-its.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c index fcbba10c0ed9..ee928de49737 100644 --- a/drivers/irqchip/irq-gic-v3-its.c +++ b/drivers/irqchip/irq-gic-v3-its.c @@ -1691,7 +1691,8 @@ static int __init its_probe_one(struct resource *res, its->ite_size = ((gic_read_typer(its_base + GITS_TYPER) >> 4) & 0xf) + 1; its->numa_node = numa_node; - its->cmd_base = kzalloc(ITS_CMD_QUEUE_SZ, GFP_KERNEL); + its->cmd_base = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, + get_order(ITS_CMD_QUEUE_SZ)); if (!its->cmd_base) { err = -ENOMEM; goto out_free_its; @@ -1749,7 +1750,7 @@ static int __init its_probe_one(struct resource *res, out_free_tables: its_free_tables(its); out_free_cmd: - kfree(its->cmd_base); + free_pages((unsigned long)its->cmd_base, get_order(ITS_CMD_QUEUE_SZ)); out_free_its: kfree(its); out_unmap: |